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



我想编写一个 Ansible 角色来配置卡夫卡主题。 我想使用 Kafka 主题属性及其值的字典,并使用 Ansible 中的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_propertyvalue参数附加到command的末尾。相反,command是按参数执行的。

有没有办法将键/值对作为参数附加到command模块并在列表完成后执行?

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

最新更新