Vorbereitung Windows Server/Clients für die Ansible Automation

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.

  1. Anlegen eines Ordners für die Installationsdatei
  2. Kopieren des NSClient auf das Zielsystem
  3. Installation des Clients
  4. Kopieren der nsclient.ini(Konfigurationsdatei) auf das Zielsystem
  5. Kopieren zusätzlicher Check-Scripte auf das Zielsystem
  6. Neustart des NSClient
  7. 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