如何仅在定义变量时在ansible任务中设置环境

WiS*_*GaN 3 ansible

我有两种机器。一种没有互联网访问权限(比如说,我们称之为outgoing restricted),因此需要代理来运行命令,例如dnf install,另一种可以运行dnf install直接运行。

我希望 ansibleoutgoing restricted在运行时自动在这些主机上使用代理dnf install,因此我有主机文件和下面的剧本:

outgoing_restricted:
  hosts:
    bar1.foo.com:
    bar2.foo.com:
  vars:
    # Sets up ssh forwarding for remote to use local machine
    # Need to enable and start squid with http_port 3128
    ansible_ssh_extra_args: "-R 3129:localhost:3128"
    proxy_env:
      http_proxy: "http://127.0.0.1:3129"
      https_proxy: "http://127.0.0.1:3129"
Run Code Online (Sandbox Code Playgroud)
- name: install redhat-lsb-core
  dnf:
    name:
      - redhat-lsb-core
    state: present
  environment: "{{ proxy_env }}"
Run Code Online (Sandbox Code Playgroud)

但是,在非主机上运行时,剧本会失败,outgoing restricted因为在这些主机上proxy_env未定义。我的问题是是否有一种方法可以environment仅指定何时proxy_env定义。在环境下添加when: proxy_env is defined似乎不起作用。

iko*_*ora 5

该操作解决了它,根据要求我会尝试详细说明一下。我只是指出检查这个 URL:检查 dict 是否为空

 - name: install redhat-lsb-core
   dnf:
     name:
       - redhat-lsb-core
     state: present
   environment: "{{ proxy_env | default ({}) }}"
   when: proxy_env is defined
Run Code Online (Sandbox Code Playgroud)

按照op建议的方式:环境使用proxy_env,但如果没有定义,默认过滤器会将proxy_env设置为空,这样它将能够正确验证它是否为空。(空或未定义)。通过这种方式,他不需要检查 dict 内的变量是否已定义,您正在设置整个 dict default ({})

注意:操作员通过我的链接自行解决了这个问题,所以也归功于他^^。