Настройка среды (и работа с прокси)
Новое в версии 1.1.
Вполне возможно, что вам потребуется получать обновления пакетов через прокси или даже получать некоторые обновления пакетов через прокси и обращаться к другим пакетам не через прокси. Или, может быть, сценарий, который вы хотите вызвать, также потребует установки определённых переменных среды для правильной работы.
Ansible упрощает настройку вашей среды, используя ключевое слово ‘environment’. Вот пример:
- hosts: all
remote_user: root
tasks:
- apt: name=cobbler state=installed
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:
- apt: name=cobbler state=installed
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: в настоящее время не поддерживается для целей Windows
См. также
- Работа с Playbook
- Введение в Playbook
- Список рассылки пользователей
- У вас есть вопрос? Зайдите на группу Google!
- 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.7/user_guide/playbooks_environment.html