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