Điểm:0

Lỗi WinRM Ansible khi thu thập dữ kiện winrm: Bạn không thể gọi một phương thức trên thông báo biểu thức có giá trị null

lá cờ uz

Tôi có một người trong phòng thí nghiệm trong một máy chủ vCenter, phòng thí nghiệm bao gồm 5 máy chủ windows và 3 máy chủ windows 10 Mỗi lần tôi chạy playbook (bất kỳ playbook nào) chống lại phòng thí nghiệm này, 2 lỗi sẽ xuất hiện trong NHIỆM VỤ [Thu thập thông tin]:

[CẢNH BÁO]: Lỗi khi thu thập dữ kiện winrm: Bạn không thể gọi phương thức trên biểu thức có giá trị null. Tại dòng:15 ký tự:17 + ...
$ansibleFacts.ansible_win_rm_certificate_expires = $_.Không ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~ + CategoryInfo :  
InvalidOperation: (:) [], RuntimeException + FullQualifiedErrorId : InvokeMethodOnNull tại <ScriptBlock>, <Không có tệp>: dòng 15 tại <ScriptBlock>, <Không có tệp>: dòng  
13
[CẢNH BÁO]: Lỗi khi thu thập thông tin thực tế: Test-Path: Truy cập bị từ chối Tại dòng:10 char:17 + Test-Path -LiteralPath $facterPath +
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (\Domain.com\Sys... rtup\facter.exe:String) [Đường dẫn thử nghiệm], Ngoại lệ truy cập trái phép  
+ FullQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.TestPathCommand at <ScriptBlock>, <No file>: dòng 10 tại <ScriptBlock>, <No 
tệp>: dòng 3

Nhật ký đầy đủ:

