2017-10-11 94 views
0

我有一個任務必須檢查.ini文件中的存儲數據庫列表,如果它不存在 - 從文件創建它。Ansible。爲每個更改調用函數

目前我有這個任務,檢查當前數據庫:

- 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_created」。

,我需要創建任務的新的數據庫是這樣的:

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

但是,這項任務將調用一次,不是爲我需要創建的所有數據庫。我需要確切知道需要創建哪個數據庫。

你能幫忙嗎,如何用正確的數據庫名稱來調用第二個數據庫,以及如果有多個數據庫,你可以幫忙嗎?

回答

1

不好的語法分開,你的第一個任務不僅僅是檢查,而是確保數據庫存在(如果沒有找到,創建新的數據庫)。

在你的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 }}" 

注意:有關你的語法 - 忘記=,始終使用:

+0

非常感謝您的幫助。 –