Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 如何根据集合事实将多个可解条件合并为一个可解条件_Azure_Ansible 2.x_Ansible Facts - Fatal编程技术网

Azure 如何根据集合事实将多个可解条件合并为一个可解条件

Azure 如何根据集合事实将多个可解条件合并为一个可解条件,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

在研究for
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