Ansible。为每个更改调用函数

时间:2017-10-11 15:05:09

标签: function automation ansible yaml

我有一项任务必须检查.ini文件中的商店数据库列表,如果它不存在,请从文件中创建它。

目前我有这个检查数据库存在的任务:

- name: Check DB (if necessary)
  mysql_db:
    name: "{{ item }}"
    state=present
  register: db_created
  with_ini:
    - databases[1-100]
    - section: sites
    - file: "lookup.ini"
    - re: true

但它只是检查db的存在并保持上升事件“db_created”。

我需要使用以下任务创建新数据库:

- name: Import DB (if it was created)
  mysql_db:
    name=my_database
    state=import
    target=/tmp/database.sql
  when: db_created.changed

但是通过这个任务,它将被调用一次,而不是我需要创建的所有数据库。我需要确切地知道需要创建哪个数据库。

您能帮助,如何使用正确的数据库名称调用第二个,如果有多个数据库则调用所有数据库?

1 个答案:

答案 0 :(得分:1)

错误的语法,你的第一个任务不仅仅是检查,而是确保存在db(如果找不到则创建新的db)。

db_created结果中,您有每个项目changed的状态 这样的事情应该可以胜任:

- name: Check DB (if necessary)
  mysql_db:
    name: "{{ item }}"
    state: present
  register: db_created
  with_ini:
    - databases[1-100]
    - section: sites
    - file: "lookup.ini"
    - re: true

- name: Import DB (if it was created)
  mysql_db:
    name: "{{ item.item }}"
    state: import
    target: /tmp/database.sql
  when: item is changed
  with_items: "{{ db_created.results }}"

或者这样的事件(仅迭代更改的项目):

- name: Import DB (if it was created)
  mysql_db:
    name: "{{ item.item }}"
    state: import
    target: /tmp/database.sql
  with_items: "{{ db_created.results | select('changed') | list }}"

注意:关于您的语法 - 忘记=,请始终使用: