2015-02-06 18 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