将主机从主剧本传递到包含的剧本

将主机从主剧本传递到包含的剧本

我怎样才能通过主办方从主剧本到包含的剧本?

我正在尝试为某种类型的服务器(例如 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'] }}"

您根本不需要指定此变量,也不应该尝试在其他剧本中使用它。默认情况下,剧本将针对所有主机运行指定。所以不要这样做,只需编写一个正常的剧本即可。

相关内容