2016-04-22 9 views
0

Ich werde Ansible-Skript verwenden, um Kafka-Themen zu erstellen. Ich definiere einen YAML Hash var für Themen wie zu erstellen:Wie mit zwei Listen in Ansible umgehen?

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

Bevor schaffen sie, ich brauche zuerst prüfen, ob ein Thema existiert hat. Ich kann kafka-topics.sh --list --zookeeper localhost:2181 verwenden, um die Liste der vorhandenen Themennamen abzurufen, dann mit topics Hash vergleichen, um eine Liste der zu erstellenden Themen zu erhalten, und dann kafka-topics.sh --create --topic name aufrufen, um Themen zu erstellen.

Wie wird dies implementiert?

Antwort

0

Es scheint, als müssten Sie ein kafka facts-Modul erstellen. Das Modul würde so etwas wie kafaka_topics_facts heißen. Das Modul gibt die Themen zurück, und von dort können Sie die Themen erstellen, die nicht existieren. Bitte lesen Sie diese Developing Ansible Modules

1

Danke für die Antwort linuxdynastie. Aber ich möchte kein Modul nur für diese einfache Aufgabe schreiben. Schließlich habe ich die folgende Lösung ausgearbeitet. Ich poste hier für Leute, die sich darauf beziehen.

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