Ich werde Ihnen einige Operationen zeigen, die ein Administrator auf einem entfernten Windowssystem mit Hilfe von Ansible-Playbook durchführen kann
Ansible ist heute eines der am häufigsten verwendeten DevOps-Tools auf dem Markt. Es stellt eine Vielzahl von Windows-Modulen zur Verfügung, die zur Konfiguration und Verwaltung des Windows Servers verwendet werden. Ich gehe davon aus, dass Sie Ansible bereits auf 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 erstaunt sein, wie einfach es ist, Windows mit Hilfe von Ansible zu verwalten
Die IP-Adresse meines Ansible Windows-Controllers ist 192.168.0.106 und die IP-Adresse meines entfernten Windows-Systems ist 192.168.0.102. Bevor Sie beginnen, stellen Sie sicher, dass Sie ein win_ping
Modul ausführen, um zu überprüfen, ob Sie eine Verbindung zu einem Remote-Windows-Server herstellen können oder nicht
Geekflare@MSEDGEWIN10 ~
$
ansible win -m win_ping
192.168.0.102 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Meine Verbindung zu einem Remote-Host ist erfolgreich
Beginnen wir auch mit den Ansible Playbooks...
Kopieren von Dateien
win_copy ist ein ansibles Modul, das eine Datei vom lokalen Server auf einen entfernten Windows-Host kopiert. Ich werde dieses Modul verwenden, um eine einzelne PDF-Datei zu kopieren.
Verwenden Sie den unten stehenden YAML-Code, geben Sie den Quell- und Zielpfad an
Geekflare@MSEDGEWIN10 ~
$
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
Geekflare@MSEDGEWIN10 ~
$
ansible-playbook copy.yml
PLAY
<x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK
[Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]
AUFGABE [
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 i
Die Datei wurde erfolgreich an den Zielort auf einem entfernten Windowssystem kopiert.
MSI installieren/deinstallieren
Um eine Anwendung mit Hilfe der MSI-Datei zu installieren, müssen Sie mit win_get_url den Pfad der herunterzuladenden MSI-Datei angeben und dann das win_package Modul zur Installation verwenden. Der vorliegende Zustand bedeutet, dass das MSI auf dem Rechner installiert wird und die Anwendung sich im gegenwärtigen Zustand befindet.
In diesem Fall installiere ich Apache
YAML-Code muss verwendet werden
Geekflare@MSEDGEWIN10 ~
$ 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_examples\tpd-2.2.25-win32-x86-no_ssl.msi
- name: Install MSI
win_package:
path: C:ansible_examples\tpd-2.2.25-win32-x86-no_ssl.msi
state: present
Führen Sie das Ansible-Playbook zur Installation mit MSI aus
Geekflare@MSEDGEWIN10 ~
$ 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
[MSI installieren] ***************************************************************************************************************************
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:\sers geekflare>cd C:\gram Files (x86)\Apache Software Foundation\Apache2.2.bbin
C
:\gram Files (x86)\Apache Software Foundation\Apache2.2.bbin>httpd -v
Server version: Apache/2.2.25 (Win32)
Server built: Jul 10 2013 01:52:12
Sie können auch Anwendungen über MSI mit Argumenten installieren. Das folgende Beispiel ist das gleiche wie oben, aber statt eines Zustands verwenden wir ein Installationsargument, um den 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_examples\tpd-2.
2.
25-win32-x86-no_ssl.msi
- name: Install MSI
win_package:
path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
arguments:
- /install
- /passive
- /norestart
Um eine Anwendung mit Hilfe der MSI-Datei zu deinstallieren, müssen Sie das win_package-Modul verwenden. Der Zustand abwesend bedeutet, dass die Anwendung über die MSI-Datei deinstalliert wird.
Hier bin ich dabei, Apache zu deinstallieren
Geekflare@MSEDGEWIN10 ~
$
vi uninstall_msi.yml
—
- name: UnInstalling Apache MSI
hosts: win
tasks:
- name: UnInstall MSI
win_package:
path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
state: absent
Führen Sie das Ansible-Playbook zur Deinstallation mit MSI aus
Geekflare@MSEDGEWIN10 ~
$ 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 nun die Apache-Version überprüfe, erhalte ich die folgende Ausgabe, da die Anwendung nicht installiert wurde
C:\gram Files (x86)\Apache Software Foundation\Apache2.2\bin>httpd -v 'httpd' wird nicht als interner oder externer Befehl,
operables Programm oder Batchdatei erkannt
Software deinstallieren (.EXE)
Sie können auch Software mit einer .exe-Datei über die Produktidentifikation der Software deinstallieren
Geekflare@MSEDGEWIN10 ~
$
vi uninstall.yml
—
--- hosts: win
tasks:
- name: Uninstall 7-Zip from the exe
win_package:
path: C:\gram Files7-Zip\Uninstall.exe
product_id: 7-Zip
arguments: /S
state: absent
Führen Sie das Ansible-Playbook aus, um 7-Zip zu deinstallieren
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook uninstall.yml
PLAY <x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x> *************************************************************************************************************************************************************************************
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 anhalten/starten/neustarten
das win_service ansible Modul wird verwendet, um einen Dienst zu starten, zu stoppen oder wieder zu starten. Hier werde ich Ihnen zeigen, wie Sie den Tomcat-Dienst stoppen können
Sie müssen den Namen des Dienstes in der YAML-Datei angeben und den Status auf Stop setzen.
Geekflare@MSEDGEWIN10 ~
$
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
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook service.yml
PLAY <x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
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 auf gestartet oder wieder gestartet oder pausiert setzen, um den Status des Dienstes zu ändern.
Sammeln von Fakten
Mit Hilfe des Moduls win_disk_facts ansible können Sie alle Festplatteninformationen des Zielhosts abrufen
Geekflare@MSEDGEWIN10 ~
$ vi disk.yml
---
- hosts: win
tasks:
- name: Get disk facts
win_disk_facts:
- name: Output first disk size
debug:
var: ansible_facts.disks<x>[0]</x>.size
- name: Konvertiert erste Systemplatte in verschiedene Formate
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 Platteninformationen zu erhalten
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook disk.yml
PLAY [ <x><x><x><x><x><x><x><x>win]</x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
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<x>[0]</x>.size": "1000204886016"
}
TASK [Convert first system disk into various formats] ****************************************************************************************
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 Hilfe des Moduls win_Befehl ansible können Sie Befehle auf dem entfernten Host ausführen und CPU-Informationen, Gerätedetails und vieles mehr erhalten
Geekflare@MSEDGEWIN10 ~
$
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-System-Informationen zu erhalten
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook check.yml
PLAY [ <x><x><x><x><x><x><x><x>win]</x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]
TASK [Get facts] ************************************************************************************************************************
changed: [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 \r\r\rIntel64 Family 6 Model 142 Stepping 9 CPU0 2712 Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2 OK \rr\rr\rr" \rr
}
PLAY
RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=1 unreachable=0 failed=0
skipped=0 rescued=0
ignored=0
Laufende Befehle
Alle Befehle, die Sie auf einem Fenster ausführen, können über das ansible win_Befehl Modul ausgeführt werden. Sie müssen nur den Befehl in Ihrer YAML-Datei angeben. Hier habe ich nur ein Verzeichnis erstellt
Geekflare@MSEDGEWIN10 ~
$
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
Starten Sie das Ansible-Playbook, um die win_command-Operation auszuführen
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook commands.yml
PLAY <x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
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, z.B. JAVA_HOME. Mit Hilfe des Moduls win_umwelt ansible können Sie Umgebungsvariablen auf einem Windowssystem hinzufügen oder ändern. In diesem Beispiel füge ich eine neue Variable zur Liste der Windows-Umgebungsvariablen hinzu
Geekflare@MSEDGEWIN10 ~
$
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-Rechner hinzuzufügen
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook env.yml
PLAY <x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
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 Umgebungsvariablen; Sie werden sehen, dass die neu hinzugefügte Variable hier vorhanden ist
Registry hinzufügen/bearbeiten
das Modul win_regedit ansible wird verwendet, um Registrierungsdaten auf einem entfernten Windows-Rechner hinzuzufügen oder zu bearbeiten. Sie müssen den Pfad der Registry und den Inhalt angeben, der hinzugefügt/aktualisiert werden soll. Hier erstelle ich einen neuen Registry-Eintrag GeekFlare im Pfad HKLM:\SOFTWARE und füge dann den Namen und die Daten zu dieser Registry hinzu
Geekflare@MSEDGEWIN10 ~
$ vi registry.yml
—
- hosts: win
tasks:
- name: Creating a registry
win_regedit:
path: HKLM:\SFTWARE\GeekFlare
- name: Modifying a registry, adding name and data
win_regedit:
path: HKLM:\SFTWARE\GeekFlare
name: Geek
data: Flare
Führen Sie das Ansible-Playbook aus, um die Registry hinzuzufügen
Geekflare@MSEDGEWIN10 ~
$ ansible-playbook registry.yml
PLAY [ <x><x><x><x><x><x><x><x>win]</x></x></x></x></x></x></x></x> ***********************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]
TASK [Creating a registry] *******************************************************************************************************************
changed: [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 entfernten System den Registrierungs-Editor aufrufen, können Sie sehen, dass diese Registrierung erfolgreich mit Namen und Datenparametern ergänzt wurde
Log löschen
das Modul win_eventlog ansible wird zum Hinzufügen, Löschen oder Entfernen von Windows-Ereignisprotokollen aus dem Windowssystem verwendet
Gehen Sie zu Windows Powershell und hören Sie die Ereignisprotokolle auf, die auf dem entfernten Windows-Rechner vorhanden sind
PS C:\/Users\/Users Geekflare>. 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
Nun werde ich Ihnen zeigen, wie Sie Logs aus allen Quellen für den Internet Explorer entfernen können
Geekflare@MSEDGEWIN10 ~
$
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-Rechner zu entfernen
Geekflare@MSEDGEWIN10 ~
$
ansible-playbook log.yml
PLAY
[ <x><x><x><x><x><x><x><x>win]</x></x></x></x></x></x></x></x> *************************************************************************************************************************************************************************************
TASK
[Gathering Facts] *************************************************************************************************************************************************************************
ok: [192.168.0.102]
TASK
[Remove Internet Explorer Logs] **********************************************************************************************************************************************
changed: [192.168.0.102]
PLAY
RECAP ***********************************************************************************************************************************************************
Wenn Sie nun die EventLogs erneut auflisten, werden Sie sehen, dass die Internet Explorer Logs entfernt wurden
PS C:\/Users\/Users Geekflare>. 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 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
So, das war alles über Ansible Playbooks, die für die Remote-Windows-Verwaltung verwendet werden können. Gehen Sie vor und probieren Sie diese Playbooks aus. Sie können auch andere verfügbare Ansible Windows-Modul ausprobieren.
-
Avi ist ein Technik-Enthusiast mit Fachkenntnissen in Trendtechnologien wie DevOps, Cloud Computing, Big Data und vielen mehr. Seine Leidenschaft ist es, Spitzentechnologien zu lernen und sein Wissen mit anderen zu teilen, indem er... mehr lesen