在Ansible中将参数附加到命令模块的末尾

时间:2018-08-30 05:22:47

标签: ansible jinja2

我想写一个Ansible角色来配置Kafka Topic。 我想使用Kafka主题属性及其值的字典,并使用Ansible中的func findOutResult(matchesToDate date: Date) -> [Result] {...} 模块来创建主题。 例如,使用command列表:

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模块中,并在列表完成后执行?

1 个答案:

答案 0 :(得分:1)

是的。您需要以与上述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而不是原始数据,请相应地修改循环。