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.
Ausgabechanged: [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