Vla*_*nev 46 ansible ansible-inventory
我正在使用Ansible来设置EC2实例并部署应用程序.有一个主机脚本,它收集标签相关的服务器和组信息.我想把这些动作作为一个单一的剧本来运行,所以
但是,如果在播放期间创建/更新了服务器,则提前加载库存,因此没有服务器/组数据.我可以1)单独提供和部署剧本2)使用add_host技巧在服务器更新时模拟动态库存,但这些方法存在缺陷.
我可以强制Ansible重新加载库存吗?我的测试文件是:
hosts脚本:
#!/bin/sh
echo `date` >> log.log
echo "{\"standalone\":[\"localhost\"]}"
Run Code Online (Sandbox Code Playgroud)
样品playbook.yml:
---
- hosts: all
tasks:
- name: show inventory_hostname
command: echo {{ inventory_hostname }}
Run Code Online (Sandbox Code Playgroud)
我运行它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
Run Code Online (Sandbox Code Playgroud)
但是我还没有找到加倍它的命令.
小智 46
使用Ansible 2.0+,您可以通过运行任务在游戏中刷新库存:
- meta: refresh_inventory
Run Code Online (Sandbox Code Playgroud)
dsz*_*dsz 20
我发现这meta: refresh_inventory是不够的.
我必须首先添加一个显式调用ec2.py --refresh-cache.
- name: refresh inventory
hosts: localhost
connection: local
gather_facts: False
tasks:
- name: Refresh EC2 cache
command: /etc/ansible/ec2.py --refresh-cache
- name: Refresh in-memory EC2 cache
meta: refresh_inventory
Ansible目前不支持此功能.如果查看ansible或ansible-playbook命令的源代码,您将看到首先加载清单,然后将清单对象传递给运行指定任务或手册的ansible命令.由于多种原因,移动库存处理以使其在任务/剧本处理程序中发生可能是一项非常重要的任务.
做这样的事情最好的办法就是简单地将你的剧本分成两部分,并将你的调用包装在你只需要调用一次的shell脚本中.
| 归档时间: |
|
| 查看次数: |
21079 次 |
| 最近记录: |