Điểm:0

ansible AND hoạt động với WHEN không thành công khi sử dụng ansible_facts

lá cờ gr

Nhóm: Tôi đang cố gắng thực hiện một nhiệm vụ không thành công khi hai điều kiện không được đáp ứng trên một nút. ansible_facts['distribution_version']ansible_facts['phân phối'].

Tôi đang đi qua hai nút. một nút là 20.x Ubuntu và khác là 18.x.

vars/main.yml

os_distribution: "Ubuntu"
os_version: "20.04"

nhiệm vụ dưới đây

- tên: "Kiểm tra ánh xạ Phiên bản hệ điều hành cơ sở sang phiên bản phân phối dự kiến ​​{{ os_version }}"
  Thất bại:
    msg: "Tác vụ không thành công do tìm thấy phiên bản hệ điều hành không mong muốn: {{ ansible_facts['distribution'] }} {{ ansible_facts['distribution_version'] }} trên {{ inventory_hostname }}"
  khi nào:
    - ansible_facts['distribution_version'] là phiên bản(os_version, '<')
    - os_distribution != ansible_facts['distribution']

kết quả

NHIỆM VỤ [xác thực nút: Kiểm tra ánh xạ Phiên bản hệ điều hành cơ sở sang phiên bản phân phối dự kiến ​​20.04] ***
Thứ ba, ngày 23 tháng 11 năm 2021 20:11:32 +0000 (0:00:17.570) 0:00:17.690 ****** 
bỏ qua: [node1]
bỏ qua: [node2]
    

đầu ra dự kiến: quan sát 18.x bên dưới không chắc tôi đang thiếu gì để có được điều đó.

gây tử vong: [node2]: KHÔNG THÀNH CÔNG! => {"đã thay đổi": sai, "thông báo": "Tác vụ không thành công do tìm thấy phiên bản hệ điều hành không mong muốn: Ubuntu 18.04 trên nút2"}

Khi tôi gỡ bỏ - os_distribution != ansible_facts['distribution'] sau đó tôi nhận được kết quả mong đợi như dưới đây nhưng tôi muốn đáp ứng hai điều kiện không chỉ một.

