Ansible Playbooks bieten ein wiederholbares, wiederverwendbares, einfaches Konfigurationsmanagement und ein Bereitstellungssystem für mehrere Computer, das sich gut für die Bereitstellung komplexer Anwendungen eignet. Wenn Sie eine Aufgabe mehr als einmal mit Ansible ausführen müssen, schreiben Sie ein Playbook und stellen Sie es unter Quellcodeverwaltung. Anschließend können Sie das Playbook verwenden, um eine neue Konfiguration zu veröffentlichen oder die Konfiguration von Remote-Systemen zu bestätigen. Die Playbooks im Repository ansible-examples veranschaulichen viele nützliche Techniken. Sie können sich diese beim Lesen der Dokumentation auf einer anderen Registerkarte ansehen.

 

Playbook Ausführung


ansible-playbook -i [inventory file] [playbook file]

ansible-playbook -i inv update_software.yml

Verzeichnis anlegen 
win_create_dir.yml 
---
- name: win_file module demo
hosts: windows
vars:
¦ mydir: 'C:\Users\khg\Desktop\test'
tasks:
¦ - name: Create a directory
¦ ¦ ansible.windows.win_file:
¦ ¦ ¦ path: "{{ mydir }}"
¦ ¦ ¦ state: directory
Benutzer anlegen

win_add_user.yml

---
- name: windows user add
hosts: windows
vars:
¦ usr_name: 'sepp'
¦ usr_fullname: 'Josef Maier'
¦ usr_password: 'start01'
¦ usr_groups: "Benutzer"
tasks:
¦ - name: create local user
¦ ¦ ansible.windows.win_user:
¦ ¦ ¦ name: "{{ usr_name }}"
¦ ¦ ¦ password: "{{ usr_password }}"
¦ ¦ ¦ groups: "{{ usr_groups }}"
¦ ¦ ¦ update_password: on_create
¦ ¦ ¦ password_expired: true
¦ ¦ ¦ state: present
HD Parameter auslesen

win_disk.yml

---
- hosts: windows
  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'
Windows Update herunterladen und installieren

win_update.yml

---
- name: windows rolling update
hosts: windows
tasks:
¦ - name: Install all critical and security updates
¦ ¦ ansible.windows.win_updates:
¦ ¦ ¦ category_names:- Updates  
¦ ¦ ¦ ¦ - CriticalUpdates
¦ ¦ ¦ ¦ - SecurityUpdates
¦ ¦ ¦ ¦ - UpdateRollups
¦ ¦ ¦ ¦ - Application
¦ ¦ ¦ ¦ - Definition Updates
¦ ¦ ¦ state: installed
¦ ¦ ¦ reboot: true
¦ ¦ ¦ log_path: C:\ansible.txt
Registry Eintrag

win_add_reg_key.yml

---
- name: Add or update registry path test, with entry 'hello', and containing 'world'
hosts: windows
tasks:
¦ - name: Add a key
¦ ¦ win_regedit:
¦ ¦ ¦ path: HKCU:\Software\test
¦ ¦ ¦ name: Hello
¦ ¦ ¦ data: world

Ansible execute Command

win_command.yml

---
- name: Ansible win_command module example
hosts: windows # host group to run the module on tasks: - name: run an executable command on a remote Windows system win_command: netstat -e # win_command is a Windows module.

Ausgabe
changed: [win10] => {"changed": true, "cmd": "netstat -e", "delta": "0:00:00.187518", "end": "2022-07-15 04:52:53.593550", "rc": 0,
"start": "2022-07-15 04:52:53.406032", "stderr": "", "stderr_lines": [], "stdout": "Schnittstellenstatistik\r\n\r\n
                           Empfangen           Gesendet\r\n\r\nBytes                    1013044184       165870696\r\nUnicastpakete
                916108          613148\r\nNicht-Unicastpakete             632            1484\r\nVerworfen                         0
               0\r\nFehler                            0               0\r\nUnbekannte Protok.                0\r\n", "stdout_lines":
["Schnittstellenstatistik", "", "                           Empfangen           Gesendet", "", "Bytes                    1013044184
       165870696", "Unicastpakete                916108          613148", "Nicht-Unicastpakete             632            1484", "Verworfen
                         0               0", "Fehler

Das ist etwas schwer zu lesen, um die Ausgabe lesebarer zu gestalten kann man sie im YAML Format ausgeben lassen.
Entweder kann man dem Befehl zum ausführen des Playbooks folgendes voranstellen:ANSIBLE_STDOUT_CALLBACK=yaml
Man kann dies auch in der Ansible Konfigurationsdatei ansible.cfg setzen um die Ausgabe gloabl umzustellen.

ANSIBLE_STDOUT_CALLBACK=yaml ansible-playbook -vv -i inv win_command.yml

Ausgabe

changed: [win10] => changed=true
cmd: netstat -e
delta: '0:00:00.203184'
end: '2022-07-15 05:05:19.913808'
rc: 0
start: '2022-07-15 05:05:19.710623'
stderr: ''
stderr_lines: <omitted>
stdout: |-
Schnittstellenstatistik

Empfangen Gesendet

Bytes 1087396500 176561964
Unicastpakete 981448 646728
Nicht-Unicastpakete 928 1800
Verworfen 0 0
Fehler 0 0
Unbekannte Protok. 0
stdout_lines: <omitted>

Grant Rights to Share

win_shares.yml

---
- name: win_share module demo
  hosts: windows
  vars:
   
  tasks:
    - name: Add secret share
      ansible.windows.win_share:
        name: internal
        description: top secret share
        path: C:\internal
        list: no
        full: khg
Run Powershell Script

win_powershell.yml

---
- name: win_powershell module demo
hosts: windows
vars:
#mydir: 'C:\Users\khg\Desktop\test'
tasks:
- name: Run PowerShell script in PowerShell 7
ansible.windows.win_powershell:
script: |
$PSVersionTable.PSVersion.Major
executable: pwsh.exe
arguments:
- -ExecutionPolicy
- ByPass
register: pwsh_output
failed_when:
- pwsh_output.output[0] != 7