Ukážu vám několik operací, které může správce provádět na vzdáleném systému Windows pomocí ansible-playbook.
Ansible je dnes jedním z nejpoužívanějších nástrojů DevOps na trhu. Poskytuje spoustu modulů systému Windows, které se používají ke konfiguraci a správě serveru Windows. Předpokládám, že již máte Ansible nainstalovaný ve Windows, odkud chcete spravovat servery Windows.
Níže jsou uvedeny některé z běžně používaných úkolů, které denně provádějí správci systému Windows. Budete překvapeni, jak snadno se spravuje Windows pomocí Ansible.
IP adresa mého počítače s ovladačem Ansible Windows je 192.168.0.106 a IP adresa mého vzdáleného systému Windows je 192.168.0.102. Než začnete, ujistěte se, že jste spustili modul win_ping, abyste zkontrolovali, zda se můžete připojit ke vzdálenému serveru systému Windows.
[email protected] ~ $ ansible win -m win_ping 192.168.0.102 | SUCCESS => { "changed": false, "ping": "pong" }
Moje připojení ke vzdálenému hostiteli je úspěšné.
Začněme tedy s Ansible Playbooks…
Table of Contents
Kopírování souborů
win_copy je modul, který zkopíruje soubor z místního serveru na vzdálený hostitel Windows. Tento modul použiji ke zkopírování jednoho PDF.
Použijte níže uvedený kód YAML, uveďte zdrojovou a cílovou cestu.
[email protected] ~ $ vi copy.yml --- - hosts: win tasks: - name: Copy File win_copy: src: C:output.pdf dest: C:ansible_examples remote_src: yes
Spusťte ansible-playbook pro 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
Soubor byl úspěšně zkopírován do cílového umístění ve vzdáleném systému Windows.
Instalovat/Odinstalovat MSI
Chcete-li nainstalovat aplikaci pomocí souboru MSI, musíte pomocí win_get_url uvést cestu k souboru MSI ke stažení a poté jej nainstalovat pomocí modulu win_package. Současný stav znamená, že MSI bude nainstalováno na stroji a aplikace je v současném stavu.
Zde instaluji Apache.
YAML kód, který se má použít:
[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
Spusťte ansible-playbook pro instalaci pomocí 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
Nyní přejděte do systému Windows a zkontrolujte, zda se aplikace Apache úspěšně nainstalovala.
C:Usersetechblog.cz>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
Můžete také instalovat aplikace pomocí MSI s argumenty. Níže je stejný příklad jako výše, ale místo stavu používáme k instalaci apache argument install.
YAML kód, který se má použít:
--- - 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
Chcete-li odinstalovat aplikaci pomocí souboru MSI, musíte použít modul win_package. Stav nepřítomný znamená, že aplikace bude odinstalována pomocí souboru MSI.
Zde odinstaluji 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
Spusťte ansible-playbook pro odinstalaci pomocí 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
Nyní, když zkontroluji verzi Apache, dostanu níže uvedený výstup, jakmile se aplikace odinstaluje.
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.
Odinstalovat software (.EXE)
Můžete také odinstalovat software pomocí souboru .exe pomocí ID produktu tohoto softwaru.
[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
Spusťte ansible-playbook a odinstalujte 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
Zastavit/Spustit/Restartovat služby Windows
modul win_service ansible se používá ke spuštění, zastavení nebo restartování služby. Zde vám ukážu, jak zastavit službu kocourků.
V souboru YAML musíte uvést název služby a nastavit stav na zastavení.
[email protected] ~ $ vi service.yml --- - hosts: win tasks: - name: Stop service Tomcat win_service: name: Tomcat8 state: stopped
Spusťte ansible-playbook a zastavte službu 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
Pokud zkontrolujete službu tomcat v systému Windows, je nyní ve stavu zastaveno.
Chcete-li změnit stav služby, můžete definovat stav pro spuštění nebo restartování nebo pozastavení.
Shromažďování faktů
Pomocí modulu ansible win_disk_facts můžete získat všechny informace o disku cílového hostitele.
[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'
Spusťte ansible-playbook a získejte informace o disku.
[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
Pomocí modulu ansible win_command můžete provádět příkazy na vzdáleném hostiteli a získat informace o CPU, podrobnosti o zařízení a mnoho dalšího.
[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 }}"
Spusťte ansible-playbook a získejte informace o vzdáleném systému.
[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
Spouštění příkazů
Ať už v okně spustíte jakékoli příkazy, lze je spustit prostřednictvím modulu ansible win_command. Stačí zadat příkaz v souboru YAML. Zde právě vytvářím adresář.
[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
Spusťte ansible-playbook a proveďte operaci 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
Proměnné prostředí
Systém Windows má více proměnných prostředí, například JAVA_HOME. Pomocí modulu ansible win_environment můžete přidávat nebo upravovat proměnné prostředí v systému Windows. V tomto příkladu přidávám novou proměnnou do seznamu proměnných prostředí 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
Spusťte ansible-playbook a přidejte proměnnou prostředí na vzdáleném počítači s 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
Přejděte do okna proměnných prostředí; uvidíte, že zde je přítomna nová proměnná, kterou jste právě přidali.
Přidat/upravit registr
modul win_regedit ansible se používá k přidání nebo úpravě podrobností registru na vzdáleném počítači se systémem Windows. Musíte zadat cestu k registru a obsahu, který se má přidat/aktualizovat. Zde vytvářím novou položku registru etechblog.cz v cestě HKLM:SOFTWARE a poté do tohoto registru přidávám jméno a data.
[email protected] ~ $ vi registry.yml --- - hosts: win tasks: - name: Creating a registry win_regedit: path: HKLM:SOFTWAREetechblog.cz - name: Modifying a registry, adding name and data win_regedit: path: HKLM:SOFTWAREetechblog.cz name: Geek data: Flare
Spusťte ansible-playbook a přidejte registr.
[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
Pokud přejdete do Editoru registru ve vzdáleném systému, uvidíte, že tento registr byl úspěšně přidán s parametry Název a Data.
Smazat protokol
win_eventlog modul ansible se používá k přidání, vymazání nebo odstranění protokolů událostí systému Windows ze systému Windows.
Přejděte do prostředí Windows Powershell a uveďte seznam EventLogs na vzdáleném počítači s Windows.
PS C:Usersetechblog.cz> 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
Nyní ukážu, jak odstranit protokoly ze všech zdrojů pro Internet Explorer.
[email protected] ~ $ vi log.yml --- - hosts: win tasks: - name: Remove Internet Explorer Logs win_eventlog: name: Internet Explorer state: absent
Spusťte ansible-playbook a odeberte Internet Explorer ze vzdáleného počítače se systémem 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
Nyní, pokud znovu vypíšete EventLogs, uvidíte, že protokoly Internet Exploreru byly odstraněny.
PS C:Usersetechblog.cz> 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
Takže to bylo vše o Ansible playbookech, které lze použít pro vzdálenou správu oken. Neváhejte a vyzkoušejte tyto učebnice. Můžete zkusit i jiné Moduly Ansible Windows dostupný.