it-swarm.com.de

Ansible: Variable auf Dateiinhalt setzen

Ich benutze das ec2 Modul mit ansible-playbook Ich möchte eine Variable auf den Inhalt einer Datei setzen. Hier ist, wie ich es gerade mache.

  1. Var mit dem Dateinamen
  2. Shell-Task zum cat der Datei
  3. verwenden Sie das Ergebnis von cat, um es an das ec2-Modul zu übergeben.

Beispielinhalt meines Playbooks.

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 }}"

Ich gehe davon aus, dass dies viel einfacher ist, aber ich konnte es nicht finden, während ich in Ansible-Dokumenten suchte.

75
TesterJeff

Sie können Lookups in Ansible verwenden, um den Inhalt einer Datei abzurufen, z.

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

Vorsichtsmaßnahme: Diese Suche funktioniert mit lokalen Dateien, nicht mit entfernten Dateien.

Hier ist ein vollständiges Beispiel aus den Dokumenten :

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

Sie können das Slurp-Modul verwenden: (Vielen Dank an @mlissner für den Vorschlag)

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 }}"
9

Sie können Abrufmodul verwenden, um Dateien von entfernten Hosts auf lokale zu kopieren, und Suchmodul , um den Inhalt der abgerufenen Dateien zu lesen.

6
Taha Jahangir

lookup funktioniert nur auf localhost. Wenn Sie Variablen aus einer von Ihnen aus der Ferne erstellten Variablendatei abrufen möchten, verwenden Sie include_vars: {{ varfile }}. Der Inhalt von {{ varfile }} Sollte ein Wörterbuch der Form {"key":"value"} Sein.

2
DR1979