2015-01-15 11 views
5

Ben veritabanı bootstrapped edildikten sonra sahte gereken bir göç adım var ve şuna benzer:Anonim, yalnızca veritabanım oluşturulduğunda nasıl bir görevi yürütebilir?

- 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 

Açıkçası ilk saatten sonra veritabanını göç sahte için iyi bir fikir olmaz. Bunu sadece bir kez nasıl yapabilirim? Birazdan anlaşılan eğer

cevap

12

Yani, İthalat veritabanıKur veritabanı bir veritabanı eklemiştir sadece çalıştırılacak istiyorum. Kurulum veritabanı ve when koşulu ile bunu kullanarak Registering a variable İthalat veritabanı yapacak:

- 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

Pasi zaten size sorunuzun cevabını vermiş, ancak veritabanı oluşturmayı atlamak istediğinizden bile zaten varsa adım, hatta bu gibi buna onay ekleyebilirsiniz:

- 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 

Umut bu size yardımcı olacaktır. Teşekkürler

3

Bu cevapların her ikisini de beğendim ve bunları benim için çok daha temiz bir çözüm olan aşağıdakileri yapmak için kullandım. Görevin tekrarladığı üzücü ama beklediğiniz gibi çalışıyor, içe aktarma yalnızca veritabanı oluşturulmalıysa gerçekleşir.

- 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 
0

zaman sadece koşmak size ilk kez ayarlarken biliyorsanız bunu sadece bir kez taktik kitabı aday olacağını, ancak bu seçeneği yoksa, size zamanında bir değişken dizisi kullanabilirsiniz ansible-playbook main.yml

+1

I: Bu ilk kurulum değil biliyorum, sadece o değişkeni olmadan çalıştırabilir, ilk kez ansible-playbook main.yml -e 'first_run=1'

kullanılarak

- name: Import the database shell: ../../vendor/bin/propel up --fake args: chdir: /var/www/project/application/propel when: "first_run | default(false)" 

Çalıştır biliyorum Varlığı her seferinde belirtmeniz gerekirse, bunun otomasyon fikrini mahvedeceğini düşünün. Ya bunu unutursan? Sen ne yapıyorsun? Veritabanı içeriğinizi kaybetmek mi istiyorsunuz? Kötü bir fikir – user1970395

İlgili konular