ฉันเก็บการติดตั้งของ dbatools.io โมดูล PowerShell อัปเดตบนเซิร์ฟเวอร์ MSSQL ของฉันด้วยเพลย์บุ๊ก Ansible แบบง่ายๆ ซึ่งรวมถึงงานต่อไปนี้:
###################### อัพเดท DBATOOLS ####################
- ชื่อ: อัปเดต dbatools
win_shell: |
ถ้า ([Net.ServicePointManager]::SecurityProtocol -match "Tls12") {
เขียนโฮสต์ "ตกลง: tls 12 ใช้งานอยู่"
}
อื่น{
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
เขียนโฮสต์ "SET: เปิดใช้งาน tls 12"
}
ถ้า ((รับ PSRepository).ชื่อ -notLike "PSGallery") {
โฮสต์เขียน "SET: PSGallery กำลังลงทะเบียน"
ลงทะเบียน PSRepository - ค่าเริ่มต้น
}
อื่น {
เขียนโฮสต์ "ตกลง: PSGallery ที่มีอยู่"
}
ตั้งค่า PSRepository - ชื่อ PSGallery -InstallationPolicy Trusted
เขียนโฮสต์ "SET: อัปเดต dbatools"
Update-Dbatools -Cleanup -Confirm:$false
# เหมือนกับการติดตั้งยกเว้นคำสั่งติดตั้งในตอนท้าย
เมื่อ: is_installed.stdout.find('true') != -1 ## ใช้ "find" เนื่องจาก stdout มี /r/n เนื่องจากเป็นรายการ / find ง่ายกว่า จากนั้นทำความสะอาด var
งานนี้ใช้งานได้ แต่ส่งคืนข้อผิดพลาดต่อไปนี้ทุกครั้งที่ต้องล้างข้อมูล dbatools เวอร์ชันเก่า:
ร้ายแรง: [server.domain.local]: ล้มเหลว! => {"changed": false, "module_stderr": "#< CLIXML\r\n", "module_stdout": "", "msg": "MODULE FAILURE\nโปรดดู stdout/stderr สำหรับข้อผิดพลาดที่แน่นอน", "rc ":4294967295}
ฉันใช้ เพิกเฉยต่อข้อผิดพลาด: ใช่
เพื่อไม่ให้ผลลัพธ์ของฉันเสีย แต่ท้ายที่สุด ฉันต้องการแก้ปัญหานี้อย่างน่าเชื่อถือ
หากฉันดำเนินการคำสั่งนี้โดยตรงผ่านการเชื่อมต่อระยะไกลบนโฮสต์ใดๆ คำสั่งนั้นจะทำงานโดยไม่มีข้อผิดพลาด
เมื่อออกจาก -ทำความสะอาด
ตัวเลือกออกไปมันยังใช้งานได้โดยไม่มีข้อผิดพลาด แต่ dbatools เวอร์ชันเก่าจะไม่ถูกลบและจะเพิ่มขึ้นเมื่อเวลาผ่านไป
มีความคิดอย่างไรที่สามารถจัดการข้อผิดพลาดนี้บน Ansible ได้อย่างถูกต้อง
ข้อความแสดงข้อผิดพลาดที่มีรายละเอียดสูง:
การเปลี่ยนเส้นทาง (ประเภท: โมดูล) ansible.buildin.win_shell ไปยัง ansible.windows.win_shell
การใช้ไฟล์โมดูล /runner/requirements_collections/ansible_collections/ansible/windows/plugins/modules/win_shell.ps1
เปิดใช้งานการวางท่อ
<SQL-Server-IP> สร้างการเชื่อมต่อ WINRM สำหรับผู้ใช้: ansible-service-user บน PORT 5986 ไปยัง SQL-Server-IP
EXEC (ผ่านตัวห่อหุ้มไปป์ไลน์)
ร้ายแรง: [SQL-Server-FQDN]: ล้มเหลว! => {
"เปลี่ยนแปลง": เท็จ
"module_stderr": "#< CLIXML\r\n",
"module_stdout": "",
"msg": "โมดูลล้มเหลว\nดู stdout/stderr สำหรับข้อผิดพลาดที่แน่นอน",
"rc": 4294967295
}