Spec-Zone.ru › Ansible 2.8

Настройка среды (и работа с прокси)

Новое в версии 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

Spec-Zone.ru

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