簡體   English   中英

Ansible - 將字符串轉換為 Ansible 中的字典

[英]Ansible - Convert string to dictionary in Ansible

關於在 ansible 中創建動態字典,有一件事情困擾着我。 我嘗試了以下方法:

- name: Test
      set_fact:
        "available_boards":
            - "{ '{{ 'X' if i % 2 == 0 else 'Y' }}' : {{ hostvars[item].ansible_host }}}"

      loop: "{{groups['boards']}}"
      loop_control:
        index_var: i

假設{{groups['boards']是 4 那么結果是:

ok: [localhost] => {
    "available_boards": [
        "{ 'X' : 10.10.112.90 }",
        "{ 'Y' : 10.10.112.91 }",
        "{ 'X' : 10.10.112.92 }",
        "{ 'Y' : 10.10.112.93 }"
    ]
}

但是,正如您所看到的,這會產生一個字符串列表...事實是我希望字典更容易操作它們。

我用單引號/雙引號組合嘗試了一切,但沒有成功。 我不明白為什么這不會產生字典:

- name: Test
      set_fact:
        "available_boards":
            - { "{{ 'X' if i % 2 == 0 else 'Y' }}" : "{{ hostvars[item].ansible_host }}" }

但這不會評估條件中的鍵並產生文字:

ok: [localhost] => {
    "available_boards": [
        {
            "{{  'X' if i % 2 == 0 else 'Y' }}": "00:15:e3:55:22:67",
            
        },

代替

ok: [localhost] => {
    "available_boards": [
        {
            'X': "00:15:e3:55:22:67",
            
        },

是否有可能使神社中的這個變電站正常工作? 我整晚都在掙扎。

另一方面,我正在調查是否有一個過濾器可以將 sting 文字轉換為字典。 所以,如果你有清單:

ok: [localhost] => {
    "available_boards": [
        "{ 'X' : 10.10.112.90 }",
        "{ 'Y' : 10.10.112.91 }",
        "{ 'X' : 10.10.112.92 }",
        "{ 'Y' : 10.10.112.93 }"
    ]
}

將其轉換為:

ok: [localhost] => {
    "available_boards": [
        { 'X' : 10.10.112.90 },
        { 'Y' : 10.10.112.91 },
        { 'X' : 10.10.112.92 },
        { 'Y' : 10.10.112.93 }
    ]
}

所以列表的所有字符串元素都將轉換為字典。這個任務應該很容易嗎? 再次,jinja 中所有可用的過濾器都不起作用......

感謝您的先驗答案:)

嘗試使用字符串模板組合結構化數據類型,例如 JSON 或 YAML 是通往毀滅之路

- set_fact:
    available_boards: >-
      {%- set results = [] -%}
      {%- for h in groups['boards'] -%}
      {%-   set _ = results.append({
         'X' if loop.index % 2 == 0 else 'Y': hostvars[h].ansible_host
      }) -%}
      {%- endfor -%}
      {{ results }}

暫無
暫無

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

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