ansible - 如何从ansible中的两个变量中获取非重复元素
问题描述
我正在运行 Ansible 任务来创建 terraform 资源,代码如下:
- name: "Run terraform project: {{ tf_project }}"
terraform:
state: present
force_init: true
backend_config:
bucket: "{{ tf_bucket_name }}"
region: "{{ bootstrap_region }}"
kms_key_id: "{{ tf_bucket_kms_id }}"
encrypt: "true"
workspace_key_prefix: "{{ target_infra }}"
key: "{{ tf_project }}.tfstate"
project_path: "../terraform_12/{{ tf_project }}"
variables:
target_region: XXXXXXX
workspace: "Test"
以下是变量的值:
hostvars[inventory_hostname]['Active_Regions']: ['eu-west-1','ap-southeast-2']
hostvars[inventory_hostname]['Region']: 'eu-west-1'
预期值:target_region:['ap-southeast-2']
已尝试以下:
target_region: "{{ hostvars[inventory_hostname]['Active_Regions'] | difference(hostvars[inventory_hostname]['Region'] | list) }}"
但它不起作用。
注意:hostvars[inventory_hostname]['Active_Regions']
并且hostvars[inventory_hostname]['Regions']
是动态的。
解决方案
第二个参数不是列表。您必须将其括在括号中[]
,例如
- set_fact:
target_region: "{{ hostvars[inventory_hostname]['Active_Regions']|
difference([hostvars[inventory_hostname]['Region']]) }}"
推荐阅读
- postgresql - 查询列出在日期之间订购和未在日期之间订购的客户
- android - 颤振找不到android sdk?
- c++ - 如何在 std::vector 中查找索引
哪些是真的? - ibm-integration-bus - IBM App Connect Enterprise - HTTP 异步请求,关联请求/响应中的问题
- c# - 代表的内存分配和缓存
- scala - sbt testOnly 运行多个测试
- ios - 通过 Firebase fastlane 分发分发应用程序时没有有效的“aps-environment”权利错误
- perl - 如何停止使用 Win32::Daemon 启动的 Win32 服务?
- c# - 如何从字符串化的 XML 中获取枚举值?
- r - dplyr 中的条件总和