Azure 如何根据集合事实将多个可解条件合并为一个可解条件
在研究forAzure 如何根据集合事实将多个可解条件合并为一个可解条件,azure,ansible-2.x,ansible-facts,Azure,Ansible 2.x,Ansible Facts,在研究foransiblerecipe时,我发现使用不同条件检查的set\u fact很有趣。然而,我在帖子中根据我的方法回答了这个问题。然而,我仍然看到,对于类似的任务,如确定位置资源组和vnet,俱乐部的多种条件都有改进 下面是playbook和变量文件azure_vars.yml 玩 可变文件 此文件包含所有变量,这些变量将作为playbook的一部分,并作为任务部分下的include_vars导入 $ cat azure_vars.yml --- azure_nprod_vnet: &q
ansible
recipe时,我发现使用不同条件检查的set\u fact
很有趣。然而,我在帖子中根据我的方法回答了这个问题。然而,我仍然看到,对于类似的任务,如确定位置资源组和vnet
,俱乐部的多种条件都有改进
下面是playbook
和变量文件azure_vars.yml
玩
可变文件
此文件包含所有变量,这些变量将作为playbook
的一部分,并作为任务部分下的include_vars
导入
$ cat azure_vars.yml
---
azure_nprod_vnet: "/subscriptions/XXXXXXXX-XXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/rg001/providers/Microsoft.Network/virtualNetworks/vnet"
azure_prod02_vnet: "/subscriptions/XXXXXXXX-XXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/rg003/providers/Microsoft.Network/virtualNetworks/vnet"
azure_prod03_vnet: "/subscriptions/XXXXXXXX-XXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/rg002/providers/Microsoft.Network/virtualNetworks/vnet"
# Azure domain
azure_domains:
- us-sea01
- us-azrc2
- eu-azrc1
# Resource group
azure_res_group:
- rg001
- rg002
- rg003
# Azure locations
azure_location:
- westus2
- southcentralus
- westeurope
...
预计将俱乐部低于三分之一的条件:
可能是这样的:
你可以使用and过滤器来解决这个问题,或者用更老的方式,如果你想证明你的剧本的未来性的话,用一个-不再推荐了
根据剧本:
-主机:所有
变量:
azure_vm_名称:foo.bar.us-sea01.whatever.example.org
任务:
-包含变量:azure\u vars.yml
-设定事实:
主机:“{{azure\u vm\u name.split('.')}”
-设定事实:
域:“{host.2}”
-名称:域名
调试:
msg:“{{domain}}”
-设定事实:
位置:“{item.1}}”
循环:{{azure_域| zip(azure_位置)|列表}”
当:'domain==item.0'
-名称:地点
调试:
msg:“{{location}}”
以及变量文件azure_vars.yml:
azure\u域:
-us-sea01
-us-azrc2
-欧盟-azrc1
azure_位置:
-韦斯图2
-中南部
-西欧
这就产生了重述:
PLAY [all] *******************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************
ok: [localhost]
TASK [include_vars] **********************************************************************************************
ok: [localhost]
TASK [set_fact] **************************************************************************************************
ok: [localhost]
TASK [set_fact] **************************************************************************************************
ok: [localhost]
TASK [Domain] ****************************************************************************************************
ok: [localhost] => {
"msg": "us-sea01"
}
TASK [set_fact] **************************************************************************************************
ok: [localhost] => (item=['us-sea01', 'westus2'])
skipping: [localhost] => (item=['us-azrc2', 'southcentralus'])
skipping: [localhost] => (item=['eu-azrc1', 'westeurope'])
TASK [Location] **************************************************************************************************
ok: [localhost] => {
"msg": "westus2"
}
PLAY RECAP *******************************************************************************************************
localhost : ok=7 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
PLAY [all] ******************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************
ok: [localhost]
TASK [include_vars] *********************************************************************************************************
ok: [localhost]
TASK [set_fact] *************************************************************************************************************
ok: [localhost]
TASK [set_fact] *************************************************************************************************************
ok: [localhost]
TASK [Domain] ***************************************************************************************************************
ok: [localhost] => {
"msg": "us-sea01"
}
TASK [set_fact] *************************************************************************************************************
ok: [localhost]
TASK [Location] *************************************************************************************************************
ok: [localhost] => {
"msg": "westus2"
}
PLAY RECAP ******************************************************************************************************************
localhost : ok=7 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
这意味着还有另一种可能性,即使用Python的Ansible功能。您可以使用列表的方法将azure\u位置
的元素定位在azure\u域
中与domain
相同的位置
e、 g.如果域
位于azure\u域
的位置2
,您将在azure\u位置
中获得位置2
的元素
根据剧本:
-主机:所有
变量:
azure_vm_名称:foo.bar.us-sea01.whatever.example.org
任务:
-包含变量:azure\u vars.yml
-设定事实:
主机:“{{azure\u vm\u name.split('.')}”
-设定事实:
域:“{host.2}”
-名称:域名
调试:
msg:“{{domain}}”
-设定事实:
位置:“{{azure_位置[azure_域.索引(域)]}”
-名称:地点
调试:
msg:“{{location}}”
同一个变量文件azure_vars.yml,这将生成以下摘要:
PLAY [all] *******************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************
ok: [localhost]
TASK [include_vars] **********************************************************************************************
ok: [localhost]
TASK [set_fact] **************************************************************************************************
ok: [localhost]
TASK [set_fact] **************************************************************************************************
ok: [localhost]
TASK [Domain] ****************************************************************************************************
ok: [localhost] => {
"msg": "us-sea01"
}
TASK [set_fact] **************************************************************************************************
ok: [localhost] => (item=['us-sea01', 'westus2'])
skipping: [localhost] => (item=['us-azrc2', 'southcentralus'])
skipping: [localhost] => (item=['eu-azrc1', 'westeurope'])
TASK [Location] **************************************************************************************************
ok: [localhost] => {
"msg": "westus2"
}
PLAY RECAP *******************************************************************************************************
localhost : ok=7 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
PLAY [all] ******************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************
ok: [localhost]
TASK [include_vars] *********************************************************************************************************
ok: [localhost]
TASK [set_fact] *************************************************************************************************************
ok: [localhost]
TASK [set_fact] *************************************************************************************************************
ok: [localhost]
TASK [Domain] ***************************************************************************************************************
ok: [localhost] => {
"msg": "us-sea01"
}
TASK [set_fact] *************************************************************************************************************
ok: [localhost]
TASK [Location] *************************************************************************************************************
ok: [localhost] => {
"msg": "westus2"
}
PLAY RECAP ******************************************************************************************************************
localhost : ok=7 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
这不是使用循环,所以更容易重述。愚蠢的问题,对你来说,但应该是针对其他问题的OP。如何通过“{{host.1}.{{host.2}”构建区域srv
?注意点的用法。不过,我可以通过“{host.1}}-{host.2}}”理解它。此外,您在包含的VAR中定义了azure_域
,但您使用azure_域
,我想这是一个键入错误?@β.εηηοτ.βε,域名“{host.1}.{host.2}”
因为它们的名字像是myhost01.nxdi.us-sea01.example.com
和OP检查过的那样,实际上在中包含了它的azure\u域
。仍然:“myhost01.nxdi.us-sea01.example.com”。split('.)
->[myhost01,nxdi,us-sea01,example,com]
->“{host.1}{host.2}}“
->nxdi.us-sea01
,在azure\u域中找不到它。如果将host.2
分配给domain
,确实可以找到它,但如果将分配给它“{{host.1}}.{{host.2}”
,则无法找到它。
PLAY [all] ******************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************
ok: [localhost]
TASK [include_vars] *********************************************************************************************************
ok: [localhost]
TASK [set_fact] *************************************************************************************************************
ok: [localhost]
TASK [set_fact] *************************************************************************************************************
ok: [localhost]
TASK [Domain] ***************************************************************************************************************
ok: [localhost] => {
"msg": "us-sea01"
}
TASK [set_fact] *************************************************************************************************************
ok: [localhost]
TASK [Location] *************************************************************************************************************
ok: [localhost] => {
"msg": "westus2"
}
PLAY RECAP ******************************************************************************************************************
localhost : ok=7 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0