blog/content/posts/ansible-win-package-und-upgrades.md

41 lines
2.3 KiB
Markdown
Raw Normal View History

2020-02-27 14:39:18 +01:00
---
title: Ansible, win_package und Upgrades
slug: ansible-win-package-und-upgrades
tags:
- ansible
- windows
- linux
date: "2016-04-12T13:15:00+02:00"
author: marvin
draft: false
---
[![https://childofmoonlight.tumblr.com/post/44755113585/im-a-grumpy-guss-enjoy-this-gif-set-of-grumpy](https://media1.giphy.com/media/b5TmEXrjZ2II8/giphy.gif)](https://giphy.com/gifs/transparent-supernatural-b5TmEXrjZ2II8)
2016-04-12 12:23:48 +02:00
2016-04-12 15:51:41 +02:00
Das Ansible Modul [win_package](https://docs.ansible.com/ansible/win_package_module.html) beruht auf die Annahme das die `product_id` in der Registry vorhanden ist oder eben nicht. Davon macht es abhängig ob ein Paket installiert werden soll oder ob es schon vorhanden ist. Nun kann es ja auch vorkommen das man ein Paket, obwohl es laut Registry schon installiert ist, es noch einmal installieren möchte. Quasi ein Upgrade machen. Schön wäre es wenn er nicht nur schaut ob das Paket installiert ist, sondern auch die installierte Version. Daran könnte man Task Entscheidungen treffen. Dies mache ich nun manuell. Ein Beispiel für VLC:
2016-04-12 12:23:48 +02:00
```
---
# Der ganz normale Install-Task. Es wird nach der product_id gesucht gegebenenfalls installiert
- name: install
win_package:
product_id="VLC media player"
path="//myserver/updates/software/vlc/vlc-2.2.2-win32.exe"
arguments="/L=1031 /S"
# Ein Powershell Snippet das die Version des installierten Pakets in der Variabel "version" speichert
- name: check version
raw: (Get-ItemProperty "HKLM:\SOFTWARE\wow6432node\Microsoft\Windows\CurrentVersion\Uninstall\VLC media player").DisplayVersion
register: version
- name: upgrade
win_package:
product_id="VLC media player upgrade" # Muss anders sein damit das Paket nochmal installiert wird
path="//myserver/updates/software/vlc/vlc-2.2.2-win32.exe"
arguments="/L=1031 /S"
register: upgrade_results # Speichert das Ergebnis des Tasks in die Variabel "upgrade_results"
changed_when: '"was installed" in upgrade_results.msg' # Ändert den Status auf "changed" wenn der String "was installed" im Ergebnis ist
failed_when: '"was installed" not in upgrade_results.msg' # Status "failed" wenn "was installed" nicht im Ergebnis ist
ignore_errors: True # Sonst bricht er ab bevor der Task überhaupt die Variabel "upgrade_results" befüllt
when: '"2.2.2" not in version.stdout_lines' # Den Task nur ausführen wenn die Version eine andere ist
2020-02-27 14:39:18 +01:00
```