我有一个迁移步骤,我需要在数据库引导后进行伪造,它看起来像这样:
- 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
首次虚假迁移数据库显然不是一个好主意。我怎么能让它只发生一次?
答案 0 :(得分:15)
因此,如果我理解你想要导入数据库只有在安装数据库添加了数据库时才能运行。 安装数据库中的Registering a variable,并在导入数据库中使用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
答案 1 :(得分:3)
我喜欢这两个答案,并用它们来做以下事情,这对我来说是一个更清洁的解决方案。遗憾的是,任务重复,但它的工作正如您所期望的那样,只有在必须创建数据库时才会进行导入。
- 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
答案 2 :(得分:1)
Pasi已经为您提供了问题的答案,但即使您想跳过数据库创建步骤(如果它已经存在),您甚至可以将检查添加到它,如下所示:
- name: check if DB exists
shell: mysql -e 'SHOW DATABASES;' | grep my_database
register: dbstatus
ignore_errors: True
- name: "Setup database"
mysql_db: name=my_database state=present target=/tmp/database.sql
args:
login_user: root
login_password: ""
register: db_created
when: dbstatus.rc != 0
- name: Import the database
shell: ../../vendor/bin/propel up --fake
args:
chdir: /var/www/project/application/propel
when: db_created.changed
希望这会对你有所帮助。感谢