簡體   English   中英

Ansible中的數組

[英]Arrays in Ansible

我有一個像下面的json

{
"nodes":[
  {
     "node_values":[
        "[test1]",
        "10.33.11.189",
        "10.33.11.185"
     ]
  },
  {
     "node_values":[
        "[test2]",
        "10.33.11.189",
        "10.33.11.185"
     ]
  }
]
}

我試圖只讀取節點值並將其放在文本文件中。 我正在使用下面的ansible代碼

  hosts: localhost
  vars:
    tmpdata1: "{{ lookup('file','test.json')|from_json }}"

  tasks:
    - name: Add mappings to /etc/hosts
      blockinfile:
        path: /home/s57232/Ansible-Install/Install_Inventory.txt
        content:  item
        marker: "# {mark} ANSIBLE MANAGED BLOCK {{ item.node_values[0] }}"
      loop: "{{ tmpdata1 |json_query('nodes[*].node_values[*]') }}"

我低於錯誤

**TASK [Add mappings to /etc/hosts] **********************************************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'list object' has no attribute 'node_values'\n\nThe error appears to have been in '/home/s57232/Ansible-Install/prepare_inventory.yml': line 14, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n    - name: Add mappings to /etc/hosts\n      ^ here\n"}**

當我嘗試使用blockinfile讀取項目和文件格式時,如果在多個位置都存在相同的IP,則不會寫入,因為它正在尋找唯一的值。 我無法繼續進行。 誰能幫幫我嗎?

當我使用

- name: Add mappings to /etc/hosts
  blockinfile:
    path: /home/s57232/Ansible-Install/Install_Inventory.txt
    content:  "{{ item.node_values }}"
    marker: "# {mark} ANSIBLE MANAGED BLOCK {{ item.node_values[0] }}"
  loop: "{{ tmpdata1 |json_query('nodes[*]') }}"

我正進入(狀態

# BEGIN ANSIBLE MANAGED BLOCK [test1]
['[test1]', '10.33.11.189', '10.33.11.185']
# END ANSIBLE MANAGED BLOCK [test1]
# BEGIN ANSIBLE MANAGED BLOCK [test2]
['[test2]', '10.33.11.189', '10.33.11.185']
# END ANSIBLE MANAGED BLOCK [test2]

我的期望是

# BEGIN ANSIBLE MANAGED BLOCK [test1]
[test1]
10.33.11.189
10.33.11.185
# END ANSIBLE MANAGED BLOCK [test1]
# BEGIN ANSIBLE MANAGED BLOCK [test2]
[test2]
10.33.11.189
10.33.11.185
# END ANSIBLE MANAGED BLOCK [test2]

這個給你:

- name: Add mappings to /etc/hosts
  blockinfile:
    path: /home/s57232/Ansible-Install/Install_Inventory.txt
    content:  "{{ item.node_values | join('\n') }}"
    marker: "# {mark} ANSIBLE MANAGED BLOCK {{ item.node_values.0 }}"
  loop: "{{ tmpdata1.nodes }}"

除非要過濾某些值,否則無需使用JMESPath。 除此之外,您還有兩個列表:一個用於循環,另一個用於以換行符將元素連接在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM