linux - 如何在嵌套的 for 循环中使用 ansible-playbook?
问题描述
我正在尝试编写一个脚本,该脚本将自动重新启动我们环境中的服务器。我们使用 ansible-playbook -i rebootlist reboot.yml 一次重启 100 台服务器,因为我们有大约 400 多台服务器,并且需要按顺序重启。所以,我想出了这个:
for j in $(cat rebootlist); do for k in $(cat $j); do ansible-playbook -i $k reboot.yml >> $output; done; done
这里,
rebootlist 有 4 个 100 台服务器的列表。
$ cat rebootlist
reboot00
reboot02
reboot03
reboot04
我在下面收到此警告
[警告]:没有解析库存,只有隐式本地主机可用
[警告]:提供的主机列表为空,只有 localhost 可用。请注意,隐式本地主机不匹配“全部”
谢谢拉尔克
解决方案
让我们稍微简化一下数据。例如,给定文件
shell> cat rebootlist
reboot00
reboot02
shell> cat reboot00
host000
host099
shell> cat reboot02
host100
host199
在下面的剧本中,在第一个剧本中创建一个动态组并在第二个剧本中使用它,例如
shell> cat reboot.yml
- hosts: localhost
gather_facts: false
tasks:
- add_host:
name: "{{ item }}"
groups: "{{ group }}"
loop: "{{ lookup('file', group).splitlines() }}"
- hosts: "{{ group }}"
gather_facts: false
tasks:
- debug:
msg: "Reboot {{ inventory_hostname }}"
然后从文件rebootlist .eg中迭代项目
shell> for j in $(cat rebootlist); do ansible-playbook -e group=$j reboot.yml; done
给出(删节)
PLAY [localhost] ***********************
TASK [add_host] ************************
ok: [localhost] => (item=host000)
ok: [localhost] => (item=host099)
PLAY [reboot00] ************************
TASK [debug] ***************************
ok: [host000] =>
msg: Reboot host000
ok: [host099] =>
msg: Reboot host099
PLAY RECAP *****************************
host000: ok=1 changed=0 unreachable=0
host099: ok=1 changed=0 unreachable=0
localhost: ok=1 changed=0 unreachable=0
PLAY [localhost] ***********************
TASK [add_host] ************************
ok: [localhost] => (item=host100)
ok: [localhost] => (item=host199)
PLAY [reboot02] ************************
TASK [debug] ***************************
ok: [host100] =>
msg: Reboot host100
ok: [host199] =>
msg: Reboot host199
PLAY RECAP *****************************
host100: ok=1 changed=0 unreachable=0
host199: ok=1 changed=0 unreachable=0
localhost: ok=1 changed=0 unreachable=0
推荐阅读
- c# - 调用 ValidationResult 方法时如何在消息框中显示验证结果?
- c# - Entity Framework Core 抛出关于不相关的 EF6 上下文的异常
- python - 根据“LastModified”将所有文件从一个 S3 位置移动到另一个(相同的存储桶)
- java - 为什么我在 java 中使用 selenium webdriver 时会出现此错误?
- php - 尝试连接到另一台服务器时达到空闲超时
- .net-core - 如何在 EF Core 中使用 T4 模板生成服务和其他类?
- java - 枚举和编程接口
- ibm-midrange - 禁用 Fn 键 Dspf Rpgle
- typescript - 使用来自对象 B(相同类型)的值更新对象 A(的子集)的最佳方法
- r - 如何重新排序组合ggplot2图中的图?