Hi all,
Before embarking on developing changes to some existing Win modules and creating new modules for some specific idempotent handling it’d be good to get some comments on the following. Some items numbered for referenceability.
Background
One of my company’s key 3rd-party software suppliers delivers .msi packages. They are not good at reliably updating the imbeded ProductVersion and nor do they reliably update FileVersion for .exe/.dll files.
We’re in the process of building 80+ roles across 10 or so server types. These systems have many administrator/operations people that have varying perspectives on the importance of controlled deployments/configuration management.
We are wanting to implement compliance checking via Ansible. Additionally, since we have a design that combines deployment of a software component AND it’s configuration in the one role, we are wanting reliable idempotentcy
(component software and configuration can change independently)
Module Changes
In summary we’re looking to add creates_path/creates_filehash to a number of modules, as well as some other changes, and develop new supporting modules
-
win_package
-
creates_displayversion (was https://github.com/ansible/ansible/pull/42468)
-
creates_displayname (as above)
-
creates_filehash (would be hashcode result of Get-FileHash for file/folder specified in creates_path - default to MD5 algorithm - see https://gist.github.com/straff/796003e87132a466a8cf996eacff80b0)
-
win_unzip
-
creates_filehash (as above - for file specified in creates)
-
win_command/win_shell - as per win_unzip
-
win_get_url
-
creates or creates_path
-
creates_filehash (as above)
the idea here is not to download large installers (e.g. Ora 12c client at 1.2GB) given already installed
New modules
-
win_filehash
-
path - path to file for Get-FileHash
-
algorithm - as per Get-FileHash - default to MD5
-
win_displayversion
-
displayname - partial name of installed software as per Programs/Features - ref https://gist.github.com/straff/ba3630a39ef9e1450f7e8bdd3bfb0b32
Considerations
- is there a better place than this forum for discussing this ?
- develop this as a single PR, or one for each of win_package, unzip, command, shell, get_url and one to cover both new win_filehash and win_displayversion ?
- much of this can be achieved with tasks running win_command/shell and subsequent ‘when:’ logic, and in the case of win_get_url, it’s always followed by some other tasks - these could be in a block with ‘when:’, but
that approach seems second-class compared to above ideas - likely to develop the above even if only some or none gets back into official Ansible
- could avoid supporting folders for the hash function
- use MD5 only to keep it simple rather than have an ‘algorithm’ parameter
Regards, Straff