【问题标题】:Ansible. Call for function for each changes安西布尔。每次更改都调用函数
【发布时间】:2018-03-23 08:00:32
【问题描述】:

我有一个任务必须检查 .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_created”。

我需要使用这样的任务创建新数据库:

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

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

你能帮忙吗,如何用正确的数据库名称调用第二个,如果有多个数据库,如何调用所有数据库?

【问题讨论】:

    标签: function automation ansible yaml


    【解决方案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 }}"
    

    注意:关于你的语法——忘记=,总是使用:

    【讨论】:

    • 非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-03-18
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    相关资源
    最近更新 更多