2015-11-17 10 views
8

मुझे उत्तर में एक तथ्य की सामग्री के साथ एक फ़ाइल बनाने की आवश्यकता है। मैं वर्तमान में कुछ इस तरह कर रहा हूँ:क्या इनलाइन टेम्पलेट्स का उपयोग करना संभव है?

- template: src=templates/git_commit.j2 dest=/path/to/REVISION 

मेरे टेम्पलेट फ़ाइल इस तरह दिखता है:

{{ git_commit }} 

जाहिर है, यह एक बहुत अधिक मतलब होता सिर्फ इस तरह कुछ करने के लिए:

- inline_template: content={{ git_revision }} dest=/path/to/REVISION 

कठपुतली कुछ इसी तरह प्रदान करता है। क्या उत्तर में ऐसा करने का कोई तरीका है?

उत्तर

8

lineinfile मॉड्यूल के लिए एक और विकल्प (के रूप में udondan के answer द्वारा दिए गए) copy मॉड्यूल का उपयोग और एक स्रोत Ansible की मेजबानी के लिए स्थानीय के बजाय सामग्री निर्दिष्ट करने के लिए किया जाएगा।

एक उदाहरण काम कुछ ऐसा दिखाई देगा:

- name: Copy commit ref to file 
    copy: 
    content: "{{ git_commit }}" 
    dest: /path/to/REVISION 

मैं व्यक्तिगत रूप से मुझे lineinfile के लिए के रूप में lineinfile को यह पसंद करते हैं फ़ाइलों कि पहले से ही जहां के रूप में copy देखते हैं करने के लिए मामूली परिवर्तन करने के लिए किया जाना चाहिए यकीन है कि एक फ़ाइल बनाने के लिए किया जाता है एक जगह पर है और ठीक उसी तरह दिख रहा है जैसा आप चाहते हैं। यह कई लाइनों के साथ मुकाबला करने का लाभ भी है।

हकीकत में हालांकि मैं इस एक टेम्पलेट कार्य बनाने के लिए और सिर्फ राशि परीक्षा होगी एक टेम्पलेट फ़ाइल हो:

"{{ git_commit }}" 

कौन इस कार्य के द्वारा बनाई गई हो जाता है:

- name: Copy commit ref to file 
    template: 
    src: path/to/template 
    dest: /path/to/REVISION 

यह क्लीनर है और यह मॉड्यूल का उपयोग ठीक उसी के लिए कर रहा है जिसके लिए वे हैं।

+0

src और पीछे की ओर गंतव्य है साथ? मुझे लगता है कि आप चाहते हैं कि src:/path/to/REVISION यदि वह आपका टेम्पलेट है। ओपी का एक अच्छा सवाल है। इंटरमीडिएट के माध्यम से जाने के बिना इनलाइन सामग्री से सीधे जाना अच्छा लगेगा। – Greg

4

हां, उस साधारण मामले में lineinfile मॉड्यूल के साथ यह संभव है।

- lineinfile: 
    dest=/path/to/REVISION 
    line="{{ git_commit }}" 
    regexp=".*" 
    create=yes 

lineinfile मॉड्यूल आम तौर पर यह सुनिश्चित करें कि एक विशिष्ट लाइन एक फ़ाइल के अंदर निहित है प्रयोग किया जाता है। create=yes विकल्प फ़ाइल को क्रेट करेगा यदि यह अस्तित्व में नहीं है। regexp=.* विकल्प यह सुनिश्चित करता है कि git_commit परिवर्तनों में आप फ़ाइल में सामग्री नहीं जोड़ते हैं, क्योंकि यह डिफ़ॉल्ट रूप से सुनिश्चित करेगा कि नई सामग्री फ़ाइल में जोड़ दी गई है और पिछली सामग्री को प्रतिस्थापित नहीं किया गया है।

यह केवल काम करता है के बाद से आप केवल अपनी फ़ाइल में रेखा है। यदि आपके पास अधिक लाइनें होंगी तो यह स्पष्ट रूप से इस मॉड्यूल के साथ काम नहीं करेगा।

0

यह समस्या का समाधान किया जा रहा है। हालांकि, अगर टेम्पलेट फ़ाइल एक से अधिक चर थी, अर्थात एक json फ़ाइल, यह संभव सामग्री पैरामीटर के साथ प्रति मॉड्यूल का उपयोग करने के लिए, एक देखने, यानी .:

# playbook.yml 
--- 
- name: deploy inline template 
    copy: 
    content: '{{ lookup("template", "inlinetemplate.yml.j2") }}' 
    dest: /var/tmp/inlinetempl.yml 

# inlinetemplate.yml.j2 
--- 
- name: {{ somevar }} 
    abc: def 
संबंधित मुद्दे

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