【问题标题】:Build a dynamic command from hosts in Ansible在 Ansible 中从主机构建动态命令
【发布时间】:2015-06-06 03:58:12
【问题描述】:

我正在编写 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 主机数量动态变化吗?

【问题讨论】:

    标签: solr command jinja2 apache-zookeeper ansible


    【解决方案1】:

    在您的循环中,您可以使用loop controls of Jinja2 防止最后一项后的逗号:

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

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

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

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

    【讨论】:

    • 感谢展示两种方式;把 join-plus-dangle sexy 称为小问题
    • 太棒了,正是我想要的。谢谢!
    【解决方案2】:

    只是一个旁注:如果 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      相关资源
      最近更新 更多