Điểm:0

khớp giá trị item.x với inventory_hostname

lá cờ cn

Tôi cần một số trợ giúp để so khớp inventory_hostname với item.host (từ vars_file). Cách tốt nhất để làm điều đó là gì? Tôi không thể tìm ra điều này vì tôi là người mới.

Yêu cầu của tôi là:

  • Tôi phải gọi tất cả các máy chủ từ tệp kiểm kê.

  • Tôi phải khớp item.host với ansible_inventory, nếu nó tồn tại thì hãy chạy lệnh shell trên các máy chủ khớp với tất cả item.host rồi thoát.

  • filelist.yml là một tệp động thay đổi hàng ngày, tất cả các máy chủ đều tồn tại trong kho nhưng tôi chỉ muốn tận dụng những máy chủ có trong tệp.

Tôi có tệp list.yml chứa thông tin về tên máy chủ, đĩa và phiên bản

$ danh sách mèo.yml
---
danh sách:
  - máy chủ: máy chủ1
    đĩa: đĩa0
    hệ điều hành: 7

  - máy chủ: máy chủ2
    đĩa: đĩa4
    hệ điều hành: 7

  - máy chủ: lhost6
    đĩa: hdisk7
    hệ điều hành: 7
---

Trong playbook, tôi đã cố gắng khớp giá trị nhưng không gặp may.

---
- tên: Vở kịch của tôi   
  máy chủ: tất cả   
  vars_file: 
    - danh sách.yml   
  nhiệm vụ:
   - name: Xóa tệp khỏi máy khách
     vỏ: "rm -f /tmp/me"
     khi nào:
       - "('item.host' trong inventory_hostname) và (ansible_distribution_version == 'item.os')"
     vòng lặp: "{{danh sách}}"
     đăng ký: fileopt
   - gỡ lỗi: var=fileopt
----

Vui lòng đề xuất một giải pháp có thể giải quyết vấn đề này.

Điểm:2
lá cờ br

Ví dụ, với hàng tồn kho

vỏ> vật chủ mèo
máy chủ01
máy chủ02
máy chủ03

và danh sách

danh sách:
  - máy chủ: máy chủ01
    đĩa: đĩa0
    hệ điều hành: 13.0
  - máy chủ: máy chủ02
    đĩa: đĩa4
    hệ điều hành: 13.0
  - chủ nhà: host06
    đĩa: hdisk7
    hệ điều hành: 13.0

Tạo danh sách các máy chủ được phép

my_hosts: "{{list|map(attribute='host')|list }}"

cho

my_host:
  - máy chủ01
  - máy chủ02
  - máy chủ06

Tiếp theo, tạo từ điển các máy chủ được phép và phiên bản hệ điều hành

my_os: "{{list|items2dict(key_name='host', value_name='os') }}"

cho

  my_os:
    máy chủ01: 13.0
    máy chủ02: 13.0
    máy chủ06: 13.0

Bây giờ, các tác vụ bên dưới xóa tệp có điều kiện và hiển thị kết quả đã đăng ký

    - name: Xóa tệp khỏi máy khách
      tập tin:
        trạng thái: vắng mặt
        đường dẫn: /tmp/tôi
      khi nào:
        -ventory_hostname trong my_hosts
        - ansible_distribution_version ==
          my_os[inventory_hostname]|default('None')|string
      đăng ký: fileopt
    - gỡ lỗi:
        var: fileopt

cho

NHIỆM VỤ [Xóa tệp khỏi máy khách] ********************************************* **
bỏ qua: [host03]
được rồi: [máy chủ02]
được rồi: [máy chủ01]

NHIỆM VỤ [gỡ lỗi] ************************************************ ******************
được rồi: [máy chủ01] => 
  tập tin:
    đã thay đổi: sai
    thất bại: sai
    đường dẫn: /tmp/tôi
    trạng thái: vắng mặt
được rồi: [máy chủ02] => 
  tập tin:
    đã thay đổi: sai
    thất bại: sai
    đường dẫn: /tmp/tôi
    trạng thái: vắng mặt
được rồi: [host03] => 
  tập tin:
    đã thay đổi: sai
    Skip_reason: Kết quả có điều kiện là Sai
    bỏ qua: đúng

Như mong đợi, máy chủ03 cái bị thiếu trong danh sách đã bị bỏ qua.


Theo tùy chọn, việc tạo một nhóm động có thể hiệu quả hơn nếu danh sách các máy chủ được phép nhỏ hơn nhiều so với tất cả các máy chủ. Ví dụ: tạo một nhóm máy chủ được phép trong lần chơi đầu tiên và sử dụng nó trong lần chơi thứ hai

- tên: Tạo nhóm my_hosts
  máy chủ: tất cả
  thu thập_sự thật: đúng
  lọ:
    danh sách:
      - máy chủ: máy chủ01
        đĩa: đĩa0
        hệ điều hành: 13.0
      - máy chủ: máy chủ02
        đĩa: đĩa4
        hệ điều hành: 13.0
      - chủ nhà: host06
        đĩa: hdisk7
        hệ điều hành: 13.0
    my_hosts: "{{list|map(attribute='host')|list }}"
    my_os: "{{list|items2dict(key_name='host', value_name='os') }}"
  nhiệm vụ:
    - bộ_thực tế:
        _my_os: "{{ ansible_distribution_version ==
                    my_os[inventory_hostname]|default('None')|string }}"
    - tên: Tạo nhóm my_hosts
      add_host:
        tên: "{{mục}}"
        nhóm: my_hosts
      vòng lặp: "{{ hostvars|dict2items|
                selectattr('key', 'in', my_hosts)|
                selectattr('value._my_os')|
                bản đồ(thuộc tính='key')|
                danh sách }}"
      run_once: đúng

- tên: Xóa tệp khỏi my_hosts
  máy chủ: my_hosts
  thu thập_facts: sai
  nhiệm vụ:
    - name: Xóa tệp khỏi máy khách
      tập tin:
        trạng thái: vắng mặt
        đường dẫn: /tmp/tôi
      đăng ký: fileopt
    - gỡ lỗi:
        var: fileopt

cho

CHƠI [Tạo nhóm my_hosts] ***************************************

NHIỆM VỤ [Thu thập thông tin] *********************************************
được rồi: [máy chủ03]
được rồi: [máy chủ01]
được rồi: [máy chủ02]

NHIỆM VỤ [set_fact] ************************************************ ******
được rồi: [máy chủ03]
được rồi: [máy chủ02]
được rồi: [máy chủ01]

NHIỆM VỤ [Tạo nhóm my_hosts] ***************************************
được rồi: [host01] => (mục=host01)
được rồi: [host01] => (mục=host02)

CHƠI [Xóa tệp khỏi my_hosts] ************************************

NHIỆM VỤ [Xóa tệp khỏi máy khách] ***************************************
được rồi: [máy chủ01]
được rồi: [máy chủ02]

NHIỆM VỤ [gỡ lỗi] ************************************************ *********
được rồi: [máy chủ01] => 
  tập tin:
    đã thay đổi: sai
    thất bại: sai
    đường dẫn: /tmp/tôi
    trạng thái: vắng mặt
được rồi: [máy chủ02] => 
  tập tin:
    đã thay đổi: sai
    thất bại: sai
    đường dẫn: /tmp/tôi
    trạng thái: vắng mặt

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