【发布时间】:2015-05-14 05:37:30
【问题描述】:
我正在使用 Ansible 设置 EC2 实例并部署应用程序。有一个主机脚本收集标签相关的服务器和组信息。我想将这些动作作为一个单独的剧本来运行,所以
- 根据需要创建新实例
- 主机脚本加载清单(包括服务器的事实)
- 部署手册有效
但是,库存会提前加载,因此如果在游戏期间创建/更新服务器,则没有服务器/组数据。我可以 1) 单独提供和部署 playbook 2) 使用 add_host 技巧在服务器更新时模拟动态清单,但这些方法存在缺陷。
我可以强制 Ansible 重新加载库存吗?我的测试文件是:
hosts脚本:
#!/bin/sh
echo `date` >> log.log
echo "{\"standalone\":[\"localhost\"]}"
示例playbook.yml:
---
- hosts: all
tasks:
- name: show inventory_hostname
command: echo {{ inventory_hostname }}
我运行它ansible-playbook -i hosts playbook.yml -v 并看到 两个 运行:
$> cat log.log
Thu Mar 12 09:43:16 SAMT 2015
Thu Mar 12 09:43:16 SAMT 2015
但我还没有找到加倍它的命令。
【问题讨论】:
-
您认为
add_host模块有什么缺点? -
@Mxx 这是一个逻辑重复,不是吗?我不想考虑所有服务器都是全新的或部分更改的情况(我的分发模型包括多个服务器)。此外,hosts 脚本会生成一些本地事实,我是否也应该复制它?
-
我同意弗拉基米尔@Mxx。在这里使用
add_host是重复的。我正在基于列表配置多个主机,但这打破了 ansible ec2 配置示例中常见的“注册:ec2”模式,因为结果是返回值列表。理想情况下,ansible 将允许我在同一个 playbook 中运行一个两阶段的配置过程:1)创建一堆实例,然后 2)按组寻址它们并进行一些基本配置(如设置 DNS 等)。 -
可以确认:add_host 至少可以说是次优的。