如何在 Ansible pull 中使用动态变量?
How to use dynamic variables with Ansible pull?
有了 ansible-pull,一切都在客户端上运行,任务 运行 和 localhost
一样。我尝试使用如下所示的变量设置虚拟库存文件。根据主机名,我希望相应地设置变量。我认为我的问题是 FQDN 没有被正确使用。
库存文件
[web_servers]
myweb001.phl.domain.local
myweb004.phl.domain.local
myweb005.phl.domain.local
[perl_servers]
myperl011.phl.domain.local
myperl001.phl.domain.local
myperl010.phl.domain.local
[web_servers:vars]
server_type=web
some_random_variable=20
[perl_servers:vars]
server_type=perl
some_random_variable=40
任务
- hosts: localhost
tasks:
- debug: var={{ server_type }}
输出
PLAY [localhost] ***************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [debug] *******************************************************************
fatal: [localhost]: FAILED! => {"failed": true, "msg": "'server_type' is undefined"}
NO MORE HOSTS LEFT *************************************************************
to retry, use: --limit @test.retry
PLAY RECAP *********************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=1
如果您 运行 您的剧本 hosts: localhost
,您可以尝试以下操作:
库存
localhost ansible_connection=local
[web_servers]
[web_servers:vars]
server_type=web
[perl_servers]
[perl_servers:vars]
server_type=perl
剧本
- hosts: localhost
tasks:
- group_by: key=web_servers
when: "'myweb' in ansible_hostname"
- group_by: key=perl_servers
when: "'myperl' in ansible_hostname"
- debug: var=server_type
您可能希望使用 include_vars
来根据 ansible_hostname 或其他一些标准动态加载特定变量文件,而不是 group_by
和清单文件。
有了 ansible-pull,一切都在客户端上运行,任务 运行 和 localhost
一样。我尝试使用如下所示的变量设置虚拟库存文件。根据主机名,我希望相应地设置变量。我认为我的问题是 FQDN 没有被正确使用。
库存文件
[web_servers]
myweb001.phl.domain.local
myweb004.phl.domain.local
myweb005.phl.domain.local
[perl_servers]
myperl011.phl.domain.local
myperl001.phl.domain.local
myperl010.phl.domain.local
[web_servers:vars]
server_type=web
some_random_variable=20
[perl_servers:vars]
server_type=perl
some_random_variable=40
任务
- hosts: localhost
tasks:
- debug: var={{ server_type }}
输出
PLAY [localhost] ***************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [debug] *******************************************************************
fatal: [localhost]: FAILED! => {"failed": true, "msg": "'server_type' is undefined"}
NO MORE HOSTS LEFT *************************************************************
to retry, use: --limit @test.retry
PLAY RECAP *********************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=1
如果您 运行 您的剧本 hosts: localhost
,您可以尝试以下操作:
库存
localhost ansible_connection=local
[web_servers]
[web_servers:vars]
server_type=web
[perl_servers]
[perl_servers:vars]
server_type=perl
剧本
- hosts: localhost
tasks:
- group_by: key=web_servers
when: "'myweb' in ansible_hostname"
- group_by: key=perl_servers
when: "'myperl' in ansible_hostname"
- debug: var=server_type
您可能希望使用 include_vars
来根据 ansible_hostname 或其他一些标准动态加载特定变量文件,而不是 group_by
和清单文件。