Добавление аргументов в конец командного модуля в Ansible - PullRequest
0 голосов
/ 30 августа 2018

Я хочу написать роль Ansible, чтобы иметь возможность настраивать тему Kafka. Я хочу использовать словарь свойств темы Kafka и их значений и использовать модуль command в Ansible для создания темы. Например, используйте default_kafka_topic список:

---
default_kafka_topic:
    partitions          :
    - "6"
    replication-factor  :
    - "2"

для создания темы с перечисленными выше атрибутами. Я сделал следующее, чтобы пройтись по атрибутам и создать пару ключ / значение. А затем используйте словарь в command.

- set_fact:
    dafault_kafka_topic_properties_dicts: |
        {% set res = [] -%}
        {% for key in default_kafka_topic.keys() -%}
           {% for value in default_kafka_topic[key] -%}
            {% set ignored = res.extend([{'topic_property': key, 'value':value}]) -%}
           {%- endfor %}
        {%- endfor %}
        {{ res }}

- name: Create Default Topic
  command: "{{ kafka_bin_dir }}/{{ kafka_topic_script }} --zookeeper {{ prefix }}-kafka-{{ Kafka_node }}.{{ DNSDomain}}:{{ zookeeper_port }} --if-not-exists --create --topic topic_name --{{ item.topic_property }} {{ item.value }}"
  with_items: "{{ dafault_kafka_topic_properties_dicts }}"
  register: createdTopic

Однако это не добавит аргументы topic_property и value к концу command. Вместо этого command выполняется для каждого аргумента.

Есть ли способ добавить пары ключ / значение в качестве аргументов в модуль command и выполнить, когда список будет завершен?

1 Ответ

0 голосов
/ 30 августа 2018

Да. Вы должны выполнить цикл таким же образом, как и в приведенной выше задаче set_fact, но вывести значения вместо создания словаря.

Может быть, даже вместо этой задачи:

- name: Create Default Topic
  command: "{{ kafka_bin_dir }}/{{ kafka_topic_script }} --zookeeper {{ prefix }}-kafka-{{ Kafka_node }}.{{ DNSDomain }}:{{ zookeeper_port }} --if-not-exists --create --topic topic_name {{ properties }}"
  register: createdTopic
  vars:
    properties: |-
      {% for key in default_kafka_topic.keys() %}
      {% for value in default_kafka_topic[key] %}
       --{{ key }} {{ value }}
      {%- endfor %}
      {%- endfor %}

Если вы хотите обработать dafault_kafka_topic_properties_dicts вместо исходных данных, измените цикл соответствующим образом.

...