Tôi đang kéo JSON qua mô-đun URI và muốn ghi nội dung đã nhận ra một tệp. Tôi có thể lấy nội dung và xuất nó ra trình gỡ lỗi để tôi biết nội dung đã được nhận, nhưng tôi không biết cách tốt nhất để viết tệp.
Tôi đang kéo JSON qua mô-đun URI và muốn ghi nội dung đã nhận ra một tệp. Tôi có thể lấy nội dung và xuất nó ra trình gỡ lỗi để tôi biết nội dung đã được nhận, nhưng tôi không biết cách tốt nhất để viết tệp.
Câu trả lời:
Bạn có thể sử dụng copy
mô-đun, với content
tham số:
- copy: content="{{ your_json_feed }}" dest=/path/to/destination/file
Tài liệu ở đây: sao chép mô-đun
template:
mô-đun và điền vào nó với các biến được đăng ký trong thời gian chạy.
shahash /path/to/file
(lưu ý 2 dấu cách giữa) và sau đó xác thực từ dòng lệnh (thông qua sha256sum -c shafile
) những gì bạn đã tạo qua Ansible.
Trừ khi bạn đang viết các tệp rất nhỏ, bạn có thể nên sử dụng các mẫu .
Thí dụ:
- name: copy upstart script
template:
src: myCompany-service.conf.j2
dest: "/etc/init/myCompany-service.conf"
Dựa trên câu trả lời của Ramon, tôi gặp lỗi. Vấn đề trong đó khoảng trắng trong JSON mà tôi đã cố gắng viết, tôi đã khắc phục sự cố bằng cách thay đổi tác vụ trong playbook thành như sau:
- copy:
content: "{{ your_json_feed }}"
dest: "/path/to/destination/file"
Cho đến bây giờ tôi không chắc tại sao điều này lại cần thiết. Dự đoán tốt nhất của tôi là nó có liên quan đến cách các biến được thay thế trong Ansible và tệp kết quả được phân tích cú pháp.
Chúng tôi có thể chỉ định trực tiếp tệp đích với dest
tùy chọn ngay bây giờ. Trong ví dụ dưới đây, json đầu ra được lưu trữ trong/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