如何在Ansible中处理两个列表?

时间:2016-04-22 15:32:05

标签: ansible

我将使用Ansible脚本来创建Kafka主题。我为要创建的主题定义了一个YAML Hash var:

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来创建主题。

如何实现这个?

2 个答案:

答案 0 :(得分:1)

感谢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}}"

答案 1 :(得分:0)

您似乎需要创建一个kafka事实模块。该模块将被称为像这样的kafaka_topics_facts。该模块将返回主题,然后您可以创建不存在的主题。请阅读此Developing Ansible Modules