在Ansible中从主机构建动态命令

时间:2015-02-06 18:01:50

标签: solr command jinja2 apache-zookeeper ansible

我正在开发一个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主机数量?

2 个答案:

答案 0 :(得分:4)

在循环中,您可以使用loop controls of Jinja2

阻止最后一项之后的逗号
{%- if not loop.last %}, {% endif -%}

但这是一个更性感的解决方案:

{{ groups.zookeeper | join(":%d, " | format(zookeeper.port)) }}:{{ zookeeper.port }}

所以我们join你的数组元素和port +逗号的粘合剂。由于最后一个元素不会有port,因此我们会在第一个表达式后再次输出port

答案 1 :(得分:1)

只是旁注:如果 SolrCloud 已经开始指向 ZooKeeper 整体,那么 solr create 命令可以用于除了创建相应的Solr核心外,还要将配置上传到ZooKeeper。

注意:如果您只想将文件上传到ZooKeeper,而不创建相应的Solr核心,那么您应该继续执行 zkcli.sh ,如问题中所示的示例。

在SolrCloud中创建核心并将配置上传到ZooKeeper的Ansible任务:

- name: create solr cores
  command: /opt/solr/bin/solr create -c {{ item }} -d /tmp/solr/{{ item }}
  with_items:
    - my_collection
    - another_collection
  become: yes
  become_user: solr

上述Ansible任务假设如下:

  • 以下目录结构可用:

    /tmp/solr
    ├── my_collection
    │   └── conf
    │       ├── schema.xml
    ├── another_collection
    │   └── conf
    │       ├── schema.xml
    
  • Solr发行版被加入 / opt / solr

  • 用户 solr 在计算机中启动了Solr。

另见:

https://cwiki.apache.org/confluence/display/solr/Taking+Solr+to+Production

https://cwiki.apache.org/confluence/display/solr/Using+ZooKeeper+to+Manage+Configuration+Files