9 Ansible Playbooks ตัวอย่างสำหรับการดูแลระบบ Windows

ฉันจะแสดงการดำเนินการหลายอย่างที่ผู้ดูแลระบบสามารถทำได้บนระบบ 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

  แก้ไข DS4 Windows ไม่สามารถเปิดได้ใน Windows 10

ที่นี่ฉันกำลังถอนการติดตั้ง 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

ไปที่หน้าต่างตัวแปรสภาพแวดล้อม คุณจะเห็นตัวแปรใหม่ที่คุณเพิ่งเพิ่มอยู่ที่นี่

  วิธีเรียกใช้แอปในฐานะผู้ดูแลระบบเสมอใน Windows 11

เพิ่ม/แก้ไขรีจิสทรี

โมดูล 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 มีอยู่.

  แก้ไข DS4 Windows ไม่สามารถเปิดได้ใน Windows 10

เรื่องล่าสุด

x