2015-02-06 53 views
1

我正在开发一个Ansible部署脚本,以将Solr节点连接到正在运行的zookeeper合奏。到Solr的配置链接到动物园管理员的命令如下:从Ansible的主机构建动态命令

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 

我想使命令动态地 - 所以我想从我的清单文件拉动物园管理员的主机。当我知道总是有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] 

而且知道如何使这个充满活力的以动物管理员的主机清单中的数量?

回答

4

在你的循环,可以防止与loop controls of Jinja2的最后一项后面的逗号:

{%- if not loop.last %}, {% endif -%} 

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

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

所以我们join您的数组元素连同port +逗号的胶水。由于最后一个元素因此没有port,我们在第一个表达式之后再次输出port

+1

感谢展示两种方式;带着小问题打电话加入加吊坠性感 – 2015-02-08 00:52:53

+0

太棒了,就是我在找的东西。谢谢! – tknickman 2015-02-08 20:20:51

1

只是一个侧面注释:如果SolrCloud已经已经开始指向的ZooKeeper合奏,那么Solr的创建命令可用于上传配置的ZooKeeper除了创建相应的Solr的核心。

注意:如果你只是想将文件上传到动物园管理员,而无需创建相应的Solr的核心,那么你就应该继续执行zkcli.sh如在问题所示的例子。

Ansible任务用于SolrCloud创建内核和上传配置动物园管理员:

- 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分布是ex转化为/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