From 1bd9abbac066e75a428c663e231aa7fde4872c93 Mon Sep 17 00:00:00 2001
From: Jesse Pretorius <jesse.pretorius@rackspace.co.uk>
Date: Tue, 2 Aug 2016 13:40:54 +0100
Subject: [PATCH] Add ability to change apt/yum package state

The current method of installing the distribution packages required is
set in the tasks and cannot be changed by a deployer.

Currently the apt task always installs the latest package. This results
in unexpected binary changes when a deployer may simply be trying to
execute a configuration change.

This patch adds the ability for a deployer to change the desired state
so that the results are predictable.

Change-Id: I96f436aa64e65089af345d17af70291e30cc8cc6
---
 defaults/main.yml                                   |  3 +++
 .../notes/package-state-b97c7b252aee4c20.yaml       | 13 +++++++++++++
 tasks/designate_install_apt.yml                     |  2 +-
 3 files changed, 17 insertions(+), 1 deletion(-)
 create mode 100644 releasenotes/notes/package-state-b97c7b252aee4c20.yaml

diff --git a/defaults/main.yml b/defaults/main.yml
index 0b9711f..0388fff 100644
--- a/defaults/main.yml
+++ b/defaults/main.yml
@@ -16,6 +16,9 @@
 ## Verbosity Options
 debug: False
 
+# Set the package install state for distribution packages
+# Options are 'present' and 'latest'
+designate_package_state: "latest"
 
 # These variables are used in 'developer mode' in order to allow the role
 # to build an environment directly from a git source without the presence
diff --git a/releasenotes/notes/package-state-b97c7b252aee4c20.yaml b/releasenotes/notes/package-state-b97c7b252aee4c20.yaml
new file mode 100644
index 0000000..8433b10
--- /dev/null
+++ b/releasenotes/notes/package-state-b97c7b252aee4c20.yaml
@@ -0,0 +1,13 @@
+---
+features:
+  - The os_designate role now supports the ability to configure whether
+    apt/yum tasks install the latest available package, or just ensure
+    that the package is present. The default action is to ensure that
+    the latest package is present. The action taken may be changed to
+    only ensure that the package is present by setting
+    ``designate_package_state`` to ``present``.
+upgrade:
+  - The os_designate role always checks whether the latest package is
+    installed when executed. If a deployer wishes to change the check to
+    only validate the presence of the package, the option
+    ``designate_package_state`` should be set to ``present``.
diff --git a/tasks/designate_install_apt.yml b/tasks/designate_install_apt.yml
index 6c5781b..e02296c 100644
--- a/tasks/designate_install_apt.yml
+++ b/tasks/designate_install_apt.yml
@@ -28,7 +28,7 @@
 - name: Install apt packages
   apt:
     pkg: "{{ item }}"
-    state: latest
+    state: "{{ designate_package_state }}"
   register: install_packages
   until: install_packages|success
   retries: 5