Có hai điều đang diễn ra ở đây. Đầu tiên là bạn đã tạo YAML được trình phân tích cú pháp chấp nhận, nhưng hoạt động theo cách hơi bất ngờ (và sẽ đưa ra cảnh báo trong phiên bản Ansible hiện tại.)
- name: Tạo một đối tượng json để sử dụng làm thẻ
set_fact:
tag_var: '{ "test": "thisisatest" }'
set_fact:
tag_var_json: "{{ tag_var | to_json }}"
Các khóa trong YAML là duy nhất; khi trình phân tích cú pháp gặp phiên bản thứ hai của cùng một khóa, nó sẽ loại bỏ phiên bản đầu tiên. Vì bạn đã lặp lại set_fact
, điều này tương đương với:
- name: Tạo một đối tượng json để sử dụng làm thẻ
set_fact:
tag_var_json: "{{ tag_var | to_json }}"
Tuy nhiên, sửa lỗi cú pháp sẽ vẫn dẫn đến lỗi.
- name: Tạo một đối tượng json để sử dụng làm thẻ
set_fact:
tag_var: '{ "test": "thisisatest" }'
tag_var_json: "{{ tag_var | to_json }}"
Các lập luận để set_fact
phải được tạo khuôn mẫu trước khi tác vụ chạy, tại thời điểm đó tag_var vẫn chưa được xác định (vì tác vụ này đang xác định nó.)
Một cách chính xác để viết nhiệm vụ này là chia thành hai nhiệm vụ riêng biệt:
- name: Tạo đối tượng tag
set_fact:
thẻ_var:
kiểm tra: thisisatest
- name: Tạo chuỗi JSON để gắn thẻ
set_fact:
tag_var_json: "{{ tag_var | to_json }}"
Tuy nhiên, set_fact
không bắt buộc ở tất cả. Bạn chỉ có thể đặt var trực tiếp trên tác vụ mà bạn sử dụng nó, điều này vừa hiệu quả hơn vừa làm cho nó có phạm vi chặt chẽ hơn.
- tên: Cập nhật thẻ phiên bản
lệnh: cập nhật phiên bản tính toán oci -c {{ ngăn }} --freeform-tags "{{ tag_var | to_json }}"
lọ:
thẻ_var:
kiểm tra: thisisatest