Ansible: Ustaw zmienną na zawartość pliku


94

Używam modułu ec2 ansible-playbooki chcę ustawić zmienną na zawartość pliku. Oto, jak obecnie to robię.

  1. Zmień nazwę pliku
  2. zadanie powłoki do catpliku
  3. wykorzystać wynik catdo przekazania do modułu ec2.

Przykładowa zawartość mojego poradnika.

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

Zakładam, że jest o wiele łatwiejszy sposób, aby to zrobić, ale nie mogłem go znaleźć podczas wyszukiwania dokumentów Ansible.


Ten pracował dla mnie. Nie znalazłem sposobu osadzania zmiennych w poleceniu wyszukiwania (potok).
ericson.cepeda

Odpowiedzi:


93

Możesz użyć wyszukiwań w Ansible, aby uzyskać zawartość pliku, np

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

Uwaga: to wyszukiwanie będzie działać z plikami lokalnymi, a nie zdalnymi.

Oto pełny przykład z dokumentacji :

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

91
Zwróć uwagę, że wyszukiwanie działa lokalnie, podczas gdy catpolecenie w przykładzie @ TesterJeff działa na zdalnej maszynie.
Alex Dupuy,

8
W przypadku zdalnego wyszukiwania sprawdź moduły slurp i fetch
Marco Ferrari

16

Możesz użyć modułu slurp , aby pobrać plik ze zdalnego hosta: (Dzięki @mlissner za zasugerowanie)

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


0

wyszukiwanie działa tylko na hoście lokalnym. Jeśli chcesz pobrać zmienne z pliku zmiennych dokonane zdalnie korzystać include_vars: {{ varfile }}. Treść {{ varfile }}powinna być słownikiem formularza {"key":"value"}, okaże się, że ansibl sprawi ci kłopoty, jeśli wstawisz spację po dwukropku.


7
To bzdury. include_varsdziała lokalnie na komputerze sterującym, a nie z plikami w miejscu docelowym.
techraf
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.