2015-02-06 3 views
1

Я работаю над скриптом Ansible deploy, чтобы подключить 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 

Я хочу, чтобы команда, как динамическое, насколько это возможно - поэтому я хочу, чтобы вытащить 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 

А вот моя анзибль задача без петли:

- 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 хостов в инвентаре ?

ответ

4

В вашем цикле вы можете предотвратить запятую после последнего элемента с loop controls of Jinja2:

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

Но это более сексуально решение:

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

Таким образом, мы join ваши элементы массива вместе с клей port + запятая. Так как последний элемент, следовательно, не имеет port, мы снова выводим port после первого выражения.

+1

спасибо за показ двумя способами; возьмите небольшую проблему с вызовом join-plus-dangle sexy –

+0

Удивительный, именно то, что я искал. Благодаря! – tknickman

1

Просто сторона комментарий: если SolrCloud был уже начал указывая на Zookeeper ансамбль , то Solr создать команду можно использовать для загрузки конфигурации в Zookeeper в дополнение к созданию соответствующих ядер Solr.

Примечание. Если вы хотите загружать файлы в ZooKeeper, не создавая соответствующие ядра Solr, то вы должны продолжать выполнять zkcli.sh, как в примере, показанном в вопросе.

задача анзибль для создания ядер в SolrCloud и загрузки конфигурации в Zookeeper:

- 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 

выше задачи анзибль предполагает следующее:

  • Следующая структура каталогов доступна:

    /tmp/solr 
    ├── my_collection 
    │   └── conf 
    │    ├── schema.xml 
    ├── another_collection 
    │   └── conf 
    │    ├── schema.xml 
    
  • Распределение Solr было ex trated в /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

Смежные вопросы