在Ansible库存中配置的组:
我想从每组中取出10台服务器,然后在不手动编辑库存的情况下创建一个新的组。
这10个服务器是一个可以动态更改的变量。如果这是可行的,我还有另外一个问题,如果库存本身是动态的呢?
[Group_C]
server-1
server-2
server-3
...
server-10“从3台分组服务器创建的新组现在将在剧本中使用”“
发布于 2019-08-24 08:02:49
(不可接受的2.8.3)
如果库存是动态的,我们不知道主机。假设我们可以选择他们中的任何一个。让我们先创建所选主机的列表,然后循环主机。有存货
[Group_A]
A-0
A-1
..
A-29
[Group_B]
B-0
B-1
..
B-39
[Group_C]
C-0
C-1
..
C-14下面的剧本
- name: Create Group_X
hosts: localhost
vars:
no_of_servers: 2
my_groups:
- Group_A
- Group_B
- Group_C
tasks:
- set_fact:
my_list: "{{ my_list|default([]) +
groups[item][0:no_of_servers] }}"
loop: "{{ my_groups }}"
- add_host:
name: "{{ item }}"
groups: Group_X
loop: "{{ my_list }}"
- debug:
msg: "{{ groups['Group_X'] }}"
- name: Use Group_X
hosts: Group_X
gather_facts: false
tasks:
- debug:
msg: "{{ inventory_hostname }} is member of {{ group_names }}"
run_once: true给
ok: [localhost] => {
"msg": [
"A-0",
"A-1",
"B-0",
"B-1",
"C-0",
"C-1"
]
}
ok: [A-0] => {
"msg": "A-0 is member of [u'Group_A', u'Group_X']"
}
随机选择。
可以使用下面的简单插件随机选择主机。
$ cat filter_plugins/list_methods.py
import random
def list_sample(l,n):
return random.sample(l,n)
class FilterModule(object):
def filters(self):
return {
'list_sample' : list_sample
}作以下修改
- set_fact:
my_list: '{{ my_list|default([]) +
groups[item]|list_sample(no_of_servers) }}'这些戏剧给出了一个例子
ok: [localhost] => {
"msg": [
"A-8",
"A-9",
"B-8",
"B-2",
"C-2",
"C-5"
]
}
ok: [A-8] => {
"msg": "A-8 is member of [u'Group_A', u'Group_X']"
}https://stackoverflow.com/questions/57635619
复制相似问题