Ansible全局变量之上的单个任务变量

Ansible全局变量之上的单个任务变量,ansible,Ansible,我有一个为多个主机配置环境变量的剧本 这些是在defaults\main.yml中设置的全局变量: environment: http_proxy: blabla https_proxy: blabla 现在我有一个任务,需要为python库设置另一个环境变量。 但是,当我为单个任务设置环境变量时,它会覆盖全局环境变量 - name: some task command: command environment: ENV_VAR: "blabla" 我希望

我有一个为多个主机配置环境变量的剧本

这些是在
defaults\main.yml
中设置的全局变量:

environment:
  http_proxy: blabla
  https_proxy: blabla
现在我有一个任务,需要为python库设置另一个环境变量。 但是,当我为单个任务设置环境变量时,它会覆盖全局环境变量

- name: some task
    command: command
    environment:
      ENV_VAR: "blabla"
我希望将单个任务的ENV_变量添加到全局变量之上。但这有可能吗

这一页没有给我任何结论


我是否可以使用
with_items
选项来实现这一点呢?

下面的剧本演示了使用关联的。使用
-v
选项运行此命令,以查看shell命令的输出:

---
- 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   


下面的剧本演示了使用与关联的。使用
-v
选项运行此命令,以查看shell命令的输出:

---
- 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