जवाबदेह: सामग्री को दर्ज करने के लिए चर सेट करें


93

मैं ansible-playbookएक फ़ाइल की सामग्री के लिए एक चर सेट करना चाहते हैं मैं ec2 मॉड्यूल का उपयोग कर रहा हूँ । यहां बताया गया है कि वर्तमान में मैं यह कैसे कर रहा हूं।

  1. फिल्म के नाम के साथ वार
  2. catफ़ाइल के लिए शेल कार्य
  3. catec2 मॉड्यूल को पास करने के परिणाम का उपयोग करें ।

मेरी प्लेबुक की उदाहरण सामग्री।

vars:
  amazon_linux_ami: "ami-fb8e9292"
  user_data_file: "base-ami-userdata.sh"
tasks:
- name: user_data_contents
  shell: cat {{ user_data_file }}
  register: user_data_action
- name: launch ec2-instance
  local_action:
...
  user_data: "{{ user_data_action.stdout }}"

मुझे लगता है कि ऐसा करने का एक बहुत आसान तरीका है, लेकिन मैं इसे अन्सूबल डॉक्स खोजते समय नहीं पा सका।


यह एक मेरे लिए काम किया। मुझे नहीं लग रहा था कि लुकअप (पाइप) कमांड में वेरिएबल्स को कैसे एम्बेड किया जाए।
ericson.cepeda

जवाबों:


90

किसी फ़ाइल की सामग्री प्राप्त करने के लिए आप Ansible में लुकअप का उपयोग कर सकते हैं , जैसे

user_data: "{{ lookup('file', user_data_file) }}"

कैविएट: यह लुकअप स्थानीय फाइलों के साथ काम करेगा, न कि रिमोट फाइल्स के साथ।

यहाँ डॉक्स से एक पूर्ण उदाहरण है :

- hosts: all
  vars:
     contents: "{{ lookup('file', '/etc/foo.txt') }}"
  tasks:
     - debug: msg="the value of foo.txt is {{ contents }}"

90
ध्यान दें कि लुकअप स्थानीय रूप से चलता है, जबकि cat@ TesterJeff का उदाहरण रिमोट मशीन पर चल रहा है।
एलेक्स डुप्यू

8
दूरस्थ लुकअप के लिए स्लुरप और माच मॉड्यूल्स की जाँच करें
मार्को फेरारी

14

आप स्लप मॉड्यूल का उपयोग कर सकते हैं: (सुझाव देने के लिए @mlissner का धन्यवाद)

vars:
  amazon_linux_ami: "ami-fb8e9292"
  user_data_file: "base-ami-userdata.sh"
tasks:
- name: Load data
  slurp:
    src: "{{ user_data_file }}"
  register: slurped_user_data
- name: Decode data and store as fact # You can skip this if you want to use the right hand side directly...
  set_fact:
    user_data: "{{ slurped_user_data.content | b64decode }}"

8

आप उपयोग कर सकते हैं मॉड्यूल लाने स्थानीय करने के लिए दूरस्थ मेजबान से फाइल कॉपी करने के लिए, और मॉड्यूल देखने लाई गई फ़ाइलों की सामग्री को पढ़ने के लिए।


6
मैं ansible के लिए पूरी तरह से नया हूँ, लेकिन इसके लिए स्लर्प का उपयोग क्यों नहीं करता? यह फ़ाइल की सामग्री में खींचने के लिए रिमोट पर काम करता है।
mlissner

0

लुकिंग केवल लोकलहोस्ट पर काम करता है। यदि आप वैरिएबल फ़ाइल से वैरिएबल को पुनः प्राप्त करना चाहते हैं, तो आपने दूरस्थ रूप से शामिल हैं_वर्ष {{ varfile }}:। की सामग्री {{ varfile }}होना चाहिए प्रपत्र का एक शब्दकोश {"key":"value"}, आप ansible मिलेगा आपको परेशानी देता है अगर आप कोलन के बाद एक स्पेस।


7
यह बकवास है। include_varsनियंत्रण मशीन पर स्थानीय रूप से काम करता है, लक्ष्य पर फ़ाइलों के साथ नहीं।
8
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.