Ghi biến vào một tệp trong Ansible


101

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:


200

Bạn có thể sử dụng copymô-đun, với contenttham số:

- copy: content="{{ your_json_feed }}" dest=/path/to/destination/file

Tài liệu ở đây: sao chép mô-đun


5
content = "{{your_json_feed}}" xử lý khoảng trắng và dòng mới. Các dấu ngoặc kép là quan trọng.
m.kocikowski

@RamondelaFuente Nếu tôi muốn thêm nhiều nội dung vars vào tệp, tôi cần sử dụng mô-đun "sao chép" nhiều lần hoặc có cách nào khác không?
KishoreReddy

1
@KishoreReddy Tôi tưởng tượng bạn có thể sử dụng cú pháp jinja2 để nối các biến. Một cái gì đó như "{{biến ~ another_variable}}". Không đẹp, nhưng nếu mọi thứ trở nên phức tạp hơn, bạn có thể sử dụng template:mô-đun và điền vào nó với các biến được đăng ký trong thời gian chạy.
Ramon de la Fuente,

Điều này hoạt động tốt hơn khi bạn muốn tạo một tệp tổng sha256 trong biểu mẫu 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.
Daniel Andrei Mincă

11

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"

2
Mặc dù câu trả lời của Ramon giải quyết chính xác những gì được hỏi, nhưng câu trả lời này nói chung là cách tiếp cận tốt nhất. Ví dụ: nếu bạn có một playbook tạo máy ảo trên đám mây và bạn muốn tạo khoảng không quảng cáo các máy chủ cho một playbook khác, thì một mẫu là cách để thực hiện.
Luis Artola

Bạn có thể giải thích tại sao điều này tốt hơn?
Vorticity

@Vorticity tốt hơn cái gì?
Janus Troelsen

@JanusTroelsen Xin lỗi, bạn có thể giải thích lý do tại sao câu trả lời này tốt hơn câu trả lời được chấp nhận khi viết tệp lớn không?
Vorticity

1
@Vorticity vì nó trở nên khó sử dụng khi bạn nhúng một tệp vào một tệp khác. bạn cần thoát và tô sáng cú pháp sẽ không hoạt động. cơ chế tạo khuôn mẫu cho phép chèn mọi thứ vào giữa nếu bạn cần.
Janus Troelsen

9

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.


0

Chúng tôi có thể chỉ định trực tiếp tệp đích với desttù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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.