2015-10-19 7 views
38

यह है कि मैं उपयोग कर रहा हूँ एक प्लेबुक का एक टुकड़ा (server.yml) है से Ansible प्लेबुक की चर होस्ट करता हैअवहेलना कमांड लाइन

[web] 
x.x.x.x 

[droplets] 
x.x.x.x 

अब मैं ansible-playbook -i hosts/<env> server.yml निष्पादित और [droplets] के लिए इस प्लेबुक को चलाने के लिए server.yml से hosts: web ओवरराइड करना चाहते।

क्या मैं सिर्फ server.yml संपादित किए बिना, एक बार बंद चीज़ के रूप में ओवरराइड कर सकता हूं?

धन्यवाद।

उत्तर

50

मुझे नहीं लगता कि Ansible इस सुविधा है, जो यह होना चाहिए प्रदान करता है को सौंप देना चाहिए। यहाँ कुछ है कि आप क्या कर सकते हैं:

hosts: "{{ variable_host | default('web') }}"

और आप, या तो कमांड लाइन से या एक वार्स फ़ाइल से variable_host पारित कर सकते हैं जैसे:

ansible-playbook server.yml --extra-vars "variable_host=newtarget(s)" 
+2

एक छोटा सुधार आवश्यक है। यह 'मेजबान होना चाहिए: "{{variable_host | डिफ़ॉल्ट (' वेब ')}}" ' – SPM

+0

ओह हाँ, मेरा बुरा। इंगित करने के लिए धन्यवाद :) – wallydrag

+10

यहां एक नोट है कि मुझे लगता है कि इस समाधान की खोज करने वाले उत्तरदायी नए लोगों के लिए जवाब पूरा होगा: उदाहरण: 'ansible-playbook server.yml --extra-vars "variable_host = newtarget (ओं)" ' – Frobbit

2

यदि आप किसी होस्ट से जुड़े किसी कार्य को चलाने के लिए चाहते हैं, लेकिन विभिन्न होस्ट पर, आपको delegate_to आज़माएं।

आपके मामले में, आप अपने स्थानीय होस्ट (ansible गुरु) और बुला ansible-playbook आदेश

25

किसी के लिए जो समाधान की तलाश में आ सकते हैं ।
प्ले बुक

- hosts: '{{ host }}' 
    tasks: 
    - debug: msg="Host is {{ ansible_fqdn }}" 

इन्वेंटरी

[web] 
x.x.x.x 

[droplets] 
x.x.x.x 

कमान:ansible-playbook deplyment.yml -i hosts --extra-vars "host=droplets" तो तुम-वार्स अतिरिक्त

+0

एफवाईआई, यह सही जवाब होना चाहिए। – OzNetNerd

4

यह थोड़ी देर हो चुकी है में समूह का नाम निर्दिष्ट कर सकते हैं , लेकिन मुझे लगता है कि आप --limit or -l का उपयोग कर सकते हैं पैटर्न को अधिक विशिष्ट होस्टों तक सीमित करने के लिए आदेश। (संस्करण 2.3.2.0)

आप - hosts: all (or group) tasks: - some_task

और फिर ansible-playbook playbook.yml -l some_more_strict_host_or_pattern है और --list-hosts ध्वज का उपयोग जिस पर इस विन्यास लागू किया जाएगा होस्ट करता है देखने के लिए कर सकता है।

+2

मैं उत्तर देने के लिए बहुत नया हूं लेकिन मैं इसे एक बहुत ही प्रभावी समाधान मानता हूं, जो दूसरों की तुलना में अधिक कॉम्पैक्ट है। यह क्यों कम हो गया था? –

+1

यह खतरनाक है। यदि कोई व्यक्ति प्रभावित मेजबानों की सूची को सीमित करने के लिए भूल जाता है तो प्लेबुक बहुत नुकसान पहुंचा सकता है। –

+0

मुझे लगता है कि '--extra-vars" variable_host = newtarget (ओं) का उपयोग करके "' स्वीकृत समाधान की तरह ही खतरनाक और एक जटिल समाधान है। यह 'वेब' के डिफ़ॉल्ट होस्ट का उपयोग करता है जिसे 'सभी' के बजाय यहां भी लागू किया जा सकता है। गलती से बचने के लिए आप सख्त होस्ट समूह का डिफ़ॉल्ट रूप से उपयोग कर सकते हैं और 'मेजबान-होस्ट' ध्वज का उपयोग कर सकते हैं ताकि आप समझ सकें कि आप किन मेजबानों को प्रभावित कर रहे हैं। –