我想写一个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
模块中,并在列表完成后执行?
答案 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
而不是原始数据,请相应地修改循环。