Ansible 是否可以通配符主机\u vars目录?

Ansible 是否可以通配符主机\u vars目录?,ansible,vmware,ansible-inventory,Ansible,Vmware,Ansible Inventory,长话短说:我已经建立了一个家庭实验室,在那里我使用Ansible和VMware dynamic inventory插件。 为了区分不同的虚拟机,插件将uid添加到主机名中,例如:unique-test-vm਴2612e560x1284x8457e115。这使得我很难创建主机变量目录,因为我必须经常运行ansible inventory-I…并复制目录名 问题 是否可以创建“通配符”主机变量目录,而不在目录名中包含uid?这意味着目录的名称将是unique-test-vm而不是unique-tes

长话短说:我已经建立了一个家庭实验室,在那里我使用Ansible和VMware dynamic inventory插件。 为了区分不同的虚拟机,插件将uid添加到主机名中,例如:
unique-test-vm਴2612e560x1284x8457e115
。这使得我很难创建主机变量目录,因为我必须经常运行
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
has
variableA:true
test-vmB_xxx
has
variableab:false
。为每个虚拟机创建一个
组\u vars
,这样做太过分了。意思是
host\u vars
可以理解主机应该使用什么目录,例如
unique-test-vm\u 123
?我想感谢您的建议Vladimir()。我可以使用vmware资源清册-->解决我的问题。使摆脱
UUID
成为可能。