Jeg vil vise dig flere handlinger, som en administrator kan udføre på et fjerntliggende Windows-system ved hjælp af ansible-playbook.
Ansible er et af de mest brugte DevOps-værktøjer på markedet i dag. Det giver en masse Windows-moduler, der bruges til at konfigurere og administrere Windows-serveren. Jeg antager, at du allerede har Ansible installeret på Windows, hvorfra du vil administrere Windows-serverne.
Følgende er nogle af de almindeligt anvendte opgaver, der udføres af Windows-administratorer på daglig basis. Du vil blive overrasket over at se, hvor nemt det er at administrere Windows ved hjælp af Ansible.
Min Ansible Windows-controller-maskines IP-adresse er 192.168.0.106, og mit eksterne Windows-systems IP-adresse er 192.168.0.102. Før du går i gang, skal du sørge for at køre et win_ping-modul for at kontrollere, om du er i stand til at oprette forbindelse til Windows-fjernserveren eller ej.
[email protected] ~ $ ansible win -m win_ping 192.168.0.102 | SUCCESS => { "changed": false, "ping": "pong" }
Min forbindelse til en fjernvært er vellykket.
Så lad os komme i gang med Ansible Playbooks…
Indholdsfortegnelse
Kopiering af filer
win_copy er et ansible modul, der kopierer en fil fra den lokale server til en ekstern Windows-vært. Jeg vil bruge dette modul til at kopiere en enkelt PDF.
Brug nedenstående YAML-kode, giv kilde- og destinationsstierne.
[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 for 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 er blevet kopieret til destinationsplaceringen på et fjerntliggende Windows-system.
Installer/afinstaller MSI
For at installere en applikation ved hjælp af MSI-filen, skal du bruge win_get_url til at nævne stien til MSI-filen, der skal downloades, og derefter bruge win_package-modulet til at installere den. Den nuværende tilstand betyder, at MSI’en vil blive installeret på maskinen, og applikationen er i den nuværende tilstand.
Her installerer jeg Apache.
YAML-kode, der skal bruges:
[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 for at installere ved hjælp af 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 til Windows-systemet og kontroller, om apache-applikationen blev installeret med succes.
C:Userstoadmin.dk>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 også installere programmer ved hjælp af MSI med argumenter. Nedenfor er det samme eksempel som ovenfor, men i stedet for en tilstand, bruger vi et installeringsargument til at installere apache.
YAML-kode, der skal bruges:
--- - 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
For at afinstallere et program ved hjælp af MSI-filen, skal du bruge win_package-modulet. Tilstanden fraværende betyder, at applikationen vil blive afinstalleret ved hjælp af MSI-filen.
Her er jeg ved at afinstallere 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 for at afinstallere ved hjælp af 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, hvis jeg tjekker apache-versionen, vil jeg få nedenstående output, da applikationen blev afinstalleret.
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.
Afinstaller software (.EXE)
Du kan også afinstallere software med .exe-fil ved hjælp af produkt-id’et for den pågældende software.
[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 for at afinstallere 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
Stop/Start/Genstart Windows Services
win_service ansible modul bruges til at starte, stoppe eller genstarte en tjeneste. Her vil jeg vise dig, hvordan du stopper tomcat-tjenesten.
Du skal nævne tjenestenavnet i YAML-filen og indstille tilstanden til at stoppe.
[email protected] ~ $ vi service.yml --- - hosts: win tasks: - name: Stop service Tomcat win_service: name: Tomcat8 state: stopped
Kør ansible-playbook for at stoppe Tomcat-tjenesten.
[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
Hvis du tjekker Tomcat-tjenesten på Windows-systemet, er den nu i standset status.
Du kan definere tilstand til startet eller genstartet eller sat på pause for at ændre status for tjenesten.
Indsamling af fakta
Ved at bruge win_disk_facts ansible modul kan du hente al diskinformationen fra målværten.
[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 for at få diskoplysningerne.
[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
Ved at bruge win_command ansible-modulet kan du udføre kommandoer på fjernværten og få CPU-oplysninger, enhedsdetaljer og meget mere.
[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 for at få fjernsystemoplysninger.
[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ørende kommandoer
Uanset hvilke kommandoer du kører på et vindue, kan de køres gennem det mulige win_command-modul. Du skal blot angive kommandoen i din YAML-fil. Her opretter jeg bare en mappe.
[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 for at udføre 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
Et Windows-system har flere miljøvariabler, for eksempel JAVA_HOME. Ved at bruge win_environment ansible-modulet kan du tilføje eller ændre miljøvariabler på et Windows-system. I dette eksempel tilføjer jeg en ny variabel til listen over Windows-miljøvariabler.
[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 for at tilføje miljøvariablen på en ekstern Windows-maskine.
[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å til vinduet med miljøvariabler; du vil se den nye variabel, du lige har tilføjet, er til stede her.
Tilføj/Rediger registreringsdatabasen
win_regedit ansible modul bruges til at tilføje eller redigere registreringsdatabasen detaljer på en ekstern Windows-maskine. Du skal angive stien til registreringsdatabasen og indholdet, der skal tilføjes/opdateres. Her opretter jeg en ny registreringspost toadmin.dk inde i HKLM:SOFTWARE-stien og tilføjer derefter navn og data til denne registreringsdatabase.
[email protected] ~ $ vi registry.yml --- - hosts: win tasks: - name: Creating a registry win_regedit: path: HKLM:SOFTWAREtoadmin.dk - name: Modifying a registry, adding name and data win_regedit: path: HKLM:SOFTWAREtoadmin.dk name: Geek data: Flare
Kør ansible-playbook for at tilføje registreringsdatabasen.
[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
Hvis du går til registreringseditoren på fjernsystemet, kan du se, at dette register er blevet tilføjet med succes med navne- og dataparametre.
Slet log
win_eventlog ansible modul bruges til at tilføje, rydde eller fjerne Windows hændelseslogfiler fra Windows-systemet.
Gå til Windows Powershell, og skriv de EventLogs, der findes på den eksterne Windows-maskine.
PS C:Userstoadmin.dk> 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 vil jeg vise, hvordan du fjerner logfiler fra alle kilder til 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 for at fjerne Internet Explorer fra den eksterne Windows-maskine.
[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, hvis du viser EventLogs igen, vil du se, at Internet Explorer-logfiler er blevet fjernet.
PS C:Userstoadmin.dk> 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 handlede om Ansible playbooks, som kan bruges til fjernadministration af Windows. Gå videre og prøv disse spillebøger. Du kan også prøve andre Ansible Windows-moduler ledig.