作者:路路 | 来源:互联网 | 2023-05-23 09:55
我正在使用Ansible部署脚本将solr节点连接到正在运行的zookeeper集成。将solr配置链接到zookeeper的命令如下所示:
solr/scripts/cloud-scripts/zkcli.sh -zkhost 33.33.33.30:2181,33.33.33.31:2181,33.33.33.32:2181 -cmd upconfig -confdir solr/solr/collection1/conf -confname solr_config
我想使命令尽可能动态-因此我想从清单文件中拉出Zookeeper主机。我知道总是3时就可以执行此操作,但是我希望命令根据列表中的数量进行调整。我已经尝试使用Ansibles with
命令-但我无法使它正常工作,因为在最后一个主机之后我不需要逗号。
这是我的清单文件:
[zookeeper]
33.33.33.30
33.33.33.31
33.33.33.32
[solr]
33.33.33.33
33.33.33.34
33.33.33.35
这是我没有循环的Ansible任务:
- name: SOLR | Upload Configs To Zookeeper
command: "{{ solr.home }}/scripts/cloud-scripts/zkcli.sh -zkhost {{groups.zookeeper[0] }}:{{ zookeeper.port }}, {{ groups.zookeeper[1] }}:{{ zookeeper.port }}, {{ groups.zookeeper[2] }}:{{ zookeeper.port }} -cmd upconfig -confdir {{ solr.home }}/solr/{{ solr.collection_name }}/conf -confname {{ solr.config_name }}"
when: inventory_hostname == groups.solr[0]
以及如何使这种动态变化与清单中的Zookeeper主机数量有关?
1> udondan..:
在循环中,您可以使用Jinja2的循环控件防止最后一项后面的逗号:
{%- if not loop.last %}, {% endif -%}
但这是一个更性感的解决方案:
{{ groups.zookeeper | join(":%d, " | format(zookeeper.port)) }}:{{ zookeeper.port }}
因此,我们join
将您的数组元素与port
+逗号粘合在一起。由于最后一个元素将因此没有port
,因此我们port
在第一个表达式之后再次输出。