簡體   English   中英

如何在Ansible中處理兩個列表?

[英]How to deal with two lists in Ansible?

我將使用Ansible腳本創建Kafka主題。 我為要創建的主題定義了一個YAML哈希變量:

topics:
  topic1:
    partitions: 1
    replication_factor: 2
  topic2:
    partitions: 1
    replication_factor: 2

在創建它們之前,我需要首先檢查主題是否存在。 我可以使用kafka-topics.sh --list --zookeeper localhost:2181來獲取現有主題名稱的列表,然后與topics哈希進行比較以獲取要創建的主題列表,然后調用kafka-topics.sh --create --topic name以創建主題。

如何實現呢?

感謝linuxdynasty的回答。 但是我不想為這個簡單的任務編寫模塊。 最后,我制定了以下解決方案。 我在這里發布供人們參考。

---
- name: Get existing topic list
  become_user: root
  become: yes
  become_method: sudo
  shell: /opt/kafka/bin/kafka-topics.sh --list --zookeeper localhost:2181
  register: existings

- name: Print existing topic list
  debug: msg="{{existings.stdout | regex_replace("\\n", " ")}}"

- name: Create topics
  become_user: root
  become: yes
  become_method: sudo
  shell: >
    if [[ `echo "{{existings.stdout}}" | grep {{item.key}}` != {{item.key}} ]]; then
    /opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181
    --topic {{item.key}} --partitions {{item.value.partitions}}
    --replication-factor {{item.value.replication_factor}};
    fi
  with_dict: "{{kafka_topics}}"

似乎您需要創建一個kafka事實模塊。 該模塊將被稱為類似kafaka_topics_facts的名稱。 該模塊將返回主題,然后您可以從那里創建不存在的主題。 請閱讀此開發Ansible模塊

暫無
暫無

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

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