Score:0

ข้อผิดพลาด WinRM Ansible เมื่อรวบรวมข้อเท็จจริง winrm: คุณไม่สามารถเรียกใช้เมธอดในข้อความนิพจน์ที่มีค่าเป็น null

ธง uz

ฉันมีห้องปฏิบัติการในเซิร์ฟเวอร์ vCenter ห้องปฏิบัติการประกอบด้วยเซิร์ฟเวอร์ windows 5 เครื่องและ windows 10 3 เครื่อง ทุกครั้งที่ฉันรัน playbook (playbook ใดๆ) กับแล็บนี้ ข้อผิดพลาด 2 ข้อจะปรากฏขึ้นในงาน [รวบรวมข้อเท็จจริง]:

[คำเตือน]: เกิดข้อผิดพลาดเมื่อรวบรวมข้อเท็จจริงของ winrm: คุณไม่สามารถเรียกใช้เมธอดในนิพจน์ที่มีค่า Null ได้ ที่บรรทัด:15 ถ่าน:17 + ...
$ansibleFacts.ansible_win_rm_certificate_expires = $_.ไม่ ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo :  
InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull ที่ <ScriptBlock>, <ไม่มีไฟล์>: บรรทัดที่ 15 ที่ <ScriptBlock>, <ไม่มีไฟล์>: บรรทัด  
13
[คำเตือน]: ข้อผิดพลาดเมื่อรวบรวมข้อเท็จจริงแฟกเตอร์: เส้นทางทดสอบ : การเข้าถึงถูกปฏิเสธที่บรรทัด:10 ตัวอักษร:17 + เส้นทางทดสอบ -LiteralPath $facterPath +
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (\Domain.com\Sys... rtup\facter.exe:String) [เส้นทางทดสอบ], UnauthorizedAccessException  
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.TestPathCommand ที่ <ScriptBlock>, <ไม่มีไฟล์>: บรรทัด 10 ที่ <ScriptBlock>, <ไม่ 
ไฟล์>: บรรทัดที่ 3

บันทึกแบบเต็ม:

