ฉันจะแสดงการดำเนินการหลายอย่างที่ผู้ดูแลระบบสามารถทำได้บนระบบ windows ระยะไกลโดยใช้ ansible-playbook
Ansible เป็นหนึ่งในเครื่องมือ DevOps ที่ใช้มากที่สุดในตลาดปัจจุบัน มีโมดูล windows จำนวนมากที่ใช้ในการกำหนดค่าและจัดการเซิร์ฟเวอร์ Windows ฉันถือว่าคุณมี Ansible ติดตั้งบน Windows จากตำแหน่งที่คุณต้องการจัดการเซิร์ฟเวอร์ Windows
ต่อไปนี้คืองานบางส่วนที่ใช้กันทั่วไปซึ่งดำเนินการโดยผู้ดูแลระบบ Windows ในแต่ละวัน คุณจะทึ่งเมื่อเห็นว่าการจัดการ Windows โดยใช้ Ansible นั้นง่ายเพียงใด
ที่อยู่ IP ของเครื่องควบคุม Ansible Windows ของฉันคือ 192.168.0.106 และที่อยู่ IP ของระบบ Windows ระยะไกลของฉันคือ 192.168.0.102 ก่อนที่คุณจะเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณเรียกใช้โมดูล win_ping เพื่อตรวจสอบว่าคุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลของ windows ได้หรือไม่
[email protected] ~ $ ansible win -m win_ping 192.168.0.102 | SUCCESS => { "changed": false, "ping": "pong" }
การเชื่อมต่อกับโฮสต์ระยะไกลของฉันสำเร็จ
มาเริ่มกันที่ Ansible Playbooks…
กำลังคัดลอกไฟล์
win_copy เป็นโมดูล ansible ที่คัดลอกไฟล์จากเซิร์ฟเวอร์ภายในไปยังโฮสต์ Windows ระยะไกล ฉันจะใช้โมดูลนี้เพื่อคัดลอก PDF เดียว
ใช้โค้ด YAML ด้านล่าง ระบุเส้นทางต้นทางและปลายทาง
[email protected] ~ $ vi copy.yml --- - hosts: win tasks: - name: Copy File win_copy: src: C:output.pdf dest: C:ansible_examples remote_src: yes
เรียกใช้ ansible-playbook สำหรับ win_copy
[email protected] ~ $ ansible-playbook copy.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Copy File] ***************************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ไฟล์ถูกคัดลอกสำเร็จที่ตำแหน่งปลายทางบนระบบ windows ระยะไกล
ติดตั้ง/ถอนการติดตั้ง MSI
ในการติดตั้งแอปพลิเคชันโดยใช้ไฟล์ MSI คุณต้องใช้ win_get_url เพื่อระบุเส้นทางของไฟล์ MSI ที่จะดาวน์โหลด จากนั้นใช้โมดูล win_package เพื่อติดตั้ง สถานะปัจจุบันหมายความว่า MSI จะถูกติดตั้งบนเครื่อง และแอปพลิเคชันอยู่ในสถานะปัจจุบัน
ที่นี่ ฉันกำลังติดตั้ง Apache
รหัส YAML ที่จะใช้:
[email protected] ~ $ vi msi.yml --- - name: Installing Apache MSI hosts: win tasks: - name: Download the Apache installer win_get_url: url: https://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi dest: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi - name: Install MSI win_package: path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi state: present
เรียกใช้ ansible-playbook เพื่อติดตั้งโดยใช้ MSI
[email protected] ~ $ ansible-playbook msi.yml PLAY [Installing Apache MSI] ***************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Download the Apache installer] ********************************************************************************************************* changed: [192.168.0.102] TASK [Install MSI] *************************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ตอนนี้ไปที่ระบบ windows และตรวจสอบว่าติดตั้งแอปพลิเคชัน apache สำเร็จหรือไม่
C:Usersadmintrick.com>cd C:Program Files (x86)Apache Software FoundationApache2.2bin C:Program Files (x86)Apache Software FoundationApache2.2bin>httpd -v Server version: Apache/2.2.25 (Win32) Server built: Jul 10 2013 01:52:12
คุณยังสามารถติดตั้งแอปพลิเคชันโดยใช้ MSI พร้อมอาร์กิวเมนต์ ด้านล่างนี้เป็นตัวอย่างเดียวกับด้านบน แต่แทนที่จะเป็นสถานะ เราใช้อาร์กิวเมนต์ install เพื่อติดตั้ง apache
รหัส YAML ที่จะใช้:
--- - name: Installing Apache MSI hosts: win tasks: - name: Download the Apache installer win_get_url: url: https://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi dest: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi - name: Install MSI win_package: path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi arguments: - /install - /passive - /norestart
หากต้องการถอนการติดตั้งแอปพลิเคชันโดยใช้ไฟล์ MSI คุณต้องใช้โมดูล win_package ไม่มีสถานะหมายความว่าแอปพลิเคชันจะถูกถอนการติดตั้งโดยใช้ไฟล์ MSI
ที่นี่ฉันกำลังถอนการติดตั้ง Apache
[email protected] ~ $ vi uninstall_msi.yml --- - name: UnInstalling Apache MSI hosts: win tasks: - name: UnInstall MSI win_package: path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi state: absent
เรียกใช้ ansible-playbook เพื่อถอนการติดตั้งโดยใช้ MSI
[email protected] ~ $ ansible-playbook uninstall_msi.yml PLAY [UnInstalling Apache MSI] ***************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [UnInstall MSI] ************************************************************************************************************************* changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ตอนนี้ ถ้าฉันตรวจสอบเวอร์ชัน apache ฉันจะได้รับผลลัพธ์ด้านล่างเมื่อแอปพลิเคชันถูกถอนการติดตั้ง
C:Program Files (x86)Apache Software FoundationApache2.2bin>httpd -v 'httpd' is not recognized as an internal or external command, operable program or batch file.
ถอนการติดตั้งซอฟต์แวร์ (.EXE)
คุณยังสามารถถอนการติดตั้งซอฟต์แวร์ด้วยไฟล์ .exe โดยใช้รหัสผลิตภัณฑ์ของซอฟต์แวร์นั้น
[email protected] ~ $ vi uninstall.yml --- - hosts: win tasks: - name: Uninstall 7-Zip from the exe win_package: path: C:Program Files7-ZipUninstall.exe product_id: 7-Zip arguments: /S state: absent
เรียกใช้ ansible-playbook เพื่อถอนการติดตั้ง 7-Zip
[email protected] ~ $ ansible-playbook uninstall.yml PLAY [win] ************************************************************************************************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************************************************************************************* ok: [192.168.0.102] TASK [Uninstall 7-Zip from the exe] *********************************************************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP ************************************************************************************************************************************************************************************* 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
หยุด/เริ่ม/เริ่มบริการ Windows ใหม่
โมดูล win_service ansible ใช้เพื่อเริ่ม หยุด หรือเริ่มบริการใหม่ ที่นี่ฉันจะแสดงวิธีหยุดบริการแมวตัวผู้
คุณต้องระบุชื่อบริการในไฟล์ YAML และตั้งค่าสถานะให้หยุด
[email protected] ~ $ vi service.yml --- - hosts: win tasks: - name: Stop service Tomcat win_service: name: Tomcat8 state: stopped
เรียกใช้ ansible-playbook เพื่อหยุดบริการ tomcat
[email protected] ~ $ ansible-playbook service.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Stop service Tomcat] **************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
หากคุณตรวจสอบบริการ Tomcat บนระบบ windows ขณะนี้อยู่ในสถานะหยุดทำงาน
คุณสามารถกำหนดสถานะที่จะเริ่มต้นหรือเริ่มต้นใหม่หรือหยุดชั่วคราวเพื่อเปลี่ยนสถานะของบริการ
การรวบรวมข้อเท็จจริง
เมื่อใช้โมดูล ansible win_disk_facts คุณสามารถดึงข้อมูลดิสก์ทั้งหมดของโฮสต์เป้าหมายได้
[email protected] ~ $ vi disk.yml --- - hosts: win tasks: - name: Get disk facts win_disk_facts: - name: Output first disk size debug: var: ansible_facts.disks[0].size - name: Convert first system disk into various formats debug: msg: '{{ disksize_gib }} vs {{ disksize_gib_human }}' vars: # Get first system disk disk: '{{ ansible_facts.disks|selectattr("system_disk")|first }}' # Show disk size in Gibibytes disksize_gib_human: '{{ disk.size|filesizeformat(true) }}' disksize_gib: '{{ (disk.size/1024|pow(3))|round|int }} GiB'
เรียกใช้ ansible-playbook เพื่อรับข้อมูลดิสก์
[email protected] ~ $ ansible-playbook disk.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Get disk facts] ************************************************************************************************************************ ok: [192.168.0.102] TASK [Output first disk size] **************************************************************************************************************** ok: [192.168.0.102] => { "ansible_facts.disks[0].size": "1000204886016" } TASK [Convert first system disk into various formats] **************************************************************************************** ok: [192.168.0.102] => { "msg": "932 GiB vs 931.5 GiB" } PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
เมื่อใช้โมดูล win_command ansible คุณสามารถรันคำสั่งบนรีโมตโฮสต์และรับข้อมูล CPU รายละเอียดอุปกรณ์ และอื่นๆ อีกมากมาย
wdzwd[email protected] ~ $ vi check.yml --- - hosts: win tasks: - name: Get disk facts win_command: wmic cpu get caption, deviceid, name, numberofcores, maxclockspeed, status register: usage - debug: msg="{{ usage.stdout }}"
เรียกใช้ ansible-playbook เพื่อรับข้อมูลระบบระยะไกล
[email protected] ~ $ ansible-playbook check.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Get facts] ************************************************************************************************************************ changed: [192.168.0.102] TASK [debug] ********************************************************************************************************************************* ok: [192.168.0.102] => { "msg": "Caption DeviceID MaxClockSpeed Name NumberOfCores Status rrnIntel64 Family 6 Model 142 Stepping 9 CPU0 2712 Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2 OK rrnrrn" } PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
เรียกใช้คำสั่ง
คำสั่งใดก็ตามที่คุณเรียกใช้บนหน้าต่าง คำสั่งเหล่านั้นสามารถเรียกใช้ผ่านโมดูล win_command ansible คุณเพียงแค่ต้องระบุคำสั่งในไฟล์ YAML ของคุณ ที่นี่ฉันเพิ่งสร้างไดเร็กทอรี
[email protected] ~ $ vi commands.yml --- - hosts: win tasks: - name: run an executable using win_command win_command: whoami.exe - name: run a cmd command win_command: cmd.exe /c mkdir C:test
เรียกใช้ ansible-playbook เพื่อดำเนินการ win_command
[email protected] ~ $ ansible-playbook commands.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [run an executable using win_command] *************************************************************************************************** changed: [192.168.0.102] TASK [run a cmd command] ********************************************************************************************************************* changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ตัวแปรสภาพแวดล้อม
ระบบ windows มีตัวแปรสภาพแวดล้อมหลายตัว เช่น JAVA_HOME การใช้โมดูล win_environment ansible คุณสามารถเพิ่มหรือแก้ไขตัวแปรสภาพแวดล้อมบนระบบ windows ในตัวอย่างนี้ ฉันกำลังเพิ่มตัวแปรใหม่ในรายการตัวแปรสภาพแวดล้อมของ windows
[email protected] ~ $ vi env.yml --- - hosts: win tasks: - name: Set an environment variable for all users win_environment: state: present name: NewVariable value: New Value level: machine
เรียกใช้ ansible-playbook เพื่อเพิ่มตัวแปรสภาพแวดล้อมบนเครื่อง windows ระยะไกล
[email protected] ~ $ ansible-playbook env.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Set an environment variable for all users] ********************************************************************************************* changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ไปที่หน้าต่างตัวแปรสภาพแวดล้อม คุณจะเห็นตัวแปรใหม่ที่คุณเพิ่งเพิ่มอยู่ที่นี่
เพิ่ม/แก้ไขรีจิสทรี
โมดูล win_regedit ansible ใช้เพื่อเพิ่มหรือแก้ไขรายละเอียดรีจิสตรีบนเครื่อง windows ระยะไกล คุณต้องระบุเส้นทางของรีจิสทรีและเนื้อหาที่จะเพิ่ม/อัปเดต ที่นี่ฉันกำลังสร้างรายการรีจิสทรีใหม่ admintrick.com ภายในเส้นทาง HKLM:SOFTWARE จากนั้นเพิ่มชื่อและข้อมูลลงในรีจิสทรีนี้
[email protected] ~ $ vi registry.yml --- - hosts: win tasks: - name: Creating a registry win_regedit: path: HKLM:SOFTWAREadmintrick.com - name: Modifying a registry, adding name and data win_regedit: path: HKLM:SOFTWAREadmintrick.com name: Geek data: Flare
เรียกใช้ ansible-playbook เพื่อเพิ่มรีจิสทรี
[email protected] ~ $ ansible-playbook registry.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Creating a registry] ******************************************************************************************************************* changed: [192.168.0.102] TASK [Modifying a registry, adding name and data] ******************************************************************************************** changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
หากคุณไปที่ Registry Editor บนระบบระยะไกล คุณจะเห็นว่าเพิ่มรีจิสทรีนี้สำเร็จด้วยพารามิเตอร์ชื่อและข้อมูล
ลบบันทึก
โมดูล win_eventlog ansible ใช้เพื่อเพิ่ม ล้าง หรือลบบันทึกเหตุการณ์ของ windows ออกจากระบบ windows
ไปที่ Windows Powershell และแสดงรายการ EventLogs ที่มีอยู่ในเครื่อง windows ระยะไกล
PS C:Usersadmintrick.com> Get-EventLog -List Max(K) Retain OverflowAction Entries Log ------ ------ -------------- ------- --- 20,480 0 OverwriteAsNeeded 33,549 Application 20,480 0 OverwriteAsNeeded 0 HardwareEvents 512 7 OverwriteOlder 20 Internet Explorer 20,480 0 OverwriteAsNeeded 0 Key Management Service 128 0 OverwriteAsNeeded 190 OAlerts Security 20,480 0 OverwriteAsNeeded 44,828 System 15,360 0 OverwriteAsNeeded 3,662 Windows PowerShell
ตอนนี้ ฉันจะแสดงวิธีลบบันทึกจากแหล่งทั้งหมดสำหรับ Internet Explorer
[email protected] ~ $ vi log.yml --- - hosts: win tasks: - name: Remove Internet Explorer Logs win_eventlog: name: Internet Explorer state: absent
เรียกใช้ ansible-playbook เพื่อลบ Internet Explorer จากเครื่อง windows ระยะไกล
[email protected] ~ $ ansible-playbook log.yml PLAY [win] ************************************************************************************************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************************************************************************************* ok: [192.168.0.102] TASK [Remove Internet Explorer Logs] ********************************************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP ************************************************************************************************************************************************************************************* 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ตอนนี้ หากคุณแสดงรายการ EventLogs อีกครั้ง คุณจะเห็นว่าบันทึกของ Internet Explorer ถูกลบไปแล้ว
PS C:Usersadmintrick.com> Get-EventLog -List Max(K) Retain OverflowAction Entries Log ------ ------ -------------- ------- --- 20,480 0 OverwriteAsNeeded 33,549 Application 20,480 0 OverwriteAsNeeded 0 HardwareEvents 20,480 0 OverwriteAsNeeded 0 Key Management Service 128 0 OverwriteAsNeeded 190 OAlerts Security 20,480 0 OverwriteAsNeeded 44,835 System 15,360 0 OverwriteAsNeeded 56 Windows PowerShell
นั่นคือทั้งหมดที่เกี่ยวกับ Ansible playbook ซึ่งสามารถใช้สำหรับการดูแล windows จากระยะไกล ไปข้างหน้าและลองใช้ playbooks เหล่านี้ นอกจากนี้คุณยังสามารถลองอื่น ๆ โมดูล Windows Ansible มีอยู่.