Damit Ansible Windows verwalten kann, muss auf dem Zielsystem WinRM(Windows Remote-Management) aktiviert werden. Dazu muss auf dem Zielsystem das PowerShellscript ConfigureRemotingForAnsible.ps1 in einer administrativen PowerShell gestartet werden. Bevor das Script ausgeführt werden kann, muss die Ausführung von nich signierten Scripten konfiguriert werden. Dies geschieht in einer administrativen Powershell mit dem Aufruf Set-ExecutionPolicy Unrestricted. Befindet sich zwischen Ansible Server und WinRM Client eine Firewall, so müssen die Ports 5985/tcp für HTTP und 5986/tcp für HTTPS freigeschaltet werden.
Die Dateistruktur auf unserem Ansible System sollte in etwa so aussehen:

ansible.cfg
[defaults]
host_key_checking = False
inventory = inventory
ask_pass = False
gathering = explicit
stdout_callback = yaml
bin_ansible_callbacks = True
[persistent_connection]
command_timeout = 180
connect_timeout = 100
connect_retry_timeout = 100
Auf dem Ansible System muss nun noch die winrm Unterstützung installiert werden:
pip install "pywinrm>=0.2.2"
dnf install http://www6.atomicorp.com/channels/atomic/centos/7/x86_64/RPMS/wmi-1.3.14-4.el7.art.x86_64.rpm
Die Zielsysteme und der notwendige administrative Account werden in der Datei inventory auf dem Ansible Rechner eingetragen.
Dieser Account muss auf dem Ansible Client angelegt und Mitglied der lokalen Admin Gruppe sein. Danach muss der Nutzer ansible noch Read und Execute Rechte bekommen. Dazu den Befehl winrm configSDDL default in einer administrativen PowerShell aufrufen und im folgenden Dialogfenster den Nutzer hinzufügen und die entsprechenden Rechte auswählen.

Für die WMI Abfrage mit Start -> Ausführen -> mmc die Managementconsole starten und das Snap-in WMI-Steuerung hinzufügen. Über das Kontextmenü Eigenschaften den Eintrag Sicherheit öffnen und dort den Zweig Root -> CIMV2 auswählen. Über den Button Sicherheit den Nutzer ansible hinzufügen und die Rechte Methoden ausführen, Konto aktivieren und Remoteaktivierung setzen.
[win]
192.168.110.82
[win:vars]
ansible_user=ansible
ansible_password=SECURE
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore
ansible_python_interpreter=python2.7
In dem nächsten Schritt werden die folgenden Aufgaben erledigt.
- Anlegen eines Ordners für die Installationsdatei
- Kopieren des NSClient auf das Zielsystem
- Installation des Clients
- Kopieren der nsclient.ini(Konfigurationsdatei) auf das Zielsystem
- Kopieren zusätzlicher Check-Scripte auf das Zielsystem
- Neustart des NSClient
- Löschen des Installationspfades
Dazu habe ich das Playbook install_monitoring.yml erstellt.
install_nsclient.yml
---
- name: Configure Monitoring on Windows Host
hosts: win
gather_facts: no
become: yes
become_method: enable
tasks:
- name: Meldung fuer angemeldete Nutzer - Installation Monitoring Features
win_msg:
display_seconds: 60
msg: Im Hintergrund erfolgt die Installation und die Konfiguration des NSClient, SNMP und WMI.
- name: Configure User ansible for WMI
win_user:
name: ansible
groups:
- Distributed Com-Benutzer
- Ereignisprotokolleser
- Leistungsprotokollbenutzer
- Leistungsüberwachungsbenutzer
groups_action: add
- name: Verzeichnis anlegen
win_file:
path: C:\_install
state: directory
- name: Start Copy NSClient Install-File
win_copy:
src: /opt/ansible_win/software/NSCP-0.5.2.35-x64.msi
dest: C:\_install\
- name: Install NSClient
win_package:
path: C:\_install\NSCP-0.5.2.35-x64.msi
state: present
- name: Start Copy nsclient.ini
win_copy:
src: /opt/ansible_win/nsclient.ini
dest: C:\Program Files\NSClient++\nsclient.ini
backup: yes
- name: Start Copy Check-Scripts
win_copy:
src: /opt/ansible_win/scripts/
dest: C:\Program Files\NSClient++\scripts\
backup: yes
- name: Restart NSClient
win_service:
name: nscp
state: restarted
- name: Loeschen des Installpfades
win_file:
path: C:\_install
state: absent
- name: Windows SNMP Feature Installation
win_feature:
name: SNMP-Service
include_management_tools: yes
state: present
include_sub_features: yes
- name: Setting SNMP Community and Manager
win_snmp:
community_strings:
- Hosting
permitted_managers:
- 172.16.3.76
action: set
- name: Configure Windows Firewall
win_firewall_rule:
name: Icinga-Monitoring
protocol: any
remoteip: 172.16.3.76
direction: in
action: allow
state: present
enabled: yes
Das Script wird mit folgendem Befehl aufgerufen:
ansible-playbook install_monitoring.yml