Vì vậy, tôi đang chạy một vai trò ansible có tệp main.yml trong thư mục vai trò/mặc định. Nội dung của tập tin đó là thế này:
---
api_bí mật:
'API_PROFILE': "{{api_profile }}"
'SERVER_ADDRESS': "{{ server_address }}"
'MGMT_SERVER_ADDRESS': "{{ management_server_address }}"
Bây giờ tôi muốn đưa vào khối api_secrets, sau MGMT_SERVER_ADDRESS một cái gì đó như thế này:
{% if '"port" trong mgmt_ports' %}
'MGMT_SERVER_PORT': "{{ management_server_port1 }}"
'MGMT_SERVER_USER': "{{ user1 }}"
{% khác %}
'MGMT_SERVER_PORT': "{{ management_server_port2 }}"
'MGMT_SERVER_USER': "{{ user2 }}"
{% endif %}
Với mọi thứ từ đây, một tệp được tạo trên máy chủ có nội dung ở trên và tất nhiên là thay thế các biến bằng giá trị thực của chúng.
Bất kể tôi cố gắng thế nào, nó luôn dẫn đến các lỗi khác nhau. Tôi đã thử với "{% if ... endif %}", cũng như với ''
Lỗi sẽ là thế này:
LỖI! Lỗi cú pháp khi tải YAML.
tìm thấy ký tự không thể bắt đầu bất kỳ mã thông báo nào
Lỗi dường như ở '/opt/ansible/roles/api/defaults/main.yml': dòng 55, cột 2, nhưng có thể
ở nơi khác trong tệp tùy thuộc vào vấn đề cú pháp chính xác.
Dòng vi phạm dường như là:
{% if '"port" trong mgmt_ports' %}
^ ở đây
Tôi cũng đã thử như thế này:
"{% if (cổng tính bằng mgmt_ports) %}
'MGMT_SERVER_PORT': "{{ management_server_port1 }}"
{% khác %}
'MGMT_SERVER_PORT': "{{ management_server_port2 }}"
{% endif %}"
Trong trường hợp này, lỗi là:
LỖI! Lỗi cú pháp khi tải YAML.
không thể tìm thấy mong đợi ':'
Lỗi dường như ở '/opt/ansible/roles/api/defaults/main.yml': dòng 56, cột 24, nhưng có thể
ở nơi khác trong tệp tùy thuộc vào vấn đề cú pháp chính xác.
Dòng vi phạm dường như là:
"{% if (cổng tính bằng mgmt_ports) %}
'MGMT_SERVER_PORT': "{{ management_server_port1 }}"
^ ở đây
Chúng tôi có thể sai, nhưng điều này có vẻ như nó có thể là một vấn đề với
thiếu dấu ngoặc kép. Luôn trích dẫn các dấu ngoặc của biểu thức mẫu khi chúng
bắt đầu một giá trị. Ví dụ:
with_items:
- {{ foo }}
Nên được viết là:
with_items:
- "{{ foo }}"
cách thích hợp để làm điều này là gì?
Tôi biết sẽ dễ dàng hơn bằng cách sử dụng mẫu jinja2 nhưng playbooks được tạo ra như thế này và tôi phải tuân theo phương pháp này.