Điểm:0

Playbook Ansible - xác định var dựa trên điều kiện

lá cờ cn
Sam

Tôi muốn tạo một var dựa trên điều kiện nên tôi đã tạo như sau:

máy chủ: kiểm tra

vars: vtarget_backup_folder_in_progress: "{{ "{{ folder }}/{{ target }}/test{{ hostvars['localhost']['tstamp'].stdout }}{{ type }}" if node_type == "master " other "{{ folder }}/{{ target }}/prod{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}" }}"

nhưng nó không thành công với tôi với lỗi dưới đây:

Chúng tôi có thể sai, nhưng điều này có vẻ như là do thiếu dấu ngoặc kép. Luôn trích dẫn dấu ngoặc vuông 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 }}"

bạn có thể vui lòng giúp tôi với điều đó?

CHỈNH SỬA

Tôi đã thử dưới đây:

nhiệm vụ:

- tên: đặt thư mục sao lưu IN_PROGRESS
  set_fact:
     v_target_backup_folder_in_progress: >-
       {% if node_type == "master" %}
       "{{ folder }}/{{ target }}/test_{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}"
       {% khác %} 
       "{{ folder }}/{{ target }}/prod_{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}"
       {% endif %}


- tên: đảm bảo tồn tại thư mục mục tiêu đang tiến hành
  tập tin:
    đường dẫn: "{{ v_target_backup_folder_in_progress }}"
    trạng thái: thư mục
    chủ sở hữu: "{{ app_user }}" 
    nhóm: "{{ app_user_group }}" 
    chế độ: u=rwx,g=rwx

nó nhận đúng giá trị của biến khi tôi gỡ lỗi playbook NHƯNG khi tôi kiểm tra v_target_backup_folder_in_progress trên mỗi nút trong số 3 nút mà trò chơi chạy trên đó, tôi thấy có điều gì đó kỳ lạ:

trên một nút, v_target_backup_folder_in_progress không được tạo mặc dù có vẻ như nó được tạo ở chế độ gỡ lỗi nhưng khi tôi đi đến cùng một đường dẫn, tôi không thể tìm thấy thư mục!

trên 2 nút còn lại, v_target_backup_folder_in_progress được tạo nhưng dưới dạng tệp! không phải là một thư mục mặc dù nó dường như được tạo trong chế độ gỡ lỗi dưới dạng một thư mục.

Vậy tại sao điều này xảy ra ?

lá cờ br
không thể lồng các lọn tóc "{{ }}".
lá cờ cn
Sam
Vì vậy, ý bạn là tôi cần xóa {{ }} khỏi các vars bên trong {{ }} chính/cha mẹ? Giống như var này: "{{ thư mục/mục tiêu }}"
U880D avatar
lá cờ ca
Phải, bạn cần xóa chúng, nhưng như `"{{ folder }}/{{ target }}/test_...`
lá cờ cn
Sam
Nếu ý bạn là như thế này: v_target_backup_folder_in_progress: "{{ folder }}/{{ target }}/test_{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}" if node_type == "master" khác "{{ folder }}/{{ target }}" nó không hoạt động
Điểm:0
lá cờ in

Điều này nên làm điều đó:

vtarget_backup_folder_in_progress: "{% if node_type == 'master' %}{{ folder }}/{{ target }}/test{{ hostvars['localhost']['tstamp'].stdout }}{{ type }}{ %else %}{{ folder }}/{{ target }}/prod{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}{% endif %}"

Tất cả trong một chuỗi, không có dấu ngoặc nhọn lồng nhau, if/else/endif với {% %}

Bạn thậm chí có thể giảm nó đi một chút bằng cách chuyển phần bắt đầu và kết thúc chung ra khỏi câu điều kiện:

vtarget_backup_folder_in_progress: "{{ folder }}/{{ target }}/{% if node_type == 'master' %}test{{ hostvars['localhost']['tstamp'].stdout }}{% other %}prod {{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}{% endif %}{{ type }}"

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.