Ansible Inventory:如何从不在某些其他组中的主机构建组
Ansible Inventory: how to build a group from hosts not in certain other groups
我正在寻找一种方法来构建清单组,其中包括所有尚未放入另一个组的主机。
在我的例子中,这些组确定何时应更新特定服务器 - 星期一、星期三、星期五或“任何一天,这无关紧要”。我不想明确枚举主机,因为这是手动工作且容易出错。
all:
hosts:
host1[1-100].example.com:
children:
updateMonday:
hosts:
host1.example.com:
host4.example.com:
updateWednesday:
hosts:
host2.example.com:
host5.example.com:
updateFriday:
hosts:
host3.example.com:
host6.example.com:
updateAnyday:
children:
# This expresses what I want but does not work
!updateMonday:
!updateWednesday:
!updateFriday:
我正在使用此示例中未显示的其他组,因此我不能简单地使用“未分组”组来执行我想要的操作。
编辑:我不想修改我使用的剧本,因为我有很多剧本,而且我还需要临时命令来支持新组。
创建一个包含所有主机的组,例如全部更新
all:
hosts:
host[1-100].example.com:
children:
updateAll:
hosts:
host[1-100].example.com:
updateMonday:
hosts:
host1.example.com:
host4.example.com:
...
在第一个游戏中动态创建组 updateAnyday 并在第二个游戏中使用它
- hosts: all
tasks:
- add_host:
name: "{{ item }}"
groups: updateAnyday
loop: "{{ groups.updateAll|
difference(groups.updateMonday)|
difference(groups.updateWednesday)|
difference(groups.updateFriday) }}"
run_once: true
- hosts: updateAnyday
tasks:
...
(未测试)
问:"不想修改剧本"
A:使用主机列表创建文件 updateAnyday.txt,例如使用上面的剧本。然后 运行 你的剧本 updateAnyday.yml 库存有限,例如
shell> ansible-playbook updateAnyday.yml --limit @updateAnyday.txt
组队组合可以自创戏,换主持人。例如,除 updateMonday、updateWednesday 和 updateFriday 之外的所有主机将是:
hosts: all:!updateMonday:!updateWednesday:!updateFriday
您还可以使用 add_host
或 group_by
命令动态创建组。
我正在寻找一种方法来构建清单组,其中包括所有尚未放入另一个组的主机。
在我的例子中,这些组确定何时应更新特定服务器 - 星期一、星期三、星期五或“任何一天,这无关紧要”。我不想明确枚举主机,因为这是手动工作且容易出错。
all:
hosts:
host1[1-100].example.com:
children:
updateMonday:
hosts:
host1.example.com:
host4.example.com:
updateWednesday:
hosts:
host2.example.com:
host5.example.com:
updateFriday:
hosts:
host3.example.com:
host6.example.com:
updateAnyday:
children:
# This expresses what I want but does not work
!updateMonday:
!updateWednesday:
!updateFriday:
我正在使用此示例中未显示的其他组,因此我不能简单地使用“未分组”组来执行我想要的操作。
编辑:我不想修改我使用的剧本,因为我有很多剧本,而且我还需要临时命令来支持新组。
创建一个包含所有主机的组,例如全部更新
all:
hosts:
host[1-100].example.com:
children:
updateAll:
hosts:
host[1-100].example.com:
updateMonday:
hosts:
host1.example.com:
host4.example.com:
...
在第一个游戏中动态创建组 updateAnyday 并在第二个游戏中使用它
- hosts: all
tasks:
- add_host:
name: "{{ item }}"
groups: updateAnyday
loop: "{{ groups.updateAll|
difference(groups.updateMonday)|
difference(groups.updateWednesday)|
difference(groups.updateFriday) }}"
run_once: true
- hosts: updateAnyday
tasks:
...
(未测试)
问:"不想修改剧本"
A:使用主机列表创建文件 updateAnyday.txt,例如使用上面的剧本。然后 运行 你的剧本 updateAnyday.yml 库存有限,例如
shell> ansible-playbook updateAnyday.yml --limit @updateAnyday.txt
组队组合可以自创戏,换主持人。例如,除 updateMonday、updateWednesday 和 updateFriday 之外的所有主机将是:
hosts: all:!updateMonday:!updateWednesday:!updateFriday
您还可以使用 add_host
或 group_by
命令动态创建组。