Настройка удалённой среды
Новая версия 1.1.
Вы можете использовать ключевое слово environment на уровне плейбука, блока или задания для установки переменной среды для действия на удалённом хосте. С помощью этого ключевого слова можно включить использование прокси для задания, выполняющего запросы HTTP, установить необходимые переменные среды для менеджеров версий конкретного языка и многое другое.
Когда вы устанавливаете значение с помощью environment: на уровне плейбука или блока, оно доступно только для заданий внутри плейбука или блока, выполняемых одним и тем же пользователем. Ключевое слово environment: не влияет на сам Ansible, настройки конфигурации Ansible, среду для других пользователей или выполнение других плагинов, таких как поиск и фильтры. Переменные, установленные с помощью 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 во время сбора этих фактов. Если вы измените удалённого пользователя/пользователя от имени которого выполняется Ansible, значения в 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 }}'
См. также
- Введение в плейбуки
-
Введение в плейбуки
- Список рассылки пользователей
-
Есть вопрос? Заходите на форум!
- irc.freenode.net
-
Чат канала IRC #ansible
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/user_guide/playbooks_environment.html