Пример за 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 е анзибилен модул, който копира файл от локалния сървър на отдалечен 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:Userspctechbg.net>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 с аргументи. По-долу е същият пример като по-горе, но вместо състояние, ние използваме аргумент за инсталиране, за да инсталираме apache.

  Как да коригирате 100% използване на диска след Windows Update KB3201845

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 се използва за стартиране, спиране или рестартиране на услуга. Тук ще ви покажа как да спрете услугата tomcat.

Трябва да споменете името на услугата в 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, тя вече е в спряно състояние.

Можете да определите състояние на стартирано или рестартирано или на пауза, за да промените състоянието на услугата.

  Контролирайте Groove и приложението Филми и телевизия от системната област в Windows

Събиране на факти

Използвайки анзибилния модул 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, можете да изпълнявате команди на отдалечения хост и да получавате информация за процесора, подробности за устройството и много повече.

[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

Изпълнение на команди

Каквито и команди да изпълнявате в прозорец, те могат да бъдат изпълнявани чрез модула ansible win_command. Просто трябва да посочите командата във вашия YAML файл. Ето, аз просто създавам директория.

w[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 10

Добавяне/редактиране на регистър

win_regedit ansible модул се използва за добавяне или редактиране на подробности в системния регистър на отдалечена Windows машина. Трябва да посочите пътя на регистъра и съдържанието, което да се добави/актуализира. Тук създавам нов запис в регистъра pctechbg.net в пътя на HKLM:СОФТУЕР и след това добавям име и данни към този регистър.

[email protected] ~
$ vi registry.yml
---

- hosts: win 

  tasks:

   - name: Creating a registry

     win_regedit:

      path: HKLM:SOFTWAREpctechbg.net

   - name: Modifying a registry, adding name and data

     win_regedit:

      path: HKLM:SOFTWAREpctechbg.net

      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

Ако отидете в редактора на системния регистър на отдалечената система, можете да видите, че този регистър е добавен успешно с параметри за име и данни.

Изтриване на дневник

Анзибилният модул win_eventlog се използва за добавяне, изчистване или премахване на регистрационни файлове за събития на Windows от Windows системата.

Отидете на Windows Powershell и избройте EventLogs, налични на отдалечената Windows машина.

PS C:Userspctechbg.net> 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:Userspctechbg.net> 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 playbooks, които могат да се използват за отдалечено администриране на Windows. Продължете и изпробвайте тези книги-игри. Можете също да опитате други Ansible Windows модули на разположение.