NHIỆM VỤ [Thu thập thông tin] ********************************************* *************************************************** *************************************************** *** đường dẫn tác vụ: /ansible/playbooks/copy_r10_files.yml:2
chuyển hướng (loại: mô-đun) ansible.buildin.setup sang ansible.windows.setup
Sử dụng tệp mô-đun /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
Đường ống được kích hoạt.
<vm1.domain.com> THIẾT LẬP KẾT NỐI WINRM CHO NGƯỜI DÙNG: Tên miền\hiddai trên CỔNG 5985 ĐẾN vm1.domain.com
chuyển hướng (loại: mô-đun) ansible.buildin.setup sang ansible.windows.setup
Sử dụng tệp mô-đun /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
Đường ống được kích hoạt.
<vm2.domain.com> THIẾT LẬP KẾT NỐI WINRM CHO NGƯỜI DÙNG: DOMAIN\hiddai trên CỔNG 5985 ĐẾN vm1.domain.com
chuyển hướng (loại: mô-đun) ansible.buildin.setup sang ansible.windows.setup
EXEC (thông qua trình bao bọc đường ống)
Sử dụng tệp mô-đun /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
Đường ống được kích hoạt.
<vm3.domain.com> THIẾT LẬP KẾT NỐI WINRM CHO NGƯỜI DÙNG: DOMAIN\hiddai trên CỔNG 5985 ĐẾN srraalabjhqdb.r10.local
chuyển hướng (loại: mô-đun) ansible.buildin.setup sang ansible.windows.setup
Sử dụng tệp mô-đun /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
Đường ống được kích hoạt.
EXEC (thông qua trình bao bọc đường ống)
<vm4.domain.com> THIẾT LẬP KẾT NỐI WINRM CHO NGƯỜI DÙNG: DOMAIN\hiddai trên CỔNG 5985 ĐẾN vm4.domain.com
chuyển hướng (loại: mô-đun) ansible.buildin.setup sang ansible.windows.setup
EXEC (thông qua trình bao bọc đường ống)
Sử dụng tệp mô-đun /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
Đường ống được kích hoạt.
<vm5.domain.com> THIẾT LẬP KẾT NỐI WINRM CHO NGƯỜI DÙNG: DOMAIN\hiddai trên CỔNG 5985 ĐẾN vm5.domain.com
EXEC (thông qua trình bao bọc đường ống)
EXEC (thông qua trình bao bọc đường ống)
[CẢNH BÁO]: Lỗi khi thu thập dữ kiện winrm: Bạn không thể gọi phương thức trên biểu thức có giá trị null. Tại dòng:15 ký tự:17 + ...
$ansibleFacts.ansible_win_rm_certificate_expires = $_.Không ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~ + CategoryInfo :  
InvalidOperation: (:) [], RuntimeException + FullQualifiedErrorId : InvokeMethodOnNull tại <ScriptBlock>, <Không có tệp>: dòng 15 tại <ScriptBlock>, <Không có tệp>: dòng  
13
được rồi: [vm3.domain.com]
chuyển hướng (loại: mô-đun) ansible.buildin.setup sang ansible.windows.setup
Sử dụng tệp mô-đun /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
Đường ống được kích hoạt.
<vm7.domain.com> THIẾT LẬP KẾT NỐI WINRM CHO NGƯỜI DÙNG: DOMAIN\hiddai trên CỔNG 5985 ĐẾN vm7.domain.com
được rồi: [vm4.domain.com]
chuyển hướng (loại: mô-đun) ansible.buildin.setup sang ansible.windows.setup
Sử dụng tệp mô-đun /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
Đường ống được kích hoạt.
<vm6.domain.com> THIẾT LẬP KẾT NỐI WINRM CHO NGƯỜI DÙNG: DOMAIN\hiddai trên CỔNG 5985 ĐẾN vm6.domain.com
EXEC (thông qua trình bao bọc đường ống)
được rồi: [vm1.domain.com]
được rồi: [vm2.domain.com]
chuyển hướng (loại: mô-đun) ansible.buildin.setup sang ansible.windows.setup
Sử dụng tệp mô-đun /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
Đường ống được kích hoạt.
<vm8.domain.com> THIẾT LẬP KẾT NỐI WINRM CHO NGƯỜI DÙNG: DOMAIN\hiddai trên CỔNG 5985 ĐẾN vm8.domain.com
EXEC (thông qua trình bao bọc đường ống)
EXEC (thông qua trình bao bọc đường ống)
được rồi: [vm5.domain.com]
được rồi: [vm7.domain.com]
[CẢNH BÁO]: Lỗi khi thu thập thông tin thực tế: Test-Path: Truy cập bị từ chối Tại dòng:10 char:17 + Test-Path -LiteralPath $facterPath +
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (\R10.local\Sys... rtup\facter.exe:String) [Đường dẫn thử nghiệm], Ngoại lệ truy cập trái phép  
+ FullQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.TestPathCommand at <ScriptBlock>, <No file>: dòng 10 tại <ScriptBlock>, <No 
tệp>: dòng 3
được rồi: [vm8.domain.com]
được rồi: [vm6.domain.com]
META: trình xử lý đã chạy

Dockerfile của tôi là

TỪ xu:8

NGƯỜI DÙNG gốc

CHẠY yum kiểm tra cập nhật -y; \
    cập nhật yum -y; \
    yum cài đặt -y epel-phát hành; \
    yum cài đặt -y gcc; \
    yum cài đặt -y libffi-devel; \
    yum cài đặt -y wget; \
    yum cài đặt -y git; \
    yum cài đặt -y python3; \
    dnf cài đặt -y python3-setuptools; \
    cài đặt pip3 --upgrade setuptools; \
    yum cài đặt -y python3-pip; \
    cài đặt pip3 --nâng cấp pip; \
    pip3 cài đặt pywinrm; \
    pip3 cài đặt PyVmomi; \
    # Ansible 2.11.x
    cài đặt pip3 ansible; \
    # xanh
    wget -q https://raw.githubusercontent.com/ansible-collections/azure/dev/requirements-azure.txt; \
    cài đặt pip3 -r yêu cầu-azure.txt; \
    rm yêu cầu-azure.txt; \
    bộ sưu tập ansible-galaxy cài đặt azure.azcollection; \
    # Bộ sưu tập bao gồm các mô-đun và plugin VMware được hỗ trợ bởi 
    # Cộng đồng VMware Ansible giúp quản lý cơ sở hạ tầng VMware
    cài đặt pip3 -r ~/.ansible/collections/ansible_collections/community/vmware/requirements.txt; \
    bộ sưu tập ansible-galaxy cài đặt cộng đồng.vmware; \
    # Tải xuống tệp từ HTTP, HTTPS hoặc FTP tới nút
    bộ sưu tập ansible-galaxy cài đặt ansible.windows; 
    # chmod -R o-w /ansible;
    
