Ansible одна переменная задачи поверх глобальной переменной - PullRequest
1 голос
/ 07 января 2020

У меня есть книга игр, где я настраиваю переменные среды для нескольких хостов.

это глобальные переменные, установленные в defaults\main.yml:

environment:
  http_proxy: blabla
  https_proxy: blabla

Теперь у меня есть одна задача, где Мне нужно установить другую переменную среды для библиотеки python. Однако, когда я устанавливаю переменную среды для этой единственной задачи, она перезаписывает глобальные переменные среды.

- name: some task
    command: command
    environment:
      ENV_VAR: "blabla"

Я хочу, чтобы ENV_VAR для отдельной задачи добавлялся поверх глобальных переменных. Но возможно ли это?

https://docs.ansible.com/ansible/latest/user_guide/playbooks_environment.html Эта страница не дала мне ничего убедительного.

Могу ли я использовать опцию with_items, чтобы добиться этого, возможно?

1 Ответ

0 голосов
/ 07 января 2020

Следующая пьеса демонстрирует возможную реализацию для вашего требования с использованием фильтра combine , связанного с default. Запустите это с параметром -v, чтобы увидеть выходные данные команд оболочки:

---
- name: Parse several results as json strings
  hosts: localhost
  gather_facts: false
  # This will automatically combine `default_env` (default to empty if it does not exists)
  # with `more_env` if this latest var is defined somewhere
  environment: "{{ default_env | default({}) | combine(more_env | default({})) }}"

  vars:
    # Define default environment variables
    default_env:
      http_proxy: blabla
      https_proxy: blabla

  tasks:
    - name: Show some vars
      vars:
        # Inject more environment variables for this task
        more_env:
          toto: titi
      shell: |-
        echo $http_proxy
        echo $https_proxy
        echo $toto

    - name: Same with default env
      shell: |-
        echo $http_proxy
        echo $https_proxy
        echo $toto

, что дает:

$ ansible-playbook test.yml -v

PLAY [Default env override] ****************************************************************************************************************************************************************************************************************************

TASK [Show some vars] ***************************************************************************************************************************************************************************************************************************************************
changed: [localhost] => {"changed": true, "cmd": "echo $http_proxy\necho $https_proxy\necho $toto", "delta": "0:00:00.002207", "end": "2020-01-07 09:57:30.178989", "rc": 0, "start": "2020-01-07 09:57:30.176782", "stderr": "", "stderr_lines": [], "stdout": "blabla\nblabla\ntiti", "stdout_lines": ["blabla", "blabla", "titi"]}

TASK [Same with default env] ********************************************************************************************************************************************************************************************************************************************
changed: [localhost] => {"changed": true, "cmd": "echo $http_proxy\necho $https_proxy\necho $toto", "delta": "0:00:00.001875", "end": "2020-01-07 09:57:30.626163", "rc": 0, "start": "2020-01-07 09:57:30.624288", "stderr": "", "stderr_lines": [], "stdout": "blabla\nblabla", "stdout_lines": ["blabla", "blabla"]}

PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...