Настройка среды (и работа с прокси)
Новое в версии 1.1.
Возможно, вам потребуется обновлять пакеты через прокси, или даже обновлять некоторые пакеты через прокси, а доступ к другим пакетам осуществлять не через прокси. Или, может быть, скрипту, который вы хотите вызвать, также необходимо установить определённые переменные среды для корректной работы.
Ansible позволяет легко настроить среду удалённого выполнения с помощью ключевого слова «environment». Вот пример:
- hosts: all
remote_user: root
tasks:
- name: Install cobbler
package:
name: cobbler
state: present
environment:
http_proxy: http://proxy.example.com:8080
Среду также можно сохранить в переменной и получить доступ к ней следующим образом:
- hosts: all
remote_user: root
# here we make a variable named "proxy_env" that is a dictionary
vars:
proxy_env:
http_proxy: http://proxy.example.com:8080
tasks:
- name: Install cobbler
package:
name: cobbler
state: present
environment: "{{proxy_env}}"
Вы также можете использовать её на уровне плейбука:
- hosts: testhost
roles:
- php
- nginx
environment:
http_proxy: http://proxy.example.com:8080
Хотя выше показаны только настройки прокси, можно указать любое количество настроек. Наиболее логичным местом для определения хеша среды является файл 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
Работа с менеджерами версий для конкретных языков
Некоторые менеджеры версий для конкретных языков (например, 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
stat:
path: '{{ node_app_dir }}/package.json'
register: packagejson
- name: npm prune
command: npm prune
args:
chdir: '{{ node_app_dir }}'
when: packagejson.stat.exists
- name: npm install
npm:
path: '{{ node_app_dir }}'
when: packagejson.stat.exists
Вы также можете просто указать среду для отдельной задачи:
---
- name: install ruby 2.3.1
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 }}'
Примечание
environment: не влияет на сам Ansible, ТОЛЬКО на контекст выполнения конкретной задачи, и это не включает настройки конфигурации самого Ansible.
См. также
- Работа с плейбуками
- Введение в плейбуки
- Список рассылки пользователей
- У вас есть вопросы? Загляните на форум!
- irc.freenode.net
- #ansible IRC-чат-канал
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.8/user_guide/playbooks_environment.html