Ich zeige Ihnen mehrere Operationen, die ein Administrator mit Ansible-Playbook auf einem Remote-Windows-System ausführen kann.
Ansible ist heute eines der am häufigsten verwendeten DevOps-Tools auf dem Markt. Es bietet eine Reihe von Windows-Modulen, die zum Konfigurieren und Verwalten des Windows-Servers verwendet werden. Ich gehe davon aus, dass Sie Ansible bereits unter Windows installiert haben, von wo aus Sie die Windows-Server verwalten möchten.
Im Folgenden sind einige der häufig verwendeten Aufgaben aufgeführt, die von Windows-Administratoren täglich ausgeführt werden. Sie werden staunen, wie einfach sich Windows mit Ansible administrieren lässt.
Die IP-Adresse meines Ansible-Windows-Controller-Computers lautet 192.168.0.106, und die IP-Adresse meines Remote-Windows-Systems lautet 192.168.0.102. Bevor Sie beginnen, stellen Sie sicher, dass Sie ein win_ping-Modul ausführen, um zu prüfen, ob Sie eine Verbindung zum Windows-Remoteserver herstellen können oder nicht.
[email protected] ~ $ ansible win -m win_ping 192.168.0.102 | SUCCESS => { "changed": false, "ping": "pong" }
Meine Verbindung zu einem Remote-Host ist erfolgreich.
Fangen wir also mit Ansible Playbooks an…
Inhaltsverzeichnis
Kopieren von Dateien
win_copy ist ein Ansible-Modul, das eine Datei vom lokalen Server auf einen entfernten Windows-Host kopiert. Ich werde dieses Modul verwenden, um ein einzelnes PDF zu kopieren.
Verwenden Sie den folgenden YAML-Code und geben Sie die Quell- und Zielpfade an.
[email protected] ~ $ vi copy.yml --- - hosts: win tasks: - name: Copy File win_copy: src: C:output.pdf dest: C:ansible_examples remote_src: yes
Führen Sie das Ansible-Playbook für win_copy aus.
[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
Die Datei wurde erfolgreich an den Zielspeicherort auf einem entfernten Windows-System kopiert.
MSI installieren/deinstallieren
Um eine Anwendung mithilfe der MSI-Datei zu installieren, müssen Sie win_get_url verwenden, um den Pfad der herunterzuladenden MSI-Datei anzugeben, und dann das Modul win_package verwenden, um sie zu installieren. Der Status „Vorhanden“ bedeutet, dass die MSI auf dem Computer installiert wird und sich die Anwendung im aktuellen Status befindet.
Hier installiere ich Apache.
Zu verwendender YAML-Code:
[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
Führen Sie das Ansible-Playbook aus, um es mit MSI zu installieren.
[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
Gehen Sie nun zum Windows-System und prüfen Sie, ob die Apache-Anwendung erfolgreich installiert wurde.
C:Userswdzwdz>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
Sie können Anwendungen auch mithilfe von MSI mit Argumenten installieren. Unten ist das gleiche Beispiel wie oben, aber anstelle eines Zustands verwenden wir ein Installationsargument, um Apache zu installieren.
Zu verwendender YAML-Code:
--- - 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
Um eine Anwendung mithilfe der MSI-Datei zu deinstallieren, müssen Sie das win_package-Modul verwenden. Der Status nicht vorhanden bedeutet, dass die Anwendung mithilfe der MSI-Datei deinstalliert wird.
Hier deinstalliere ich 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
Führen Sie das Ansible-Playbook aus, um es mit MSI zu deinstallieren.
[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
Wenn ich jetzt die Apache-Version überprüfe, erhalte ich die folgende Ausgabe, wenn die Anwendung deinstalliert wurde.
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.
Software deinstallieren (.EXE)
Sie können Software auch mit einer .exe-Datei deinstallieren, indem Sie die Produkt-ID dieser Software verwenden.
[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
Führen Sie das Ansible-Playbook aus, um 7-Zip zu deinstallieren.
[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-Dienste stoppen/starten/neu starten
Das ansible Modul win_service wird verwendet, um einen Dienst zu starten, zu stoppen oder neu zu starten. Hier zeige ich Ihnen, wie Sie den Tomcat-Dienst stoppen können.
Sie müssen den Dienstnamen in der YAML-Datei erwähnen und den Status auf Stopp setzen.
[email protected] ~ $ vi service.yml --- - hosts: win tasks: - name: Stop service Tomcat win_service: name: Tomcat8 state: stopped
Führen Sie das Ansible-Playbook aus, um den Tomcat-Dienst zu stoppen.
[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
Wenn Sie den Tomcat-Dienst auf dem Windows-System überprüfen, befindet er sich jetzt im gestoppten Status.
Sie können den Status als gestartet, neu gestartet oder angehalten definieren, um den Status des Dienstes zu ändern.
Fakten sammeln
Mit dem ansiblen Modul win_disk_facts können Sie alle Festplatteninformationen des Zielhosts abrufen.
[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'
Führen Sie das Ansible-Playbook aus, um die Datenträgerinformationen abzurufen.
[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
Mit dem Ansible-Modul win_command können Sie Befehle auf dem Remote-Host ausführen und CPU-Informationen, Gerätedetails und vieles mehr abrufen.
[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 }}"
Führen Sie das Ansible-Playbook aus, um Remote-Systeminformationen abzurufen.
[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
Ausführen von Befehlen
Welche Befehle Sie auch immer in einem Fenster ausführen, sie können über das ansible win_command-Modul ausgeführt werden. Sie müssen nur den Befehl in Ihrer YAML-Datei angeben. Hier erstelle ich nur ein Verzeichnis.
[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
Führen Sie das Ansible-Playbook aus, um die win_command-Operation auszuführen.
[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
Umgebungsvariablen
Ein Windows-System hat mehrere Umgebungsvariablen, zum Beispiel JAVA_HOME. Mit dem ansiblen Modul win_environment können Sie Umgebungsvariablen auf einem Windows-System hinzufügen oder ändern. In diesem Beispiel füge ich der Liste der Windows-Umgebungsvariablen eine neue Variable hinzu.
[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
Führen Sie das Ansible-Playbook aus, um die Umgebungsvariable auf einem Remote-Windows-Computer hinzuzufügen.
[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
Gehen Sie zum Fenster der Umgebungsvariablen; Sie werden sehen, dass die neue Variable, die Sie gerade hinzugefügt haben, hier vorhanden ist.
Registrierung hinzufügen/bearbeiten
Das ansible Modul win_regedit wird verwendet, um Registrierungsdetails auf einem entfernten Windows-Rechner hinzuzufügen oder zu bearbeiten. Sie müssen den Pfad der Registrierung und den Inhalt angeben, der hinzugefügt/aktualisiert werden soll. Hier erstelle ich einen neuen Registrierungseintrag wdzwdz im Pfad HKLM:SOFTWARE und füge dann Namen und Daten zu dieser Registrierung hinzu.
[email protected] ~ $ vi registry.yml --- - hosts: win tasks: - name: Creating a registry win_regedit: path: HKLM:SOFTWAREwdzwdz - name: Modifying a registry, adding name and data win_regedit: path: HKLM:SOFTWAREwdzwdz name: Geek data: Flare
Führen Sie das Ansible-Playbook aus, um die Registrierung hinzuzufügen.
[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
Wenn Sie auf dem Remote-System zum Registrierungseditor wechseln, können Sie sehen, dass diese Registrierung erfolgreich mit Namens- und Datenparametern hinzugefügt wurde.
Protokoll löschen
Das ansible Modul win_eventlog wird zum Hinzufügen, Löschen oder Entfernen von Windows-Ereignisprotokollen aus dem Windows-System verwendet.
Gehen Sie zu Windows Powershell und listen Sie die EventLogs auf, die auf dem Remote-Windows-Computer vorhanden sind.
PS C:Userswdzwdz> 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
Jetzt werde ich zeigen, wie man Protokolle aus allen Quellen für Internet Explorer entfernt.
[email protected] ~ $ vi log.yml --- - hosts: win tasks: - name: Remove Internet Explorer Logs win_eventlog: name: Internet Explorer state: absent
Führen Sie das Ansible-Playbook aus, um den Internet Explorer vom Remote-Windows-Computer zu entfernen.
[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
Wenn Sie die EventLogs jetzt erneut auflisten, sehen Sie, dass Internet Explorer-Protokolle entfernt wurden.
PS C:Userswdzwdz> 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
Das war also alles über Ansible-Playbooks, die für die Remote-Windows-Verwaltung verwendet werden können. Probieren Sie diese Playbooks aus. Sie können auch andere ausprobieren Ansible Windows-Module verfügbar.