[fatal: [node2]: KHÔNG THÀNH CÔNG! => {"đã thay đổi": sai, "thông báo": "Tác vụ không thành công do tìm thấy phiên bản hệ điều hành không mong muốn: Ubuntu 18.04 trên nút2 }}"}

tham chiếu đến ansible_facts

SỰ THẬT cho 20.x

10:17:59 [0;32m "phân phối": "Ubuntu",[0m
10:17:59 [0;32m "distribution_file_parsed": true,[0m
10:17:59 [0;32m "đường dẫn_tệp_phân phối": "/etc/os-release",[0m
10:17:59 [0;32m "distribution_file_variety": "Debian",[0m
10:17:59 [0;32m "distribution_major_version": "18",[0m
10:17:59 [0;32m "distribution_release": "bionic",[0m
10:17:59 [0;32m "distribution_version": "18.04",[0m

SỰ THẬT cho 20.x

10:23:43 [0;32m "phân phối": "Ubuntu",[0m
10:23:43 [0;32m "distribution_file_parsed": true,[0m
10:23:43 [0;32m "đường dẫn_tệp_phân phối": "/etc/os-release",[0m
10:23:43 [0;32m "distribution_file_variety": "Debian",[0m
10:23:43 [0;32m "distribution_major_version": "20",[0m
10:23:43 [0;32m "distribution_release": "tiêu điểm",[0m
10:23:43 [0;32m "distribution_version": "20.04",[0m
Điểm:0
lá cờ in

Khi bạn cung cấp một danh sách khi nó thực hiện một của hai biểu thức. Và đây là bảng AND chuẩn.

Cond1 Cont2 | Kết quả
Sai Sai | Sai
Sai Đúng | Sai
Đúng Sai | Sai
Đúng Đúng | Thật

xem xét bạn có

os_distribution: "Ubuntu" # biến
ansible_facts.distribution: "Ubuntu" # fact

Cách diễn đạt "Ubuntu" != "Ubuntu"Saivà vì theo bảng chân lý nếu một trong hai điều kiện là sai, thì kết quả cuối cùng là sai. Ansible sẽ chỉ thực hiện tác vụ khi kết quả là đúng.

Dù sao, tôi suepct để có được kết quả bạn muốn nên thay đổi của bạn khi nào đến một HOẶC thay vì có một danh sách được nối bởi AND.

khi nào:
  ansible_facts['distribution_version'] là phiên bản(os_version, '<') hoặc
  os_distribution != ansible_facts['distribution']

Playbook trình diễn + đầu ra

---
- máy chủ: localhost
  lọ:
    os_distribution: "Ubuntu"
    os_version: "20.04"
    ansible_facts:
      phân phối: "Ubuntu"
      phân phối_file_parsed: Đúng
      distribution_file_path: "/etc/os-release"
      phân phối_file_variety: "Debian"
      phân phối_major_version: "18"
      phân phối_phát hành: "bionic"
      phân phối_version: "18.04"

  nhiệm vụ:
  - gỡ lỗi:
      tin nhắn: >-
        {{ os_distribution }} {{ansible_facts['distribution'] }}
        {{ os_distribution != ansible_facts['distribution'] }}
  - gỡ lỗi:
      tin nhắn: >-
        {{ ansible_facts['distribution_version'] }} {{ os_version }}
        {{ ansible_facts['distribution_version'] là phiên bản(os_version, '<') }}

  - tên: "Kiểm tra ánh xạ Phiên bản hệ điều hành cơ sở sang phiên bản phân phối dự kiến ​​{{ os_version }}"
    gỡ lỗi:
      msg: "Tác vụ không thành công do tìm thấy phiên bản hệ điều hành không mong muốn: {{ ansible_facts['distribution'] }} {{ ansible_facts['distribution_version'] }} trên {{ inventory_hostname }}"
    khi nào:
      ansible_facts['distribution_version'] là phiên bản(os_version, '<') hoặc
      os_distribution != ansible_facts['distribution']

- máy chủ: localhost
  lọ:
    os_distribution: "Ubuntu"
    os_version: "20.04"
    ansible_facts:
      phân phối: "Ubuntu"
      phân phối_file_parsed: đúng
      distribution_file_path: "/etc/os-release"
      phân phối_file_variety: "Debian"
      phân phối_major_version: "20"
      phân phối_phát hành: "tiêu điểm"
      phân phối_version: "20.04"

  nhiệm vụ:
  - gỡ lỗi:
      tin nhắn: >-
        {{ os_distribution }} {{ansible_facts['distribution'] }}
        {{ os_distribution != ansible_facts['distribution'] }}
  - gỡ lỗi:
      tin nhắn: >-
        {{ ansible_facts['distribution_version'] }} {{ os_version }}
        {{ ansible_facts['distribution_version'] là phiên bản(os_version, '<') }}

  - tên: "Kiểm tra ánh xạ Phiên bản hệ điều hành cơ sở sang phiên bản phân phối dự kiến ​​{{ os_version }}"
    gỡ lỗi:
      msg: "Tác vụ không thành công do tìm thấy phiên bản hệ điều hành không mong muốn: {{ ansible_facts['distribution'] }} {{ ansible_facts['distribution_version'] }} trên {{ inventory_hostname }}"
    khi nào:
      ansible_facts['distribution_version'] là phiên bản(os_version, '<') hoặc
      os_distribution != ansible_facts['distribution']

# Đầu ra

# NHIỆM VỤ [gỡ lỗi] ************************************************ *************************************************** ******************************
# được rồi: [máy chủ cục bộ] => {
# "thông điệp": "Ubuntu Ubuntu Sai"
# }
#
# NHIỆM VỤ [gỡ lỗi] ************************************************ *************************************************** ******************************
# được rồi: [máy chủ cục bộ] => {
# "msg": "18.04 20.04 True"
# }
#
# NHIỆM VỤ [Kiểm tra bản đồ Phiên bản hệ điều hành cơ sở tới phiên bản phân phối dự kiến ​​20.04] ************************************ ******************************
# được rồi: [máy chủ cục bộ] => {
# "msg": "Tác vụ không thành công do tìm thấy phiên bản hệ điều hành không mong muốn: Ubuntu 18.04 trên máy chủ cục bộ"
# }
#
# CHƠI [máy chủ cục bộ] ************************************************ *************************************************** ***************************
#
# NHIỆM VỤ [gỡ lỗi] ************************************************ *************************************************** ******************************
# được rồi: [máy chủ cục bộ] => {
# "thông điệp": "Ubuntu Ubuntu Sai"
# }
#
# NHIỆM VỤ [gỡ lỗi] ************************************************ *************************************************** ******************************
# được rồi: [máy chủ cục bộ] => {
# "msg": "20.04 20.04 Sai"
# }
#
# NHIỆM VỤ [Kiểm tra bản đồ Phiên bản hệ điều hành cơ sở tới phiên bản phân phối dự kiến ​​20.04] ************************************ ******************************
# bỏ qua: [localhost]
#

Tái bút, nếu bạn muốn biết lý do tại sao bạn chuyển từ AND sang OR khi phủ định, hãy xem De_Morgan's_laws

AhmFM avatar
lá cờ gr
đồng ý và tôi tin rằng đó là những gì tôi nghĩ đang làm? Tôi có một nút1 là TT và nút kia là TF. vì vậy tôi đã gặp lỗi đối với nút 2 in thông báo và bỏ qua nút 1 có TT không có thông báo. nhưng tôi bị bỏ qua và không có tin nhắn trong cả hai trường hợp
lá cờ in
Nếu bạn cần thêm một playbook ví dụ và đầu ra có thể hữu ích và bạn có thể sử dụng để kiểm tra thêm.

Đă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.