Używam modułu ec2 ansible-playbook
i chcę ustawić zmienną na zawartość pliku. Oto, jak obecnie to robię.
- Zmień nazwę pliku
- zadanie powłoki do
cat
pliku - wykorzystać wynik
cat
do 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.
ansible
ansible-playbook
TesterJeff
źródło
źródło
Odpowiedzi:
Możesz użyć wyszukiwań w Ansible, aby uzyskać zawartość pliku, np
Uwaga: to wyszukiwanie będzie działać z plikami lokalnymi, a nie zdalnymi.
Oto pełny przykład z dokumentacji :
źródło
cat
polecenie w przykładzie @ TesterJeff działa na zdalnej maszynie.Możesz użyć modułu slurp , aby pobrać plik ze zdalnego hosta: (Dzięki @mlissner za zasugerowanie)
źródło
Możesz użyć modułu pobierania do kopiowania plików ze zdalnych hostów do lokalnego, a modułu wyszukiwania do odczytywania zawartości pobranych plików.
źródło
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.źródło
include_vars
działa lokalnie na komputerze sterującym, a nie z plikami w miejscu docelowym.