2014-10-20 11 views
6

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

eye load service.rb 
eye restart service.rb 

ऐप्स और यह

eye reload appname 

की तरह और एक हैंडलर में फोन इस तरह काम करते हैं:

- name: reload eye service 
command: eye load /path/{{ service }}.rb && eye restart {{ service }} 

लेकिन मैं चर पारित करने के लिए एक तरह से नहीं मिल सकता है एक हैंडलर के लिए। क्या यह संभव है?

+0

यह कोई डुप्लिकेट की तरह दिखता है http://stackoverflow.com/questions/25694249/ansible-using-with-items-with-notify-handler – Rachel

+0

उपयोग खोल मॉड्यूल [http://docs.ansible.com/ansible/shell_module.html] –

+1

@va की leriy-Solovyov, यह '' '&& अपेक्षा के अनुरूप' '' काम करेगा सिवाय कोई फर्क नहीं है। Parametrised संचालकों सिर्फ ansible 2.0 में काम करते हैं तो उचित तरीका हैंडलर नाम पर सेवा नाम का उपयोग करने के लिए है: '' '- नाम: पुनः लोड आंख {{}} सेवा खोल: आंख लोड/पथ/{{}} सेवा। rb && आंख पुनः आरंभ {{}} सेवा '' ' – hryamzik

उत्तर

0

संचालकों/main.yml:

- name: restart my service 
    shell: eye load /path/{{ service }}.rb && eye restart {{ service }} 

तो आप कर सकते हैं डिफ़ॉल्ट चूक/main.yml के माध्यम से सेटअप चर:

service : "service" 

या आप परिभाषित कर सकते हैं {{सेवा}} हालांकि कमांड लाइन :

ansible-playbook -i xxx path/to/playbook -e "service=service" 

http://docs.ansible.com/ansible/playbooks_variables.html

पुनश्च: http://docs.ansible.com/ansible/playbooks_intro.html#playbook-language-

example 
--- 
- hosts: webservers 
    vars: 
    http_port: 80 
    max_clients: 200 
    remote_user: root 
    tasks: 
    - name: ensure apache is at the latest version 
    yum: name=httpd state=latest 
    - name: write the apache config file 
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf 
    notify: 
    - restart apache 
    - name: ensure apache is running (and enable it at boot) 
    service: name=httpd state=started enabled=yes 
    handlers: 
    - name: restart apache 
     service: name=httpd state=restarted 

http://docs.ansible.com/ansible/playbooks_intro.html#handlers-running-operations-on-change

क्या तुमने कभी फ्लश करने के लिए सभी हैंडलर हालांकि तुरंत आदेश, 1.2 में चाहते हैं और बाद में, आप कर सकते हैं:

tasks: 
    - shell: some tasks go here 
    - meta: flush_handlers 
    - shell: some other tasks 
+1

कि काम करेंगे, लेकिन केवल एक ही आवेदन पुनः प्रारंभ करना होगा कि के लिए। एक हैंडलर केवल प्लेबुक के अंत में निकाल दिया जाएगा। हालांकि यह हैंडलर एक सूची से अधिक और प्रत्येक सेवा को पुन: प्रारंभ करने के लिए एक आइटम 'set_fact' के माध्यम से है कि सूची में जोड़ा जाता जरूरत है के लिए लूप अगर काम करेगा। – udondan

+0

मैंने उदाहरण जोड़ा जब आप अगले कार्य से पहले हैंडलर फ्लश करते हैं। पीएस: शायद आपको अपनी प्लेबुक को पुनर्गठित करने की ज़रूरत है? –

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