我有两种机器。一种没有互联网访问权限(比如说,我们称之为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似乎不起作用。
该操作解决了它,根据要求我会尝试详细说明一下。我只是指出检查这个 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 ({})。
注意:操作员通过我的链接自行解决了这个问题,所以也归功于他^^。
| 归档时间: |
|
| 查看次数: |
2372 次 |
| 最近记录: |