CMD [ "/usr/sbin/init" ]

Tệp all.yml của tôi bao gồm các chi tiết winrm

---
# Chi tiết giao thức WinRM
ansible_user: DOMAIN\hiddai
ansible_password: F01o3O4
ansible_connection: winrm
ansible_port: 5985
ansible_winrm_scheme: http
ansible_winrm_server_cert_validation: bỏ qua
ansible_winrm_transport: ntlm
ansible_winrm_read_timeout_sec: 60
ansible_winrm_operation_timeout_sec: 58

liên quan đến LỖI 1: kiểm tra winrm ở một trong các máy trong miền cho thấy:

C:\Users\qa>winrm lấy winrm/config
cấu hình
    MaxEnvelopeSizekb = 500
    Thời gian chờ tối đa = 60000
    MaxBatchItems = 32000
    MaxProviderRequests = 4294967295
    Khách hàng
        Độ trễ mạng = 5000
        Tiền tố URL = wsman
        AllowUnencrypted = true [Source="GPO"]
        xác thực
            Cơ bản = true [Nguồn="GPO"]
            Tiêu hóa = đúng
            Kerberos = đúng
            Đàm phán = đúng
            Giấy chứng nhận = đúng
            CredSSP = true [Nguồn="GPO"]
        Cổng mặc định
            HTTP = 5985
            HTTPS = 5986
        Trustedhosts [Nguồn="GPO"]
    Dịch vụ
        RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW; ;;WD)
        MaxConcurrentOperations = 4294967295
        MaxConcurrentOperationsPerUser = 1500
        EnumerationTimeoutms = 240000
        Kết nối tối đa = 300
        MaxPacketRetrievalTimeSeconds = 120
        AllowUnencrypted = true [Source="GPO"]
        xác thực
            Cơ bản = true [Nguồn="GPO"]
            Kerberos = đúng
            Đàm phán = đúng
            Giấy chứng nhận = sai
            CredSSP = true [Nguồn="GPO"]
            CbtHardeningLevel = Thoải mái
        Cổng mặc định
            HTTP = 5985
            HTTPS = 5986
        IPv4Filter = * [Source="GPO"]
        IPv6Filter = * [Source="GPO"]
        EnableCompatibilityHttpListener = true [Source="GPO"]
        EnableCompatibilityHttpsListener = true [Source="GPO"]
        Giấy Chứng NhậnDấu Tay
        AllowRemoteAccess = true [Source="GPO"]
    người chiến thắng
        AllowRemoteShellAccess = true
        Thời gian chờ nhàn rỗi = 7200000
        Người dùng đồng thời tối đa = 2147483647
        MaxShellRunTime = 2147483647
        MaxProcessesPerShell = 2147483647
        MaxMemoryPerShellMB = 2147483647
        MaxShellsPerUser = 2147483647

Phiên bản vùng chứa ansible của tôi là:

[root@ansible ansible]# ansible --version
[CẢNH BÁO KHÔNG DÙNG]: Ansible sẽ yêu cầu Python 3.8 trở lên trên bộ điều khiển bắt đầu với Ansible 2.12. Phiên bản hiện tại: 3.6.8 (mặc định, ngày 19 tháng 3 năm 2021, 05:13:41) [GCC
 8.4.1 20200928 (Mũ đỏ 8.4.1-1)]. Tính năng này sẽ bị xóa khỏi ansible-core trong phiên bản 2.12. Cảnh báo khấu hao có thể bị vô hiệu hóa bằng cách cài đặt 