TASK [รวบรวมข้อเท็จจริง] ********************************************* ************************************************** ************************************************** ***เส้นทางงาน: /ansible/playbooks/copy_r10_files.yml:2
การเปลี่ยนเส้นทาง (ประเภท: โมดูล) ansible.buildin.setup ไปยัง ansible.windows.setup
การใช้ไฟล์โมดูล /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
เปิดใช้งานการวางท่อ
<vm1.domain.com> สร้างการเชื่อมต่อ WINRM สำหรับผู้ใช้: Domain\hiddai บน PORT 5985 ถึง vm1.domain.com
การเปลี่ยนเส้นทาง (ประเภท: โมดูล) ansible.buildin.setup ไปยัง ansible.windows.setup
การใช้ไฟล์โมดูล /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
เปิดใช้งานการวางท่อ
<vm2.domain.com> สร้างการเชื่อมต่อ WINRM สำหรับผู้ใช้: DOMAIN\hiddai บน PORT 5985 ถึง vm1.domain.com
การเปลี่ยนเส้นทาง (ประเภท: โมดูล) ansible.buildin.setup ไปยัง ansible.windows.setup
EXEC (ผ่านตัวห่อหุ้มไปป์ไลน์)
การใช้ไฟล์โมดูล /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
เปิดใช้งานการวางท่อ
<vm3.domain.com> สร้างการเชื่อมต่อ WINRM สำหรับผู้ใช้: DOMAIN\hiddai บน PORT 5985 ถึง srraalabjhqdb.r10.local
การเปลี่ยนเส้นทาง (ประเภท: โมดูล) ansible.buildin.setup ไปยัง ansible.windows.setup
การใช้ไฟล์โมดูล /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
เปิดใช้งานการวางท่อ
EXEC (ผ่านตัวห่อหุ้มไปป์ไลน์)
<vm4.domain.com> สร้างการเชื่อมต่อ WINRM สำหรับผู้ใช้: DOMAIN\hiddai บน PORT 5985 ถึง vm4.domain.com
การเปลี่ยนเส้นทาง (ประเภท: โมดูล) ansible.buildin.setup ไปยัง ansible.windows.setup
EXEC (ผ่านตัวห่อหุ้มไปป์ไลน์)
การใช้ไฟล์โมดูล /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
เปิดใช้งานการวางท่อ
<vm5.domain.com> สร้างการเชื่อมต่อ WINRM สำหรับผู้ใช้: DOMAIN\hiddai บน PORT 5985 ถึง vm5.domain.com
EXEC (ผ่านตัวห่อหุ้มไปป์ไลน์)
EXEC (ผ่านตัวห่อหุ้มไปป์ไลน์)
[คำเตือน]: เกิดข้อผิดพลาดเมื่อรวบรวมข้อเท็จจริงของ winrm: คุณไม่สามารถเรียกใช้เมธอดในนิพจน์ที่มีค่า Null ได้ ที่บรรทัด:15 ถ่าน:17 + ...
$ansibleFacts.ansible_win_rm_certificate_expires = $_.ไม่ ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo :  
InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull ที่ <ScriptBlock>, <ไม่มีไฟล์>: บรรทัดที่ 15 ที่ <ScriptBlock>, <ไม่มีไฟล์>: บรรทัด  
13
ตกลง: [vm3.domain.com]
การเปลี่ยนเส้นทาง (ประเภท: โมดูล) ansible.buildin.setup ไปยัง ansible.windows.setup
การใช้ไฟล์โมดูล /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
เปิดใช้งานการวางท่อ
<vm7.domain.com> สร้างการเชื่อมต่อ WINRM สำหรับผู้ใช้: DOMAIN\hiddai บน PORT 5985 ถึง vm7.domain.com
ตกลง: [vm4.domain.com]
การเปลี่ยนเส้นทาง (ประเภท: โมดูล) ansible.buildin.setup ไปยัง ansible.windows.setup
การใช้ไฟล์โมดูล /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
เปิดใช้งานการวางท่อ
<vm6.domain.com> สร้างการเชื่อมต่อ WINRM สำหรับผู้ใช้: DOMAIN\hiddai บน PORT 5985 ถึง vm6.domain.com
EXEC (ผ่านตัวห่อหุ้มไปป์ไลน์)
ตกลง: [vm1.domain.com]
ตกลง: [vm2.domain.com]
การเปลี่ยนเส้นทาง (ประเภท: โมดูล) ansible.buildin.setup ไปยัง ansible.windows.setup
การใช้ไฟล์โมดูล /root/.ansible/collections/ansible_collections/ansible/windows/plugins/modules/setup.ps1
เปิดใช้งานการวางท่อ
<vm8.domain.com> สร้างการเชื่อมต่อ WINRM สำหรับผู้ใช้: DOMAIN\hiddai บน PORT 5985 ถึง vm8.domain.com
EXEC (ผ่านตัวห่อหุ้มไปป์ไลน์)
EXEC (ผ่านตัวห่อหุ้มไปป์ไลน์)
ตกลง: [vm5.domain.com]
ตกลง: [vm7.domain.com]
[คำเตือน]: ข้อผิดพลาดเมื่อรวบรวมข้อเท็จจริงแฟกเตอร์: เส้นทางทดสอบ : การเข้าถึงถูกปฏิเสธที่บรรทัด:10 ตัวอักษร:17 + เส้นทางทดสอบ -LiteralPath $facterPath +
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (\R10.local\Sys... rtup\facter.exe:String) [เส้นทางทดสอบ], UnauthorizedAccessException  
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.TestPathCommand ที่ <ScriptBlock>, <ไม่มีไฟล์>: บรรทัด 10 ที่ <ScriptBlock>, <ไม่ 
ไฟล์>: บรรทัดที่ 3
ตกลง: [vm8.domain.com]
ตกลง: [vm6.domain.com]
META: ตัวจัดการที่รัน

ไฟล์ Docker ของฉันคือ

จาก centos:8

รากผู้ใช้

RUN yum ตรวจสอบการอัปเดต -y; \
    ยำปรับปรุง -y; \
    ยำติดตั้ง -y epel-release; \
    ยำติดตั้ง -y gcc; \
    ยำติดตั้ง -y libffi-devel; \
    ยำติดตั้ง -y wget; \
    ยำติดตั้ง -y git; \
    ยำติดตั้ง -y python3; \
    dnf ติดตั้ง -y python3-setuptools; \
    ติดตั้ง pip3 --upgrade setuptools; \
    ยำติดตั้ง -y python3-pip; \
    pip3 ติดตั้ง -- อัพเกรด pip; \
    pip3 ติดตั้ง pywinrm; \
    pip3 ติดตั้ง PyVmomi; \
    # Ansible 2.11.x
    pip3 ติดตั้งได้; \
    #อาซัวร์
    wget -q https://raw.githubusercontent.com/ansible-collections/azure/dev/requirements-azure.txt; \
    pip3 ติดตั้ง -r ความต้องการ -azure.txt; \
    ข้อกำหนด rm-azure.txt; \
    คอลเลกชัน ansible-galaxy ติดตั้ง azure.azcollection; \
    # คอลเลกชันประกอบด้วยโมดูลและปลั๊กอิน VMware ที่สนับสนุนโดย 
    # Ansible VMware community เพื่อช่วยในการจัดการโครงสร้างพื้นฐานของ VMware
    pip3 ติดตั้ง -r ~/.ansible/collections/ansible_collections/community/vmware/requirements.txt; \
    คอลเลกชัน ansible-galaxy ติดตั้ง community.vmware; \
    # ดาวน์โหลดไฟล์จาก HTTP, HTTPS หรือ FTP ไปยังโหนด
    คอลเลกชัน ansible-galaxy ติดตั้ง ansible.windows; 
    # chmod -R o-w /ansible;
    
