2016-04-22 14 views
0

我打算使用Ansible腳本創建Kafka主題。我定義了一個YAML Hash var來創建主題:如何處理Ansible中的兩個列表?

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來創建主題。

如何實現這個?

回答

0

看起來你需要創建一個kafka事實模塊。該模塊將被稱爲這樣的kafaka_topics_facts。該模塊將返回主題,並從那裏創建不存在的主題。請閱讀此Developing Ansible Modules

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