我怎样才能将主机从主控剧本转移到包含的剧本?
我正在尝试为与其他types的服务器(例如,网关服务器,数据库服务器等)共享一些常见的剧本的服务器types(例如,networking服务器)创build主控剧本。 我在Ubuntu 14.04上运行Ansible 1.9.1。
清单文件是:
[web-servers] 192.168.0.217 [db-servers] 192.168.0.218
master playbook deploy-web-servers.yml是:
--- - hosts: web-servers tasks: - debug: var=hostvars - include: setup-common.yml vars: server: "{{ hostvars['inventory_hostname'] }}"
包含的playbook setup-common.yml是:
--- - hosts: "{{ server }}" tasks: - debug: var=server
当我运行这个命令:
ansible-playbook deploy-web-servers.yml -i inventory
它输出:
PLAY [web-servers] ************************************************************ TASK: [debug var=hostvars] **************************************************** ok: [192.168.0.217] => { "var": { "hostvars": { "group_names": [ "web-servers" ], "groups": { "all": [ "192.168.0.218", "192.168.0.217" ], "db-servers": [ "192.168.0.218" ], "ungrouped": [], "web-servers": [ "192.168.0.217" ] }, "inventory_hostname": "192.168.0.217", "inventory_hostname_short": "192" } } } PLAY [{{ hostvars['inventory_hostname'] }}] *********************************** skipping: no hosts matched PLAY RECAP ******************************************************************** 192.168.0.217 : ok=1 changed=0 unreachable=0 failed=0
包含的playbook setup-common.yml永远不会运行,因为主机未被成功转发,如下所示:
PLAY [{{ hostvars['inventory_hostname'] }}] *********************************** skipping: no hosts matched
我如何将主机转发到附带的手册?
这是问题:
- include: setup-common.yml vars: server: "{{ hostvars['inventory_hostname'] }}"
你根本不需要指定这个variables,你也不应该试图在另一个剧本中使用它。 默认情况下,剧本将针对它指定的所有主机运行。 所以不要这样做,只写一个正常的剧本。