Điểm:0

Ansible thông báo lỗi toàn cầu khi một tác vụ không thành công trên tất cả các máy chủ

lá cờ cn
raw

Tôi cần thông báo lỗi khi một tác vụ không thành công trên tất cả các máy chủ. Ví dụ:

- ios_facts:
    tập hợp_subset: tối thiểu
  fail_after: "{{ansible_net_hostname }} chứa 123"

trong đó tất cả các tên máy chủ chứa 123 để nó kích hoạt tác vụ không thành công

- Thất bại:
    msg: tất cả các tên máy chủ chứa 123
  khi nào: xxxxx
Điểm:2
lá cờ br

For example, given the inventory for testing

shell> cat hosts
host1 ansible_net_hostname=host_123_A
host2 ansible_net_hostname=host_123_B
host3 ansible_net_hostname=host_123_C

The play below shows how to find the lists

- hosts: all
  gather_facts: false
  tasks:
    - debug:
        var: ansible_net_hostname
    - debug:
        msg: |
          All names: {{ _names }}
          Search names: {{ _search }}
      vars:
        _names: "{{ hostvars|json_query('*.ansible_net_hostname') }}"
        _search: "{{ _names|select('search', '123')|list }}"
      run_once: true

gives

TASK [debug] ***********************************************************
ok: [host1] => 
  ansible_net_hostname: host_123_A
ok: [host2] => 
  ansible_net_hostname: host_123_B
ok: [host3] => 
  ansible_net_hostname: host_123_C

TASK [debug] ***********************************************************
ok: [host1] => 
  msg: |-
    All names: ['host_123_A', 'host_123_B', 'host_123_C']
    Search names: ['host_123_A', 'host_123_B', 'host_123_C']

Compare the length of the lists

    - debug:
        msg: all of the hostnames contains 123
      vars:
        _names: "{{ hostvars|json_query('*.ansible_net_hostname') }}"
        _search: "{{ _names|select('search', '123')|list }}"
      when: _names|length == _search|length
      run_once: true

(Credit @Zeitounator for pointing to this option.)

The query above works if you target all hosts in the inventory. If you'd like to target a group of hosts use the special variable ansible_play_hosts_all and extract the variables from the hostvars. For example, given the inventory

shell> cat hosts
[test_123]
host[0001:1024]

[test_123:vars]
ansible_net_hostname=host_123_A

The play

- hosts: test_123
  gather_facts: false
  tasks:
    - debug:
        msg: |
          All names: {{ _names|length }}
          Search names: {{ _search|length }}
      vars:
        _names: "{{ ansible_play_hosts_all|
                    map('extract', hostvars, 'ansible_net_hostname')|
                    list }}"
        _search: "{{ _names|select('search', '123')|list }}"
      run_once: true

gives

TASK [debug] *****************************************************
ok: [host0001] => 
  msg: |-
    All names: 1024
    Search names: 1024

To evaluate the condition compare the length of the lists as before.

lá cờ cn
raw
Cảm ơn bạn ! Tôi có một trường hợp khác mà tôi cần chọn các dữ kiện còn trống, làm thế nào tôi có thể thực hiện việc này? ` _search: "{{ _names|select('search', '')|list }}"`
Zeitounator avatar
lá cờ fr
Tôi nghĩ rằng OP muốn biết liệu tất cả các tên máy chủ ** trong vòng lặp phát trên máy chủ ** có vượt qua bài kiểm tra hay không. Câu trả lời của bạn là xem xét toàn bộ khoảng không quảng cáo bất kể mục tiêu hiện tại đang chơi là gì.
Zeitounator avatar
lá cờ fr
@raw các câu hỏi khác sẽ xuất hiện trong một bài đăng mới hoặc ít nhất là trong bản chỉnh sửa cho câu hỏi hiện tại của bạn, không phải trong một nhận xét. Cảm ơn.
lá cờ br
@Zeitounator: Không có máy chủ nào khác trong *hostvars* ngoại trừ tất cả máy chủ trong vở kịch.
Zeitounator avatar
lá cờ fr
@VladimirBotka Tôi phải không đồng ý với điều cuối cùng này: https://gist.github.com/zeitounator/3a3ac34b96ccd49998523adf7da3e1cd vì bạn sẽ thấy tôi đã tạo một vở kịch nhắm mục tiêu đến một nhóm cụ thể và các máy chủ chứa tất cả các mục nhập cho tất cả các mục tiêu trong toàn bộ khoảng không quảng cáo. Trong khi đó, dường như tôi đã hiểu sai câu hỏi vì điều đó dường như vẫn thực hiện được công việc;)
lá cờ br
@Zeitounator. Tôi hiểu rồi. Tôi đã cập nhật câu trả lời. Cảm ơn bạn.

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