簡體   English   中英

Ansible - 將字典中的列表轉換為字典列表,然后將其放入游戲中

[英]Ansible - Convert a list inside a dictionary to a list of dictionaries, then put it in a play

如果有更好的方法可以完全做到這一點,我將首先准確說明我想要實現的目標。

我正在嘗試使用記錄在“theforeman.foreman.content_view”Ansible 模塊下的“redhat.satellite.content_view”Ansible 模塊來讀取以下變量並以冪等性循環遍歷它。

composite_content_views:
  - name: 'ccv-number1'
    content_views:
      - 'cv-number1'
      - 'cv-number2'
  - name: 'ccv-number2'
    content_views:
      - 'cv-number3'
      - 'cv-number4'
      - 'cv-number5'

我試圖實現的最終結果如下,但只使用上面的變量和循環。

- name: create composite content views
  redhat.satellite.content_view:
    name: ccv-number1
    composite: true
    components:
      - content_view: 'cv-number1'
        latest: true
      - content_view: 'cv-number2'
        latest: true

然后

- name: create composite content views
  redhat.satellite.content_view:
    name: ccv-number2
    composite: true
    components:
      - content_view: 'cv-number3'
        latest: true
      - content_view: 'cv-number4'
        latest: true
      - content_view: 'cv-number5'
        latest: true

在嘗試了各種方法之后,我真的一直在摸不着頭腦,所以我們將不勝感激任何幫助。 :)

我已經嘗試使用各種過濾器進行循環以嘗試使用類似下面的內容,但未能使其正常工作。

- name: create composite content views
  redhat.satellite.content_view:
    name: "{{ item.name }}" 
    composite: true
    components: "{{ list of dictionaries here with only the 'cv-numberX' values changing }}"

在每次迭代中聲明

  components: "{{ item.content_views|
                  map('community.general.dict_kv', 'content_view')|
                  map('combine', {'latest': true})|
                  list }}"

  components:
    -   content_view: cv-number1
        latest: true
    -   content_view: cv-number2
        latest: true

  components:
    -   content_view: cv-number3
        latest: true
    -   content_view: cv-number4
        latest: true
    -   content_view: cv-number5
        latest: true

用於測試的完整劇本示例

- hosts: localhost vars: composite_content_views: - name: ccv-number1 content_views: - cv-number1 - cv-number2 - name: ccv-number2 content_views: - cv-number3 - cv-number4 - cv-number5 tasks: - debug: msg: | name: {{ item.name }} composite: true components: {{ components|to_nice_yaml }} loop: "{{ composite_content_views }}" vars: components: "{{ item.content_views| map('community.general.dict_kv', 'content_view')| map('combine', {'latest': true})| list }}"

任務示例

 - name: create composite content views redhat.satellite.content_view: name: "{{ item.name }}" composite: true components: "{{ components }}" loop: "{{ composite_content_views }}" vars: components: "{{ item.content_views| map('community.general.dict_kv', 'content_view')| map('combine', {'latest': true})| list }}"

Jinja 模板給出了相同的結果

 components: | [{% for i in item.content_views %} {"content_view": "{{ i }}", "latest": "true"}, {% endfor %}]

暫無
暫無

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

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