2015-01-15 6 views
5

मैं एक प्रवास कदम मैं के बाद डेटाबेस को चलाया जा चुका है नकली करने की जरूरत है और यह इस तरह दिखता है:मेरा डेटाबेस केवल तभी निष्पादित किया जा सकता है जब मेरा डेटाबेस बनाया गया हो?

- 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 

यह स्पष्ट रूप से पहली बार के बाद डेटाबेस विस्थापित नकली करने के लिए एक अच्छा विचार नहीं होगा। मैं इसे केवल एक बार कैसे कर सकता हूं?

उत्तर

12

तो, अगर मैं सही समझ में आ आप चाहते हैं आयात डेटाबेस केवल जब सेटअप डेटाबेस एक डेटाबेस जोड़ा गया है चलाने के लिए। सेटअप डेटाबेस और when शर्त के साथ का उपयोग कर इसमें Registering a variableआयात में डेटाबेस यह करना होगा:

- 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 पहले से ही आप अपने प्रश्न का जवाब दे दिया है, लेकिन फिर भी अगर आप डेटाबेस निर्माण छोड़ना चाहते चरण यदि यह पहले से मौजूद है, तो आप इसे चेक भी जोड़ सकते हैं, जैसे:

- 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 

आशा है कि यह आपकी मदद करेगा। धन्यवाद

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 
0

मैं केवल इस प्लेबुक एक बार चलाने होगा यदि आप जानते हैं कि आप पहली बार के लिए यह सेट कर रहे हैं, लेकिन अगर आपको लगता है कि विकल्प नहीं है, आप के लिए कार्यावधि में एक चर सेट का उपयोग कर सकते हैं केवल जब आप चलाने इसकी पहली बार पता

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

भागो यह ansible-playbook main.yml -e 'first_run=1'

का उपयोग कर आप जानते हैं कि यह पहली सेटअप नहीं है, तो सिर्फ इतना है कि चर के बिना चला: ansible-playbook main.yml

+1

मैं लगता है कि अगर आप हर बार var निर्दिष्ट करने की आवश्यकता है तो यह स्वचालन के पूरे विचार को बर्बाद कर रहा है। क्या होगा यदि आप इसके बारे में भूल जाते हैं? आप क्या करते हो? अपनी डेटाबेस सामग्री खोना? बुरा विचार – user1970395

संबंधित मुद्दे