【问题标题】:How to concatenate EC2 hostnames in config file in Ansible playbook?如何在 Ansible playbook 的配置文件中连接 EC2 主机名?
【发布时间】:2015-07-30 14:48:47
【问题描述】:

我尝试编写 ansible playbook 以在 Amazon EC2 中设置 MongoDB 分片集群。 我使用 ec2 ansible 模块(http://docs.ansible.com/ansible/ec2_module.html)创建了三个 EC2 实例

- name: Create EC2 instances for MongoConfigs
  ec2:
    key_name: mongo
    ..............
    wait: yes
  register: ec2_config

好的,ec2_config 变量包含已创建的实例列表。

然后在所有 mongos 实例上,我必须使用 configDB 参数启动 mongos:http://docs.mongodb.org/manual/reference/configuration-options/#sharding.configDB (您必须在逗号分隔的列表中指定 1 个或 3 个配置服务器)

例如,我有模板:

systemLog:
  destination: file
  path: "/logs/mongodb.log"
  logAppend: true

sharding:
  configDB: {{ configDBHosts }}

我必须如何设置 configDBHosts 值,如下所示:

ip-10-0-103-87.us-west-2.compute.internal:27019,ip-10-0-103-88.us-west-2.compute.internal:27019,ip-10 -0-103-89.us-west-2.compute.internal:27019

?

【问题讨论】:

    标签: mongodb amazon-web-services amazon-ec2 ansible ansible-playbook


    【解决方案1】:

    我一直在使用类似的东西:

    host_list: "{% for host in play_hosts %} {{ host }}:{{ port }} {% endfor %}"
    

    【讨论】:

    • 缺少逗号。要解决最后一个(或第一个)元素中的逗号问题,您可以使用{%- if not loop.last %}, {% endif -%}
    • 见下面@udondan 的回答。对于逗号分隔,这是一个更好的解决方案。
    【解决方案2】:

    我不确定ec2_config 是哪种格式。鉴于它是一个简单的列表,您可以像这样创建所需的格式:

    {{ ec2_config | join(":%d, " | format(port)) }}:{{ port }}
    

    端口和逗号将用作连接中的胶水。由于最后一个元素的端口将丢失,因此您在字符串末尾再次输出端口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-13
      • 2020-04-23
      • 2021-01-17
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      相关资源
      最近更新 更多