如何在创建数据库时才能执行ansible任务?

Kit*_*nde 7 ansible

我有一个迁移步骤,我需要假装数据库被引导后,它看起来像这样:

- name: "Setup database"
  mysql_db: name=my_database state=present target=/tmp/database.sql
  args:
    login_user: root
    login_password: ""

- name: Import the database
  shell: ../../vendor/bin/propel up --fake
  args:
    chdir: /var/www/project/application/propel
Run Code Online (Sandbox Code Playgroud)

在第一次虚假迁移数据库之后,显然不是一个好主意.我怎么能让它只发生一次?

Pas*_*i H 17

因此,如果我理解正确,则只有在安装数据库添加了数据库时才导入数据库.在Setup数据库中注册变量并在导入数据库时使用条件将执行此操作:when

- name: "Setup database"
  mysql_db: name=my_database state=present target=/tmp/database.sql
  args:
    login_user: root
    login_password: ""
  register: db_created

- name: Import the database
  shell: ../../vendor/bin/propel up --fake
  args:
    chdir: /var/www/project/application/propel
  when: db_created.changed
Run Code Online (Sandbox Code Playgroud)


Ste*_*ynn 5

我喜欢这两个答案并使用它们来执行以下操作,这对我来说是一个更清晰的解决方案。遗憾的是任务重复但它按您的预期工作,只有在必须创建数据库时才会进行导入。

- name: Create DB (if necessary)
  mysql_db:
    name=my_database
    state=present
  register: db_created

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