How to use "when" with multiple "item.x"?

21 views
Skip to first unread message

Thiago Martins

unread,
Mar 16, 2016, 2:51:41 PM3/16/16
to Ansible Project
Guys,

 Currently, I have an Ansible automation to deploy OpenStack, it works great but, starting from Mitaka, Nova requires two SQL databases (nova and nova_api), and not just only one anymore.

 So, for Liberty, I have something like this:

group_vars/all:


---
mysql_databases:
- { os_project: "keystone", db_name: "keystone", db_host: "%", db_user: "keystoneUser", db_pass: "keystonePass" }
- { os_project: "glance", db_name: "glance", db_host: "%", db_user: "glanceUser", db_pass: "glancePass" }
- { os_project: "nova", db_name: "nova", db_host: "%", db_user: "novaUser", db_pass: "novaPass" }
---

 And inside of my Nova task, I have this:


---
- name: Updating nova.conf
template: src={{openstack_release}}/nova.conf
dest=/etc/nova/nova.conf
owner=nova
group=nova
mode=0640
backup=yes
when: item.os_project == "nova"
with_items: mysql_databases
notify: restart-nova
---

That uses the nova.conf template:

---
[database]
connection = mysql+pymysql://{{item.db_user}}:{{item.db_pass}}@{{controller_addr}}/{{item.db_name}}
---

 This works like a charm for Liberty, but, I am unable to figure out how to add more databases... Here is what I am trying to do for Mitaka (which does not work), as follows:

---
mysql_databases:
- { os_project: "keystone", db_name: "keystone", db_host: "%", db_user: "keystoneUser", db_pass: "keystonePass" }
- { os_project: "glance", db_name: "glance", db_host: "%", db_user: "glanceUser", db_pass: "glancePass" }
- { os_project: "nova", db_name: "nova", db_host: "%", db_user: "novaUser", db_pass: "novaPass" } - { os_project: "nova_api", db_name: "nova_api", db_host: "%", db_user: "novaAPIUser", db_pass: "novaAPIPass" }
---

NOTE: My "os_mysql_db" role creates "nova_api" DB as expected (https://github.com/tmartinx/svauto/blob/dev/ansible/roles/os_mysql_db/tasks/main.yml).

New Nova task (this does not work):


---
- name: Updating nova.conf
template: src={{openstack_release}}/nova.conf
dest=/etc/nova/nova.conf
owner=nova
group=nova
mode=0640
backup=yes
when: - item.os_project == "nova" - item.os_project == "nova_api"
with_items: mysql_databases
notify: restart-nova
---

And New template (being ignored, not working):


---
[database]
connection = mysql+pymysql://{{item.db_user}}:{{item.db_pass}}@{{controller_addr}}/{{item.db_name}}
[api_database]
connection = mysql+pymysql://{{item.db_user}}:{{item.db_pass}}@{{controller_addr}}/{{item.db_name}}
---

 But, of curse, I am doing it wrong (it is not somehow, iterating over the two)... Any tips?

 I also tried a different task, like this:


---
- name: Updating nova.conf
template: src={{openstack_release}}/nova.conf
dest=/etc/nova/nova.conf
owner=nova
group=nova
mode=0640
backup=yes
when: item.os_project == "nova" and item.os_project == "nova_api"
with_items: mysql_databases
notify: restart-nova
---

 But didn't worked either...

 I really appreciate any help!

 Thanks in advance!

Best,
Thiago


Reply all
Reply to author
Forward
0 new messages