Настройка удалённого окружения
Добавлено в версии 1.1.
Вы можете использовать ключевое слово environment на уровне play, блока или задачи, чтобы задать переменную окружения для действия на удалённом хосте. С помощью этого ключевого слова можно включить использование прокси для задачи, выполняющей HTTP-запросы, задать необходимые переменные окружения для менеджеров версий, специфичных для языка, и многое другое.
Если задать значение с помощью environment: на уровне play или блока, оно будет доступно только задачам внутри play или блока, которые выполняются от имени того же пользователя. Ключевое слово environment: не влияет на сам Ansible, параметры конфигурации Ansible, окружение других пользователей или выполнение других плагинов, таких как lookups и фильтры. Переменные, заданные с помощью environment:, не становятся автоматически фактами Ansible, даже если задать их на уровне play. Чтобы преобразовать эти значения в факты Ansible, необходимо включить в playbook явную задачу gather_facts и задать для этой задачи ключевое слово environment.
Настройка удалённого окружения в задаче
Вы можете задать окружение непосредственно на уровне задачи.
- hosts: all
remote_user: root
tasks:
- name: Install cobbler
ansible.builtin.package:
name: cobbler
state: present
environment:
http_proxy: http://proxy.example.com:8080
Вы можете повторно использовать настройки окружения, определив их как переменные в play и обращаясь к ним в задаче так же, как к любой сохранённой переменной 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 }}"
Вы можете сохранить настройки окружения для повторного использования в нескольких playbook, определив их в файле 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
Вы можете задать удалённое окружение на уровне play.
- hosts: testing
roles:
- php
- nginx
environment:
http_proxy: http://proxy.example.com:8080
В этих примерах показаны настройки прокси, но таким способом можно задать любое количество параметров.
Работа с менеджерами версий, специфичными для языка
Некоторые менеджеры версий, специфичные для языка (например, rbenv и nvm), требуют задавать переменные окружения во время их использования. При работе с этими инструментами вручную обычно считывают переменные окружения из скрипта или строк, добавленных в файл конфигурации оболочки. В Ansible это можно сделать с помощью ключевого слова environment на уровне play.
---
### 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 при сборе фактов, поэтому значения переменных зависят от remote_user или become_user, от имени которых 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–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/playbook_guide/playbooks_environment.html