किसी फ़ाइल को Ansible में चर लिखें


101

मैं JSON को URI मॉड्यूल के माध्यम से खींच रहा हूं और प्राप्त सामग्री को एक फ़ाइल में लिखना चाहता हूं। मैं कंटेंट प्राप्त करने और इसे डीबगर में आउटपुट करने में सक्षम हूं, इसलिए मुझे पता है कि सामग्री प्राप्त हो गई है, लेकिन मुझे फाइल लिखने के लिए सबसे अच्छा अभ्यास नहीं पता है।

जवाबों:


200

आप पैरामीटर के copyसाथ मॉड्यूल का उपयोग कर सकते हैं content:

- copy: content="{{ your_json_feed }}" dest=/path/to/destination/file

यहां डॉक्स: कॉपी मॉड्यूल


5
सामग्री = "{{your_json_feed}}" व्हॉट्सएप और नए समाचारों से संबंधित है। उद्धरण महत्वपूर्ण हैं।
m.kocikowski

@ रोंडेलाफ्यूएंट अगर मैं फ़ाइल में कई वेरिएंट सामग्री जोड़ना चाहूंगा, तो मुझे कई बार "कॉपी" मॉड्यूल का उपयोग करने की आवश्यकता है या कोई अन्य तरीका है?
किशोररेड्डी

1
@ KishoreReddy मुझे लगता है कि आप चर को जोड़ने के लिए jinja2 सिंटैक्स का उपयोग कर सकते हैं। "{{वैरिएबल ~ other_variable}}" जैसा कुछ। सुंदर नहीं है, लेकिन अगर चीजें किसी भी अधिक जटिल हैं, तो आप template:मॉड्यूल का उपयोग कर सकते हैं और इसे रनटाइम में पंजीकृत चर के साथ भर सकते हैं।
रेमन डे ला फुएंते

यह तब बेहतर काम करता है जब आप फॉर्म में एक sha256 योग फ़ाइल shahash /path/to/file(नोट 2 रिक्त स्थान के बीच) उत्पन्न करना चाहते हैं और फिर कमांड लाइन ( sha256sum -c shafileजिससे) के माध्यम से आप क्या उत्पन्न करते हैं, से सत्यापित करें।
डैनियल आंद्रेई मिंस्क

11

जब तक आप बहुत छोटी फाइलें नहीं लिख रहे हैं, आपको शायद टेम्प्लेट का उपयोग करना चाहिए ।

उदाहरण:

- name: copy upstart script
  template: 
    src: myCompany-service.conf.j2 
    dest: "/etc/init/myCompany-service.conf"

2
जबकि रेमन के उत्तर में वही पूछा गया है जो पूछा गया था, यह उत्तर सामान्य रूप से सबसे अच्छा तरीका है। उदाहरण के लिए, यदि आपके पास क्लाउड में VMs बनाने वाली प्लेबुक है और आप किसी अन्य प्लेबुक के लिए मेजबानों की सूची बनाना चाहते हैं, तो एक टेम्प्लेट जाने का रास्ता है।
लुइस अर्तोला

क्या आप बता सकते हैं कि यह बेहतर क्यों है?
vorticity

@Vorticity क्या बेहतर है?
Janus Troelsen

@JanusTroelsen क्षमा करें, क्या आप बता सकते हैं कि बड़ी फ़ाइलों को लिखते समय स्वीकृत उत्तर से बेहतर क्यों है?
vorticity

1
@Vorticity क्योंकि जब आप किसी फ़ाइल को किसी अन्य फ़ाइल में एम्बेड करते हैं, तो यह अस्पष्ट हो जाता है। आपको भागने की जरूरत है और वाक्य रचना हाइलाइटिंग काम नहीं करेगी। टेम्प्लेटिंग तंत्र यदि आवश्यक हो तो बीच में चीजों को सम्मिलित करने में सक्षम बनाता है।
Janus Troelsen

9

रेमन के उत्तर के आधार पर मैं एक त्रुटि में भागता हूं। JSON में जिन जगहों पर मैंने लिखने की कोशिश की, उन्हें देखने के लिए प्लेबुक में कार्य को बदलकर मुझे इसे ठीक करने की कोशिश की:

- copy:
    content: "{{ your_json_feed }}"
    dest: "/path/to/destination/file"

अब तक मुझे यकीन नहीं है कि इसकी आवश्यकता क्यों थी। मेरा सबसे अच्छा अनुमान यह है कि इसका कुछ करना था कि कैसे अंसिबल में चर को प्रतिस्थापित किया जाता है और परिणामस्वरूप फ़ाइल को पार्स किया जाता है।


0

हम सीधे गंतव्य फ़ाइल को destअब विकल्प के साथ निर्दिष्ट कर सकते हैं। नीचे दिए गए उदाहरण में, आउटपुट json में संग्रहीत किया गया है/tmp/repo_version_file

- name: Get repository file repo_version model to set ambari_managed_repositories=false
  uri:
    url: 'http://<server IP>:8080/api/v1/stacks/HDP/versions/3.1/repository_versions/1?fields=operating_systems/*'
    method: GET
    force_basic_auth: yes
    user: xxxxx
    password: xxxxx
    headers:
      "X-Requested-By": "ambari"
      "Content-type": "Application/json"
    status_code: 200
    dest: /tmp/repo_version_file
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.