如何使用Ansible pull动态变量?

时间:2016-08-10 14:25:11

标签: ansible ansible-playbook ansible-2.x

使用ansible-pull,一切都在客户端上运行,任务以localhost运行。我尝试使用变量设置虚拟库存文件,如下所示。根据主机名,我希望相应地设置变量。我认为我的问题是,FQDN未正确使用。

inventoryfile

[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

1 个答案:

答案 0 :(得分:1)

如果您使用hosts: localhost运行Playbook,可以尝试以下操作:

广告

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

而不是group_by和库存文件,您可能希望使用include_vars根据ansible_hostname或其他一些标准动态加载特定的变量文件。