Jag kommer att visa dig flera operationer som en administratör kan utföra på ett fjärranslutet Windows-system med ansible-playbook.
Ansible är ett av de mest använda DevOps-verktygen på marknaden idag. Den tillhandahåller ett gäng Windows-moduler som används för att konfigurera och hantera Windows-servern. Jag antar att du redan har Ansible installerat på Windows där du vill hantera Windows-servrarna.
Följande är några av de vanligaste uppgifterna som utförs av Windows-administratörer dagligen. Du kommer att bli förvånad över att se hur enkelt det är att administrera Windows med Ansible.
Min Ansible Windows-kontrollermaskins IP-adress är 192.168.0.106, och mitt fjärranslutna Windows-systems IP-adress är 192.168.0.102. Innan du börjar, se till att du kör en win_ping-modul för att kontrollera om du kan ansluta till Windows fjärrserver eller inte.
[email protected] ~ $ ansible win -m win_ping 192.168.0.102 | SUCCESS => { "changed": false, "ping": "pong" }
Min anslutning till en fjärrvärd har lyckats.
Så låt oss komma igång med Ansible Playbooks…
Innehållsförteckning
Kopiera filer
win_copy är en lämplig modul som kopierar en fil från den lokala servern till en fjärransluten Windows-värd. Jag kommer att använda den här modulen för att kopiera en enda PDF.
Använd nedanstående YAML-kod, ange källan och destinationsvägarna.
[email protected] ~ $ vi copy.yml --- - hosts: win tasks: - name: Copy File win_copy: src: C:output.pdf dest: C:ansible_examples remote_src: yes
Kör ansible-playbook för 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
Filen har framgångsrikt kopierats till destinationsplatsen på ett fjärranslutet Windows-system.
Installera/avinstallera MSI
För att installera ett program med hjälp av MSI-filen måste du använda win_get_url för att nämna sökvägen till MSI-filen som ska laddas ner och sedan använda modulen win_package för att installera den. Det aktuella tillståndet betyder att MSI kommer att installeras på maskinen och applikationen är i nuvarande tillstånd.
Här installerar jag Apache.
YAML-kod som ska användas:
[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
Kör ansible-playbook för att installera med 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
Gå nu till Windows-systemet och kontrollera om apache-applikationen har installerats framgångsrikt.
C:Usersadminvista.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
Du kan också installera applikationer med MSI med argument. Nedan är samma exempel som ovan, men istället för ett tillstånd använder vi ett installationsargument för att installera apache.
YAML-kod som ska användas:
--- - 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
För att avinstallera ett program med hjälp av MSI-filen måste du använda modulen win_package. Tillståndet frånvarande betyder att applikationen kommer att avinstalleras med hjälp av MSI-filen.
Här avinstallerar jag 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
Kör ansible-playbook för att avinstallera med 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
Nu, om jag kontrollerar apache-versionen, kommer jag att få utdata nedan när applikationen avinstallerades.
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.
Avinstallera programvara (.EXE)
Du kan också avinstallera programvara med .exe-filen med hjälp av produkt-id:t för den programvaran.
[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
Kör ansible-playbook för att avinstallera 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
Stoppa/Starta/Starta om Windows Services
win_service ansible modul används för att starta, stoppa eller starta om en tjänst. Här kommer jag att visa dig hur du stoppar Tomcat-tjänsten.
Du måste nämna tjänstens namn i YAML-filen och ställa in tillståndet att stoppa.
[email protected] ~ $ vi service.yml --- - hosts: win tasks: - name: Stop service Tomcat win_service: name: Tomcat8 state: stopped
Kör ansible-playbook för att stoppa Tomcat-tjänsten.
[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
Om du kollar tomcat-tjänsten på Windows-systemet är den nu i stoppad status.
Du kan definiera tillstånd till startat eller omstartat eller pausat för att ändra tjänstens status.
Samla fakta
Genom att använda win_disk_facts ansible modul kan du hämta all diskinformation från målvärden.
[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'
Kör ansible-playbook för att få information om skivan.
[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
Genom att använda win_command ansible-modulen kan du utföra kommandon på fjärrvärden och få CPU-information, enhetsdetaljer och mycket mer.
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 }}"
Kör ansible-playbook för att få fjärrsysteminformation.
[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
Kör kommandon
Vilka kommandon du än kör på ett fönster, kan de köras genom den eventuella win_command-modulen. Du behöver bara ange kommandot i din YAML-fil. Här skapar jag bara en katalog.
[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
Kör ansible-playbook för att utföra win_command operation.
[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
Miljövariabler
Ett Windows-system har flera miljövariabler, till exempel JAVA_HOME. Genom att använda modulen win_environment ansible kan du lägga till eller ändra miljövariabler på ett Windows-system. I det här exemplet lägger jag till en ny variabel i listan med miljövariabler i 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
Kör ansible-playbook för att lägga till miljövariabeln på en fjärransluten Windows-maskin.
[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
Gå till fönstret för miljövariabler; du kommer att se att den nya variabeln du just lade till finns här.
Lägg till/redigera register
win_regedit ansible modul används för att lägga till eller redigera registerdetaljer på en fjärransluten Windows-maskin. Du måste ange sökvägen till registret och innehållet som ska läggas till/uppdateras. Här skapar jag en ny registerpost adminvista.com inuti HKLM:SOFTWARE-sökvägen och lägger sedan till namn och data till detta register.
[email protected] ~ $ vi registry.yml --- - hosts: win tasks: - name: Creating a registry win_regedit: path: HKLM:SOFTWAREadminvista.com - name: Modifying a registry, adding name and data win_regedit: path: HKLM:SOFTWAREadminvista.com name: Geek data: Flare
Kör ansible-playbook för att lägga till registret.
[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
Om du går till Registereditorn på fjärrsystemet kan du se att detta register har lagts till med namn och dataparametrar.
Ta bort logg
win_eventlog ansible-modulen används för att lägga till, rensa eller ta bort Windows-händelseloggar från Windows-systemet.
Gå till Windows Powershell och lista EventLogs som finns på den fjärranslutna Windows-maskinen.
PS C:Usersadminvista.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
Nu kommer jag att visa hur man tar bort loggar från alla källor för Internet Explorer.
[email protected] ~ $ vi log.yml --- - hosts: win tasks: - name: Remove Internet Explorer Logs win_eventlog: name: Internet Explorer state: absent
Kör ansible-playbook för att ta bort Internet Explorer från den fjärranslutna Windows-maskinen.
[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
Nu, om du listar EventLogs igen, kommer du att se Internet Explorer-loggarna har tagits bort.
PS C:Usersadminvista.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
Så det handlade om Ansible playbooks, som kan användas för fjärradministration av Windows. Varsågod och prova dessa spelböcker. Du kan också prova andra Ansible Windows-moduler tillgängligt.