Här kommer jag att demonstrera olika operationer som en systemadministratör kan genomföra på ett Windows-system via fjärråtkomst med hjälp av Ansible playbooks.
Ansible är ett av de mest framstående DevOps-verktygen på dagens marknad. Det erbjuder en uppsättning Windows-moduler som underlättar konfiguration och hantering av Windows-servrar. Jag förutsätter att Ansible redan är installerat på den maskin där du avser att administrera dina Windows-servrar.
Nedan följer några av de vanligaste åtgärderna som Windows-administratörer utför dagligen. Du kommer sannolikt att upptäcka hur enkelt det är att administrera Windows med Ansible.
Min Ansible-kontrollmaskin har IP-adressen 192.168.0.106, och det fjärranslutna Windows-systemets IP-adress är 192.168.0.102. Innan du går vidare, verifiera anslutningen till fjärrservern genom att köra win_ping-modulen.
användare@dator ~ $ ansible win -m win_ping 192.168.0.102 | SUCCESS => { "changed": false, "ping": "pong" }
Anslutningen till fjärrvärden har bekräftats.
Låt oss nu börja arbeta med Ansible Playbooks…
Filkopiering
Modulen `win_copy` är idealisk för att överföra filer från den lokala servern till en Windows-värd via fjärranslutning. Jag ska använda den här modulen för att kopiera en PDF-fil.
Använd följande YAML-kod och ange käll- och destinationssökvägar.
användare@dator ~ $ vi copy.yml --- - hosts: win tasks: - name: Kopiera fil win_copy: src: C:\output.pdf dest: C:\ansible_examples remote_src: yes
Starta Ansible-playbook för `win_copy`.
användare@dator ~ $ ansible-playbook copy.yml PLAY [win] *********************************************************************************************************************************** TASK [Samlar fakta] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Kopiera fil] ***************************************************************************************************************************** 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 den avsedda platsen på det fjärranslutna Windows-systemet.
Installation/Avinstallation av MSI
För att installera ett program med hjälp av en MSI-fil, använd först `win_get_url` för att specificera sökvägen till MSI-filen som ska laddas ned. Därefter, använd modulen `win_package` för att genomföra installationen. Parametern ”state: present” säkerställer att MSI installeras och att applikationen är i aktivt tillstånd.
I detta exempel kommer jag att installera Apache.
YAML-kod för detta:
användare@dator ~ $ vi msi.yml --- - name: Installera Apache MSI hosts: win tasks: - name: Ladda ner Apache-installationsprogrammet win_get_url: url: https://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi dest: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi - name: Installera MSI win_package: path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi state: present
Starta Ansible-playbook för att installera via MSI.
användare@dator ~ $ ansible-playbook msi.yml PLAY [Installera Apache MSI] ***************************************************************************************************************** TASK [Samlar fakta] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Ladda ner Apache-installationsprogrammet] ********************************************************************************************************* changed: [192.168.0.102] TASK [Installera 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
Kontrollera nu på Windows-systemet att Apache har installerats korrekt.
C:\Users\användare\dator>cd C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin>httpd -v Server version: Apache/2.2.25 (Win32) Server built: Jul 10 2013 01:52:12
Du kan även installera program med MSI och argument. Följande exempel visar samma procedur, men med installationsargument istället för ett tillstånd.
YAML-kod:
--- - name: Installera Apache MSI hosts: win tasks: - name: Ladda ner Apache-installationsprogrammet win_get_url: url: https://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi dest: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi - name: Installera MSI win_package: path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi arguments: - /install - /passive - /norestart
För att avinstallera ett program med MSI-filen, använd modulen `win_package` med tillståndet ”absent”. Detta indikerar att applikationen ska avinstalleras med hjälp av MSI-filen.
Här avinstallerar jag Apache.
användare@dator ~ $ vi uninstall_msi.yml --- - name: Avinstallera Apache MSI hosts: win tasks: - name: Avinstallera MSI win_package: path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi state: absent
Kör Ansible-playbook för avinstallation med MSI.
användare@dator ~ $ ansible-playbook uninstall_msi.yml PLAY [Avinstallera Apache MSI] ***************************************************************************************************************** TASK [Samlar fakta] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Avinstallera 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
Om jag nu kontrollerar Apache-versionen, får jag följande utdata, som visar att applikationen är avinstallerad.
C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin>httpd -v 'httpd' is not recognized as an internal or external command, operable program or batch file.
Avinstallera program (.EXE)
Du kan även avinstallera program med .exe-filer, med hjälp av programvarans produkt-ID.
användare@dator ~ $ vi uninstall.yml --- - hosts: win tasks: - name: Avinstallera 7-Zip från exe win_package: path: C:\Program Files\7-Zip\Uninstall.exe product_id: 7-Zip arguments: /S state: absent
Kör Ansible-playbook för att avinstallera 7-Zip.
användare@dator ~ $ ansible-playbook uninstall.yml PLAY [win] ************************************************************************************************************************************************************************************* TASK [Samlar fakta] ************************************************************************************************************************************************************************* ok: [192.168.0.102] TASK [Avinstallera 7-Zip från 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-tjänster
Ansible-modulen `win_service` används för att starta, stoppa eller starta om en tjänst. Här visar jag hur du stoppar Tomcat-tjänsten.
Du behöver ange tjänstens namn i YAML-filen och sätta tillståndet till ”stopped”.
användare@dator ~ $ vi service.yml --- - hosts: win tasks: - name: Stoppa tjänsten Tomcat win_service: name: Tomcat8 state: stopped
Kör Ansible-playbook för att stoppa Tomcat-tjänsten.
användare@dator ~ $ ansible-playbook service.yml PLAY [win] *********************************************************************************************************************************** TASK [Samlar fakta] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Stoppa tjänsten 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 kontrollerar Tomcat-tjänsten på Windows-systemet, kommer den nu vara i stoppat läge.
Du kan ändra tjänstens status genom att definiera tillstånden till ”started”, ”restarted” eller ”paused”.
Samla fakta
Med hjälp av Ansible-modulen `win_disk_facts`, kan du hämta all diskinformation från målvärden.
användare@dator ~ $ vi disk.yml --- - hosts: win tasks: - name: Hämta diskfakta win_disk_facts: - name: Visa första diskstorleken debug: var: ansible_facts.disks[0].size - name: Konvertera första systemdisken till olika format debug: msg: '{{ disksize_gib }} vs {{ disksize_gib_human }}' vars: # Hämta första systemdisken disk: '{{ ansible_facts.disks|selectattr("system_disk")|first }}' # Visa diskstorlek i 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 hämta diskdata.
användare@dator ~ $ ansible-playbook disk.yml PLAY [win] *********************************************************************************************************************************** TASK [Samlar fakta] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Hämta diskfakta] ************************************************************************************************************************ ok: [192.168.0.102] TASK [Visa första diskstorleken] **************************************************************************************************************** ok: [192.168.0.102] => { "ansible_facts.disks[0].size": "1000204886016" } TASK [Konvertera första systemdisken till olika format] **************************************************************************************** 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
Med Ansible-modulen `win_command`, kan du köra kommandon på fjärrvärden och samla information om CPU, enhetsdetaljer och mycket mer.
användare@dator ~ $ vi check.yml --- - hosts: win tasks: - name: Hämta diskfakta win_command: wmic cpu get caption, deviceid, name, numberofcores, maxclockspeed, status register: usage - debug: msg="{{ usage.stdout }}"
Kör Ansible-playbook för att samla fjärrsystemsinformation.
användare@dator ~ $ ansible-playbook check.yml PLAY [win] *********************************************************************************************************************************** TASK [Samlar fakta] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Hämta fakta] ************************************************************************************************************************ 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
Alla kommandon som du vanligtvis kör i Windows kan utföras med hjälp av Ansible-modulen `win_command`. Du behöver bara specificera kommandot i din YAML-fil. Här skapar jag bara en katalog.
användare@dator ~ $ vi commands.yml --- - hosts: win tasks: - name: kör en körbar fil med win_command win_command: whoami.exe - name: kör ett cmd-kommando win_command: cmd.exe /c mkdir C:\test
Kör Ansible-playbook för att utföra `win_command`.
användare@dator ~ $ ansible-playbook commands.yml PLAY [win] *********************************************************************************************************************************** TASK [Samlar fakta] *********************************************************************************************************************** ok: [192.168.0.102] TASK [kör en körbar fil med win_command] *************************************************************************************************** changed: [192.168.0.102] TASK [kör ett cmd-kommando] ********************************************************************************************************************* 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 innehåller många miljövariabler, som till exempel `JAVA_HOME`. Med Ansible-modulen `win_environment` kan du lägga till eller ändra miljövariabler i Windows. I detta exempel lägger jag till en ny variabel i listan med miljövariabler i Windows.
användare@dator ~ $ vi env.yml --- - hosts: win tasks: - name: Ange en miljövariabel för alla användare 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.
användare@dator ~ $ ansible-playbook env.yml PLAY [win] *********************************************************************************************************************************** TASK [Samlar fakta] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Ange en miljövariabel för alla användare] ********************************************************************************************* 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 så kommer du att se att den nya variabeln du just lade till nu finns där.
Lägg till/redigera register
Ansible-modulen `win_regedit` används för att lägga till eller redigera registerposter på en fjärransluten Windows-maskin. Du behöver specificera registersökvägen och det innehåll som ska läggas till/uppdateras. Här skapar jag en ny registerpost `adminvista.com` i sökvägen `HKLM:\SOFTWARE` och lägger sedan till namn och data till detta register.
användare@dator ~ $ vi registry.yml --- - hosts: win tasks: - name: Skapar ett register win_regedit: path: HKLM:\SOFTWARE\adminvista.com - name: Modifiera ett register, lägg till namn och data win_regedit: path: HKLM:\SOFTWARE\adminvista.com name: Geek data: Flare
Kör Ansible-playbook för att lägga till registret.
användare@dator ~ $ ansible-playbook registry.yml PLAY [win] *********************************************************************************************************************************** TASK [Samlar fakta] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Skapar ett register] ******************************************************************************************************************* changed: [192.168.0.102] TASK [Modifiera ett register, lägg till namn och 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 det här registret har lagts till med namn- och datavärden.
Ta bort loggar
Ansible-modulen `win_eventlog` används för att lägga till, rensa eller ta bort Windows-händelseloggar från ett Windows-system.
I Windows Powershell, lista händelseloggarna som finns på den fjärranslutna Windows-maskinen.
PS C:\Users\användare\dator> 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.
användare@dator ~ $ vi log.yml --- - hosts: win tasks: - name: Ta bort Internet Explorer-loggar win_eventlog: name: Internet Explorer state: absent
Kör Ansible-playbook för att ta bort Internet Explorer-loggarna från den fjärranslutna Windows-maskinen.
användare@dator ~ $ ansible-playbook log.yml PLAY [win] ************************************************************************************************************************************************************************************* TASK [Samlar fakta] ************************************************************************************************************************************************************************* ok: [192.168.0.102] TASK [Ta bort Internet Explorer-loggar] ********************************************************************************************************************************************** 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 nu listar händelseloggarna igen, kommer du att se att Internet Explorer-loggarna har tagits bort.
PS C:\Users\användare\dator> 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
Detta var några exempel på Ansible playbooks som kan användas för fjärradministration av Windows. Testa gärna dessa playbooks. Du kan även utforska andra Ansible Windows-moduler som finns tillgängliga.