我怎样才能通过主办方从主剧本到包含的剧本?
我正在尝试为某种类型的服务器(例如 Web 服务器)创建一个主剧本,该剧本与其他类型的服务器(例如网关服务器、数据库服务器等)共享一些通用剧本。我在 Ubuntu 14.04 上运行 Ansible 1.9.1。
这存货文件是:
[web-servers]
192.168.0.217
[db-servers]
192.168.0.218
主剧本部署-web-服务器.yml是:
---
- hosts: web-servers
tasks:
- debug: var=hostvars
- include: setup-common.yml
vars:
server: "{{ hostvars['inventory_hostname'] }}"
随附的剧本设置-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
随附的剧本设置-common.yml永远不会运行,因为主机未成功转发,如以下行所示:
PLAY [{{ hostvars['inventory_hostname'] }}] ***********************************
skipping: no hosts matched
我如何将主机转发至所包含的剧本?
答案1
问题如下:
- include: setup-common.yml
vars:
server: "{{ hostvars['inventory_hostname'] }}"
您根本不需要指定此变量,也不应该尝试在其他剧本中使用它。默认情况下,剧本将针对所有主机运行它指定。所以不要这样做,只需编写一个正常的剧本即可。