向Cassandra配置模板Yaml添加Ansible变量

时间:2019-02-11 13:22:29

标签: cassandra automation ansible ansible-template

我正在使用Ansible设置AWS Cassandra集群,并且试图将动态IP传递给YML模板文件。我已将IP分配给Ansible组变量,并希望在填充Cassandra配置YML时使用它。在Play 1中,我最初将组分配为:

file : roles/gather_cassandra_hosts/tasks/main.yml

- name: Setup hosts for Cassandra nodes
  add_host: hostname={{ node.public_dns_name }} groups=cassandraNodes

然后在Play 2中,我试图使用此变量来设置以下标准Cassandra配置:

file : roles/install_cassandra/tasks/main.yml

- name: Override cassandra.yaml file
  template:
    src: cassandra.yaml
    dest: apache-cassandra-3.11.3/conf/
  with_items:
    - cassandraNodes

file : roles/install_cassandra/templates/cassandra.yaml

listen_address: {{ cassandraNodes }}

但是我遇到以下错误:

failed: [ec2-xx-xx-xx-xx.region-1.compute.amazonaws.com] (item=cassandraNodes) => {
    "changed": false,
    "item": "cassandraNodes",
    "msg": "AnsibleUndefinedVariable: 'cassandraNodes' is undefined"
}

起初,我可以使用cassandraNodes来定义我的节点...

- name: Play 2. Install Cassandra
  hosts: cassandraNodes

...但是只是无法在模板中找到该替换。

1 个答案:

答案 0 :(得分:1)

好,所以对我有用的是在vars的{​​{1}}部分中定义另一个变量,并将该值传递给模板:

剧本:

Play 2

角色:

vars:
  nodes: "{{ groups['cassandraNodes'] }}"

模板:

- name: Override cassandra.yaml file
  template:
    src: cassandra.yaml
    dest: apache-cassandra-3.11.3/conf/
  with_items:
  - nodes