From c3e91725e25b4e7483bc99edc3f517eef798eb0a Mon Sep 17 00:00:00 2001
From: Mark Goddard <mark@stackhpc.com>
Date: Mon, 16 Oct 2017 17:39:45 +0100
Subject: [PATCH] Add support for --skip-tags argument

This allows for skipping tasks which match the provided tags, using
the ansible-playbook argument of the same name.

This can be useful in combination with --tags, to skip reconfiguration
of the common tasks:

kolla-ansible reconfigure --tags nova --skip-tags common

Change-Id: I766552f7ae4099da3d174759f4a609ffe8b4d89f
---
 releasenotes/notes/skip-tags-c0a4ac3900f33e7f.yaml | 5 +++++
 tools/kolla-ansible                                | 9 ++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)
 create mode 100644 releasenotes/notes/skip-tags-c0a4ac3900f33e7f.yaml

diff --git a/releasenotes/notes/skip-tags-c0a4ac3900f33e7f.yaml b/releasenotes/notes/skip-tags-c0a4ac3900f33e7f.yaml
new file mode 100644
index 000000000..f1d112f62
--- /dev/null
+++ b/releasenotes/notes/skip-tags-c0a4ac3900f33e7f.yaml
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Adds a new argument to the ``kolla-ansible`` command, ``--skip-tags TAGS``.
+    This argument is passed through directly to ``ansible-playbook``.
diff --git a/tools/kolla-ansible b/tools/kolla-ansible
index 8c2bd3cd7..72d8e86c8 100755
--- a/tools/kolla-ansible
+++ b/tools/kolla-ansible
@@ -40,6 +40,7 @@ Options:
     --key -k <key_path>                Specify path to ansible vault keyfile
     --help, -h                         Show this usage information
     --tags, -t <tags>                  Only run plays and tasks tagged with these values
+    --skip-tags <tags>                 Only run plays and tasks whose tags do not match these values
     --extra, -e <ansible variables>    Set additional variables as key=value or YAML/JSON passed to ansible-playbook
     --passwords <passwords_path>       Specify path to the passwords file
     --limit <host>                     Specify host to run plays
@@ -76,6 +77,7 @@ cat <<EOF
 --configdir
 --key -k
 --help -h
+--skip-tags
 --tags -t
 --extra -e
 --passwords
@@ -103,7 +105,7 @@ EOF
 }
 
 SHORT_OPTS="hi:p:t:k:e:v"
-LONG_OPTS="help,inventory:,playbook:,tags:,key:,extra:,verbose,configdir:,passwords:,limit:,vault-id:,ask-vault-pass,vault-password-file:,yes-i-really-really-mean-it,include-images,include-dev"
+LONG_OPTS="help,inventory:,playbook:,skip-tags:,tags:,key:,extra:,verbose,configdir:,passwords:,limit:,vault-id:,ask-vault-pass,vault-password-file:,yes-i-really-really-mean-it,include-images,include-dev"
 ARGS=$(getopt -o "${SHORT_OPTS}" -l "${LONG_OPTS}" --name "$0" -- "$@") || { usage >&2; exit 2; }
 
 eval set -- "$ARGS"
@@ -136,6 +138,11 @@ while [ "$#" -gt 0 ]; do
             shift 2
             ;;
 
+    (--skip-tags)
+            EXTRA_OPTS="$EXTRA_OPTS --skip-tags $2"
+            shift 2
+            ;;
+
     (--tags|-t)
             EXTRA_OPTS="$EXTRA_OPTS --tags $2"
             shift 2
-- 
GitLab