CMD [ "/usr/sbin/init" ]

ไฟล์ all.yml ของฉันมีรายละเอียด winrm

---
# รายละเอียดโปรโตคอล WinRM
ansible_user: DOMAIN\hiddai
ansible_password: F01o3O4
ansible_connection: winrm
ansible_port: 5985
ansible_winrm_scheme: http
ansible_winrm_server_cert_validation: ละเว้น
ansible_winrm_transport: ntlm
ansible_winrm_read_timeout_sec: 60
ansible_winrm_operation_timeout_sec: 58

คำนึงถึงข้อผิดพลาด 1: การตรวจสอบ winrm ในเครื่องใดเครื่องหนึ่งในโดเมนแสดง:

C:\Users\qa>winrm รับ winrm/config
กำหนดค่า
    MaxEnvelopeSizekb = 500
    MaxTimeoutms = 60,000
    MaxBatchItems = 32,000
    MaxProviderRequests = 4294967295
    ลูกค้า
        ความล่าช้าของเครือข่าย = 5,000
        URLPrefix = wsman
        AllowUnencrypted = จริง [แหล่งที่มา = "GPO"]
        รับรองความถูกต้อง
            พื้นฐาน = จริง [ที่มา = "GPO"]
            สรุป = จริง
            Kerberos = จริง
            เจรจา = จริง
            ใบรับรอง = จริง
            CredSSP = จริง [ที่มา = "GPO"]
        พอร์ตเริ่มต้น
            HTTP = 5985
            HTTPS = 5986
        TrustedHosts [ที่มา = "GPO"]
    บริการ
        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
        การเชื่อมต่อสูงสุด = 300
        MaxPacketRetrievalTimeSeconds = 120
        AllowUnencrypted = จริง [แหล่งที่มา = "GPO"]
        รับรองความถูกต้อง
            พื้นฐาน = จริง [ที่มา = "GPO"]
            Kerberos = จริง
            เจรจา = จริง
            ใบรับรอง = เท็จ
            CredSSP = จริง [ที่มา = "GPO"]
            CbtHardeningLevel = ผ่อนคลาย
        พอร์ตเริ่มต้น
            HTTP = 5985
            HTTPS = 5986
        IPv4Filter = * [ที่มา = "GPO"]
        IPv6Filter = * [ที่มา = "GPO"]
        EnableCompatibilityHttpListener = จริง [Source="GPO"]
        EnableCompatibilityHttpsListener = จริง [Source="GPO"]
        ใบรับรองนิ้วหัวแม่มือ
        AllowRemoteAccess = จริง [แหล่งที่มา = "GPO"]
    ผู้ชนะ
        AllowRemoteShellAccess = จริง
        IdleTimeout = 7200000
        MaxConcurrentUsers = 2147483647
        MaxShellRunTime = 2147483647
        MaxProcessesPerShell = 2147483647
        MaxMemoryPerShellMB = 2147483647
        MaxShellsPerUser = 2147483647

รุ่นคอนเทนเนอร์ ansible ของฉันคือ:

[root@ansible ansible]# ansible --version
[คำเตือนการปฏิเสธ]: Ansible จะต้องใช้ Python 3.8 หรือใหม่กว่าบนคอนโทรลเลอร์ที่เริ่มต้นด้วย Ansible 2.12 เวอร์ชันปัจจุบัน: 3.6.8 (ค่าเริ่มต้น 19 มี.ค. 2021, 05:13:41 น.) [GCC
 8.4.1 20200928 (หมวกแดง 8.4.1-1)]. คุณลักษณะนี้จะถูกลบออกจาก ansible-core ในเวอร์ชัน 2.12 คำเตือนการเลิกใช้งานสามารถปิดใช้งานได้โดยการตั้งค่า 