deprecation_warnings=Sai trong ansible.cfg.
ansible [lõi 2.11.3] 
  tệp cấu hình = /ansible/ansible.cfg
  đường dẫn tìm kiếm mô-đun được định cấu hình = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  vị trí mô-đun python ansible = /usr/local/lib/python3.6/site-packages/ansible
  vị trí bộ sưu tập ansible = /root/.ansible/collections:/usr/share/ansible/collections
  vị trí thực thi = /usr/local/bin/ansible
  phiên bản python = 3.6.8 (mặc định, ngày 19 tháng 3 năm 2021, 05:13:41) [GCC 8.4.1 20200928 (Red Hat 8.4.1-1)]
  phiên bản jinja = 3.0.1
  libyaml = Đúng

Làm thế nào tôi có thể giải quyết những lỗi đó?

Điểm:1
lá cờ jo

Lỗi đầu tiên: bạn có trình nghe winrm https (cổng tcp 5986) được định cấu hình bằng chứng chỉ không? Tôi đoán là nó không thể gọi phương thức đó vì nó không thể tìm thấy bất kỳ chứng chỉ nào.

Lỗi thứ hai: có vẻ như bạn đang nhận được lỗi từ chối truy cập khi cố nhảy hai bước tới đường dẫn UNC. 1) Không làm điều này hoặc 2) nếu được yêu cầu, bạn sẽ cần định cấu hình ủy quyền thông tin xác thực (theo tác vụ, mỗi lần phát hoặc trong kết nối). Bạn có thể ủy quyền thông tin đăng nhập CredSSP hoặc Kerberos (nhìn bề ngoài, bạn chắc chắn sẽ cần nhiều mô-đun python hơn nếu sử dụng Kerberos.

Đọc về ansible, windows và kerberos tại đây: https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html

lá cờ uz
Cảm ơn, theo câu trả lời của bạn, tôi thêm thông tin bổ sung. ERR1+2 rõ ràng khi sử dụng Dockerfile thứ 2. ERR2 - Có vẻ như khi thu thập thông tin thực tế, một PowerShell cụ thể đang cố gắng kết nối với bộ điều khiển miền (đường dẫn ```\domain.com\sys...``` bên trong lỗi). Tôi đã kiểm tra hầu hết các gói trong danh sách yêu cầu - chúng cũng được tìm thấy trong bộ chứa Docker đầu tiên. Tôi có thiếu thứ gì đó trong cấu hình Dockerfile của mình không?
Semicolon avatar
lá cờ jo
Lỗi 1 hoàn toàn không bị ảnh hưởng bởi tệp docker của bạn - Lỗi 1 hoàn toàn là về chứng chỉ nào được định cấu hình trên trình nghe winrm trên máy tính windows mà bạn đang quản lý.
Semicolon avatar
lá cờ jo
Lỗi 2 không bị ảnh hưởng bởi bất kỳ thứ gì trong dockerfile của bạn - đặc biệt là sau khi tôi nói rằng bạn cần sử dụng CredSSP hoặc KERBEROS cho các bước nhảy kép, kết nối winrm của bạn VẪN sử dụng xác thực ntlm
Semicolon avatar
lá cờ jo
Một câu hỏi hay hơn là tại sao ansible lại cố gắng nhấn vào đường dẫn UNC để gọi "facter.exe" Bạn có bất kỳ đường dẫn hồ sơ hoặc thư mục được chuyển hướng nào được định cấu hình cho tài khoản người dùng đó trên (các) máy Windows không? Tôi sẽ sử dụng tài khoản RIÊNG BIỆT hơn tài khoản mà bạn có thể đã sử dụng để đăng nhập tương tác.
Semicolon avatar
lá cờ jo
Ngoài ra - có lẽ cần phải thoát ra khỏi suy nghĩ "vấn đề dockerfile của tôi ở đâu". Đây là những sự cố Windows cần được giải quyết/điều tra. có lẽ sẽ không "docker" theo cách của bạn ra khỏi cái này.

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