Ściągam JSON za pośrednictwem modułu URI i chcę zapisać otrzymaną zawartość do pliku. Jestem w stanie pobrać zawartość i przesłać ją do debuggera, więc wiem, że treść została odebrana, ale nie znam najlepszych praktyk dotyczących zapisywania plików.
Ściągam JSON za pośrednictwem modułu URI i chcę zapisać otrzymaną zawartość do pliku. Jestem w stanie pobrać zawartość i przesłać ją do debuggera, więc wiem, że treść została odebrana, ale nie znam najlepszych praktyk dotyczących zapisywania plików.
Odpowiedzi:
Możesz użyć copy
modułu z content
parametrem:
- copy: content="{{ your_json_feed }}" dest=/path/to/destination/file
Dokumentacja tutaj: moduł kopiowania
template:
modułu i wypełnić go zmiennymi zarejestrowanymi w czasie wykonywania.
shahash /path/to/file
(uwaga 2 spacje między), a następnie zweryfikować z wiersza poleceń (przez sha256sum -c shafile
) to, co wygenerowałeś za pomocą Ansible.
Na podstawie odpowiedzi Ramona napotykam błąd. Problem polegający na tym, że spacje w JSON próbowałem napisać, naprawiłem, zmieniając zadanie w playbooku, aby wyglądało następująco:
- copy:
content: "{{ your_json_feed }}"
dest: "/path/to/destination/file"
Na razie nie jestem pewien, dlaczego było to potrzebne. Domyślam się, że miało to coś wspólnego ze sposobem, w jaki zmienne są zastępowane w Ansible, a wynikowy plik jest analizowany.
Jeśli nie piszesz bardzo małych plików, prawdopodobnie powinieneś używać szablonów .
Przykład:
- name: copy upstart script
template:
src: myCompany-service.conf.j2
dest: "/etc/init/myCompany-service.conf"
Teraz możemy bezpośrednio określić plik docelowy za pomocą dest
opcji. W poniższym przykładzie wyjściowy plik json jest przechowywany w pliku/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