Spec-Zone.ru › Ansible

Настройка удалённой среды

Новое в версии 1.1.

Вы можете использовать ключевое слово environment на уровне плейбука, блока или задания для установки переменной окружения для действия на удалённом хосте. С помощью этого ключевого слова можно включить использование прокси для задачи, выполняющей http-запросы, установить необходимые переменные окружения для менеджеров версий, специфичных для языка, и многое другое.

Когда вы устанавливаете значение с помощью environment: на уровне плейбука или блока, оно доступно только для задач внутри этого плейбука или блока, выполняемых одним и тем же пользователем. Ключевое слово environment: не влияет на сам Ansible, настройки конфигурации Ansible, среду для других пользователей или выполнение других плагинов, таких как lookups и фильтры. Переменные, установленные с помощью environment: , не автоматически становятся фактами Ansible, даже если вы устанавливаете их на уровне плейбука. Вы должны включить явную задачу gather_facts в свой плейбук и установить ключевое слово environment в этой задаче, чтобы превратить эти значения в факты Ansible.

Настройка удалённой среды в задаче

Вы можете установить среду непосредственно на уровне задания.

- hosts: all
  remote_user: root

  tasks:

    - name: Install cobbler
      ansible.builtin.package:
        name: cobbler
        state: present
      environment:
        http_proxy: http://proxy.example.com:8080

Вы можете повторно использовать настройки среды, определив их как переменные в своём плейбуке и обращаясь к ним в задаче так же, как вы обращаетесь к любой сохранённой переменной Ansible.

- hosts: all
  remote_user: root

  # create a variable named "proxy_env" that is a dictionary
  vars:
    proxy_env:
      http_proxy: http://proxy.example.com:8080

  tasks:

    - name: Install cobbler
      ansible.builtin.package:
        name: cobbler
        state: present
      environment: "{{ proxy_env }}"

Вы можете хранить настройки среды для повторного использования в нескольких плейбуках, определив их в файле group_vars.

---
# file: group_vars/boston

ntp_server: ntp.bos.example.com
backup: bak.bos.example.com
proxy_env:
  http_proxy: http://proxy.bos.example.com:8080
  https_proxy: http://proxy.bos.example.com:8080

Вы можете настроить удалённую среду на уровне плейбука.

- hosts: testing

  roles:
     - php
     - nginx

  environment:
    http_proxy: http://proxy.example.com:8080

Эти примеры показывают настройки прокси, но вы можете предоставить любое количество настроек таким образом.

Работа с менеджерами версий, специфичными для языка

Некоторые менеджеры версий, специфичные для языка (такие как rbenv и nvm) требуют установки переменных среды во время их использования. При ручном использовании этих инструментов вы обычно загружаете переменные среды из скрипта или добавляете строки в файл конфигурации вашей оболочки. В Ansible это можно сделать с помощью ключевого слова environment на уровне плейбука.

---
### A playbook demonstrating a common npm workflow:
# - Check for package.json in the application directory
# - If package.json exists:
#   * Run npm prune
#   * Run npm install

- hosts: application
  become: false

  vars:
    node_app_dir: /var/local/my_node_app

  environment:
    NVM_DIR: /var/local/nvm
    PATH: /var/local/nvm/versions/node/v4.2.1/bin:{{ ansible_env.PATH }}

  tasks:
  - name: Check for package.json
    ansible.builtin.stat:
      path: '{{ node_app_dir }}/package.json'
    register: packagejson

  - name: Run npm prune
    ansible.builtin.command: npm prune
    args:
      chdir: '{{ node_app_dir }}'
    when: packagejson.stat.exists

  - name: Run npm install
    community.general.npm:
      path: '{{ node_app_dir }}'
    when: packagejson.stat.exists

Примечание

В примере выше используется ansible_env в качестве части PATH. Основание переменных на ansible_env рискованно. Ansible заполняет значения ansible_env путём сбора фактов, поэтому значение переменных зависит от удалённого пользователя или пользователя, используемого Ansible при сборе этих фактов. Если вы измените remote_user/become_user, значения в ansible_env могут быть не теми, которые вы ожидаете.

Предупреждение

Переменные среды обычно передаются в открытом виде (зависит от плагина оболочки), поэтому они не являются рекомендуемым способом передачи секретов в модуль, который выполняется.

Вы также можете указать среду на уровне задания.

---
- name: Install ruby 2.3.1
  ansible.builtin.command: rbenv install {{ rbenv_ruby_version }}
  args:
    creates: '{{ rbenv_root }}/versions/{{ rbenv_ruby_version }}/bin/ruby'
  vars:
    rbenv_root: /usr/local/rbenv
    rbenv_ruby_version: 2.3.1
  environment:
    CONFIGURE_OPTS: '--disable-install-doc'
    RBENV_ROOT: '{{ rbenv_root }}'
    PATH: '{{ rbenv_root }}/bin:{{ rbenv_root }}/shims:{{ rbenv_plugins }}/ruby-build/bin:{{ ansible_env.PATH }}'

См. также

Плейбуки Ansible

Введение в плейбуки

Связь

Есть вопросы? Нужна помощь? Хотите поделиться своими идеями? Посетите руководство Ansible по общению

© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_environment.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API