2016-04-22 7 views
0

私はKafkaトピックを作成するためにAnsibleスクリプトを使用します。Ansibleで2つのリストを扱うにはどうすればいいですか?

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}}" 
関連する問題