首页 > 解决方案 > 如何从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']是动态的。

标签: ansible

解决方案


第二个参数不是列表。您必须将其括在括号中[],例如

  - set_fact:
      target_region: "{{ hostvars[inventory_hostname]['Active_Regions']|
             difference([hostvars[inventory_hostname]['Region']]) }}"

推荐阅读