Ansible 是否可以通配符主机\u vars目录?
长话短说:我已经建立了一个家庭实验室,在那里我使用Ansible和VMware dynamic inventory插件。 为了区分不同的虚拟机,插件将uid添加到主机名中,例如:Ansible 是否可以通配符主机\u vars目录?,ansible,vmware,ansible-inventory,Ansible,Vmware,Ansible Inventory,长话短说:我已经建立了一个家庭实验室,在那里我使用Ansible和VMware dynamic inventory插件。 为了区分不同的虚拟机,插件将uid添加到主机名中,例如:unique-test-vm2612e560x1284x8457e115。这使得我很难创建主机变量目录,因为我必须经常运行ansible inventory-I…并复制目录名 问题 是否可以创建“通配符”主机变量目录,而不在目录名中包含uid?这意味着目录的名称将是unique-test-vm而不是unique-tes
unique-test-vm2612e560x1284x8457e115
。这使得我很难创建主机变量目录,因为我必须经常运行ansible inventory-I…
并复制目录名
问题是否可以创建“通配符”主机变量目录,而不在目录名中包含uid?这意味着目录的名称将是
unique-test-vm
而不是unique-test-vm\u 2612e560x1284x8457e115
无法创建“通配符”主机变量。但是,这个用例可以通过或来解决。注意变量的优先级。看
包括变量(单主机) 例如,让我们有这个清单
shell>cat主机
testX-vm_07
让我们创建主机变量
shell>cat host\u vars/testX vm/main.yml
test_var:主机testX vm的test var_*
然后,下面的剧本从目录host\u vars/testX vm
读取变量。使清单主机名的解析符合您的需要
shell>cat pb.yml
-主机:testX-vm_07
任务:
-包括以下变量:
dir:“{{'host\u vars/'~my\u vars\u dir}”
变量:
my_vars_dir:“{{inventory_hostname.split('''.0}}”
-调试:
var:test_var
给予
shell>ansible playbook-i主机pb.yml
播放[testX-vm_07]****
任务[包括变量]****
ok:[testX-vm_07]
任务[调试]****
确定:[testX-vm_07]=>
test_var:主机testX vm的test var_*
组变量(多个主机) 例如,让我们有这个清单
shell>cat主机
testX-vm_01
testX-vm_02
testX-vm_03
testY-vm_01
testY-vm_02
testY-vm_03
让我们创建组变量,分别由主机testX-vm.*
和testY-vm.*
共享
shell>cat group\u vars/testX\u vm/main.yml
test_var:testX_虚拟机组的测试变量
shell>cat group\u vars/testY\u vm/main.yml
test_var:testY_虚拟机组的测试变量
然后,下面的剧本在第一个剧本中创建组testX_vm
和testY_vm
,并在第二个和第三个剧本中使用这些组。比如说,
shell>cat pb.yml
-主持人:全部
任务:
-区块:
-添加\u主机:
名称:“{{item}}”
组:testX_vm
循环:“{{ansible\u play\u hosts\u all”|
选择('match','^testX-vm.*)$)|
列表}”
-添加\u主机:
名称:“{{item}}”
组:testY_vm
循环:“{{ansible\u play\u hosts\u all”|
选择('match','^testY-vm.(.*)$)|
列表}”
跑一次:对
-主机:testX_虚拟机
任务:
-调试:
var:test_var
-主机:testY_虚拟机
任务:
-调试:
var:test_var
给予
shell>ansible剧本-i主机pb.yml
播放[全部]****
任务[添加主机]****
更改:[testX-vm\u 01]=>(项=testX-vm\u 01)
更改:[testX-vm\u 01]=>(项=testX-vm\u 02)
更改:[testX-vm\u 01]=>(项=testX-vm\u 03)
任务[添加主机]****
更改:[testX-vm\u 01]=>(项=testY-vm\u 01)
更改:[testX-vm\u 01]=>(项=testY-vm\u 02)
更改:[testX-vm\u 01]=>(项=testY-vm\u 03)
播放[testX_vm]****
确定:[testX-vm\u 01]=>
test_var:testX_虚拟机组的测试变量
确定:[testX-vm_02]=>
test_var:testX_虚拟机组的测试变量
确定:[testX-vm\u 03]=>
test_var:testX_虚拟机组的测试变量
播放[暴躁的虚拟机]****
确定:[testY-vm_01]=>
test_var:testY_虚拟机组的测试变量
确定:[testY-vm_02]=>
test_var:testY_虚拟机组的测试变量
确定:[testY-vm_03]=>
test_var:testY_虚拟机组的测试变量
只是为了确定一下。重新表述问题:所有主机unique-test-vm.*
应共享host\u vars/unique-test-vm
中的变量。对吧?对。嗯<代码>唯一测试vm仅为一个虚拟机。我当然可以为每个需要唯一变量的主机创建组变量
,但是,我需要再次在VMware中创建一个标记并分配它…目录unique-test-vm
中的所有文件都应该由所有unique-test-vm.*
hosts共享吗?unique-test-vm
中的文件应该只由unique-test-vm2612e560x1284x8457e115使用。正如我在前面的评论中所说的,我可以使用组变量
。换句话说:假设我有两个虚拟机:test-vmA_xxx
和test-vmB_xxx
。每个虚拟机都有自己的唯一变量test-vmA_xxx
hasvariableA:true
和test-vmB_xxx
hasvariableab:false
。为每个虚拟机创建一个组\u vars
,这样做太过分了。意思是host\u vars
可以理解主机应该使用什么目录,例如unique-test-vm\u 123
?我想感谢您的建议Vladimir()。我可以使用vmware资源清册-->解决我的问题。使摆脱UUID
成为可能。