安塞波。尝试访问存储在 ansible 字典中的值时获取空列表

问题描述 投票:0回答:1

我有以下主要剧本

- hosts: localhost

  vars_files:
    - ../vars/environment-mapping.yml

  tasks:

    - name: echo and register controller's ip
      ansible.builtin.shell:
        cmd: |
          echo "$(hostname -I)" | sed 's/\s*$//'

      register: bash_echoed__controller_ip


    - name: set controller_ip_stringified
      set_fact:
        controller_ip: "{{ bash_echoed__controller_ip.stdout }}"


    - name: set environment
      set_fact:
        environment: "{{ controller_ip_environment_map[controller_ip] | default('unknown') }}"


    - name: show debug
      debug:
        msg:
          - "controller_ip_environment_map: {{ controller_ip_environment_map }}"
          - "controller_ip: {{ controller_ip }}"
          - "environment: {{ environment }}"

和 vars_file

../vars/environment-mapping.yml

---

controller_ip_environment_map: {
  "XX.XXX.X.Y": "DEV",
  "XX.XXX.X.W": "TEST",
  "XX.XXX.X.Z": "PROD",
}

当我运行剧本时,我得到

- localhost on hosts: localhost -
Gathering Facts...
  localhost ok
echo and register controller's ip...
  localhost done | stdout: XX.XXX.X.Y
set controller_ip_stringified...
  localhost ok
set environment...
  localhost ok
show debug...
  localhost ok: {
    "changed": false,
    "msg": [
        "controller_ip: XX.XXX.X.Y",
        "controller_ip_environment_map: {'XX.XXX.X.Y': 'DEV', 'XX.XXX.X.W': 'TEST', 'XX.XXX.X.Z': 'PROD'}",
        "environment: []",

    ]
}

但是由于

XX.XXX.X.Y
controller_ip_environment_map
的键,我期望环境获得值
DEV
,而它获得空列表的值。

为什么会这样?

dictionary ansible
1个回答
0
投票

重命名变量

environment
(例如重命名为
machines_envronment
)解决了问题。

很可能

environment
是某个 ansible 配置中已定义的变量。

详情

- hosts: localhost

  vars_files:
    - ../vars/environment-mapping.yml

  tasks:

    - name: echo and register controller's ip
      ansible.builtin.shell:
        cmd: |
          echo "$(hostname -I)" | sed 's/\s*$//'

      register: bash_echoed__controller_ip


    - name: set controller_ip_stringified
      set_fact:
        controller_ip: "{{ bash_echoed__controller_ip.stdout }}"


    - name: set machines_environment
      set_fact:
        machines_environment: "{{ controller_ip_environment_map[controller_ip] | default('unknown') }}"


    - name: show debug
      debug:
        msg:
          - "controller_ip_environment_map: {{ controller_ip_environment_map }}"
          - "controller_ip: {{ controller_ip }}"
          - "machines_environment: {{ machines_environment }}"

- localhost on hosts: localhost -
Gathering Facts...
  localhost ok
echo and register controller's ip...
  localhost done | stdout: XX.XXX.X.Y
set controller_ip_stringified...
  localhost ok
set environment...
  localhost ok
show debug...
  localhost ok: {
    "changed": false,
    "msg": [
        "controller_ip: XX.XXX.X.Y",
        "controller_ip_environment_map: {'XX.XXX.X.Y': 'DEV', 'XX.XXX.X.W': 'TEST', 'XX.XXX.X.Z': 'PROD'}",
        "environment: DEV",

    ]
}
© www.soinside.com 2019 - 2024. All rights reserved.