deprecation_warnings=เท็จ ใน ansible.cfg
ใช้งานได้ [core 2.11.3] 
  ไฟล์ปรับแต่ง = /ansible/ansible.cfg
  เส้นทางการค้นหาโมดูลที่กำหนดค่า = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ตำแหน่งโมดูลหลาม ansible = /usr/local/lib/python3.6/site-packages/ansible
  ตำแหน่งการรวบรวม ansible = /root/.ansible/collections:/usr/share/ansible/collections
  ตำแหน่งปฏิบัติการ = /usr/local/bin/ansible
  python version = 3.6.8 (ค่าเริ่มต้น 19 มีนาคม 2021, 05:13:41 น.) [GCC 8.4.1 20200928 (Red Hat 8.4.1-1)]
  เวอร์ชันจินจา = 3.0.1
  libyaml = จริง

ฉันจะแก้ไขข้อผิดพลาดเหล่านั้นได้อย่างไร

Score:1
ธง jo

ข้อผิดพลาดแรก: คุณมีผู้ฟัง winrm https (tcp port 5986) ที่กำหนดค่าด้วยใบรับรองหรือไม่ ฉันเดาว่ามันไม่สามารถเรียกเมธอดนั้นได้เพราะไม่พบใบรับรองใดๆ

ข้อผิดพลาดที่สอง: ดูเหมือนว่าคุณจะได้รับข้อผิดพลาดการเข้าถึงถูกปฏิเสธเมื่อพยายามกระโดดสองครั้งไปยังเส้นทาง UNC 1) อย่าทำเช่นนี้ หรือ 2) หากจำเป็น คุณจะต้องกำหนดค่าการมอบสิทธิ์ข้อมูลประจำตัว (ทั้งต่องาน ต่อการเล่น หรือในการเชื่อมต่อ) คุณสามารถมอบหมาย CredSSP หรือ Kerberos ได้ (โดยดูจากลักษณะแล้ว คุณจะต้องใช้โมดูล python มากกว่านี้หากใช้ Kerberos

อ่านข้อมูลเกี่ยวกับ ansible, windows และ kerberos ได้ที่นี่: https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html

uz flag
ขอบคุณ ตามคำตอบของคุณ ฉันเพิ่มข้อมูลเพิ่มเติม ERR1+2 ชัดเจนเมื่อใช้ Dockerfile ที่ 2 ERR2 - ดูเหมือนว่าเมื่อรวบรวมข้อเท็จจริง PowerShell เฉพาะกำลังพยายามเชื่อมต่อกับตัวควบคุมโดเมน (เส้นทาง ```\domain.com\sys...``` ภายในข้อผิดพลาด) ฉันตรวจสอบแพ็คเกจส่วนใหญ่ในรายการข้อกำหนด - พบในคอนเทนเนอร์ Docker ที่ 1 ด้วย ฉันขาดอะไรไปในการกำหนดค่า Dockerfile หรือไม่
Semicolon avatar
jo flag
ข้อผิดพลาด 1 จะไม่ได้รับผลกระทบจากไฟล์นักเทียบท่าของคุณเลย - ข้อผิดพลาด 1 นั้นเกี่ยวกับใบรับรองที่ได้รับการกำหนดค่าบน winrm listener บนเครื่อง windows ที่คุณกำลังจัดการอย่างเคร่งครัด
Semicolon avatar
jo flag
ข้อผิดพลาด 2 ไม่ควรได้รับผลกระทบจากอะไรใน dockerfile ของคุณเช่นกัน - โดยเฉพาะอย่างยิ่งหลังจากที่ฉันบอกว่าคุณต้องใช้ CredSSP หรือ KERBEROS สำหรับ double-hops การเชื่อมต่อ winrm ของคุณยังคงใช้การรับรองความถูกต้อง ntlm
Semicolon avatar
jo flag
คำถามที่ดีกว่าคือเหตุใด ansible จึงพยายามเข้าสู่เส้นทาง UNC เพื่อเรียก "facter.exe" คุณมีเส้นทางโปรไฟล์หรือโฟลเดอร์เปลี่ยนเส้นทางที่กำหนดค่าสำหรับบัญชีผู้ใช้นั้นในเครื่อง windows หรือไม่ ฉันจะใช้บัญชี SEPARATE มากกว่าบัญชีที่คุณอาจใช้ในการเข้าสู่ระบบแบบโต้ตอบ
Semicolon avatar
jo flag
นอกจากนี้ - อาจต้องออกจากความคิด "ปัญหาไฟล์นักเทียบท่าของฉันอยู่ที่ไหน" ปัญหาเหล่านี้เป็นปัญหาของ Windows ที่ต้องแก้ไข/ตรวจสอบ อาจจะไม่ "นักเทียบท่า" ออกจากสิ่งนี้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา