From 2cfc069e215967ce081df1520be834982f9c64bb Mon Sep 17 00:00:00 2001
From: Borne Mace <borne.mace@oracle.com>
Date: Tue, 18 Oct 2016 16:22:02 -0700
Subject: [PATCH] Added support for a stop playbook in kolla

Behavior of stop playbook is very similar to the destroy
playbook.  This is meant when you may just want to bring down
the service for some sort of maintenance but not destroy all
the associated data. Also added support for the new playbook
into the kolla-ansible command.

Change-Id: Icf0ca91de71dc8ead3a024de3e5b9e49116560d1
Implements: blueprint ansible-stop-host-playbook
---
 ansible/roles/stop/tasks/copy_tools.yml      | 17 +++++++++++++++++
 ansible/roles/stop/tasks/main.yml            |  4 ++++
 ansible/roles/stop/tasks/stop_containers.yml |  4 ++++
 ansible/stop.yml                             |  4 ++++
 setup.cfg                                    |  1 +
 tools/kolla-ansible                          |  5 +++++
 tools/stop-containers                        | 18 ++++++++++++++++++
 7 files changed, 53 insertions(+)
 create mode 100644 ansible/roles/stop/tasks/copy_tools.yml
 create mode 100644 ansible/roles/stop/tasks/main.yml
 create mode 100644 ansible/roles/stop/tasks/stop_containers.yml
 create mode 100644 ansible/stop.yml
 create mode 100755 tools/stop-containers

diff --git a/ansible/roles/stop/tasks/copy_tools.yml b/ansible/roles/stop/tasks/copy_tools.yml
new file mode 100644
index 0000000000..e6a1ec62d8
--- /dev/null
+++ b/ansible/roles/stop/tasks/copy_tools.yml
@@ -0,0 +1,17 @@
+---
+- name: Creating /kolla-stop/tools directory on node
+  file:
+    state: directory
+    path: /tmp/kolla-stop/tools
+
+- name: Copying validate-docker-execute.sh file
+  copy:
+    src: ../tools/validate-docker-execute.sh
+    dest: /tmp/kolla-stop/tools
+    mode: 0755
+
+- name: Copying stop-containers file
+  copy:
+    src: ../tools/stop-containers
+    dest: /tmp/kolla-stop/tools
+    mode: 0755
diff --git a/ansible/roles/stop/tasks/main.yml b/ansible/roles/stop/tasks/main.yml
new file mode 100644
index 0000000000..ab994d374e
--- /dev/null
+++ b/ansible/roles/stop/tasks/main.yml
@@ -0,0 +1,4 @@
+---
+- include: copy_tools.yml
+
+- include: stop_containers.yml
diff --git a/ansible/roles/stop/tasks/stop_containers.yml b/ansible/roles/stop/tasks/stop_containers.yml
new file mode 100644
index 0000000000..7b679f8c43
--- /dev/null
+++ b/ansible/roles/stop/tasks/stop_containers.yml
@@ -0,0 +1,4 @@
+---
+- name: Stopping Kolla containers
+  command: /tmp/kolla-stop/tools/stop-containers
+
diff --git a/ansible/stop.yml b/ansible/stop.yml
new file mode 100644
index 0000000000..0ff7bf494f
--- /dev/null
+++ b/ansible/stop.yml
@@ -0,0 +1,4 @@
+---
+- hosts: all
+  roles:
+    - stop
diff --git a/setup.cfg b/setup.cfg
index bacc903c68..610126ac0b 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -30,6 +30,7 @@ data_files =
     share/kolla/tools = tools/cleanup-containers
     share/kolla/tools = tools/cleanup-host
     share/kolla/tools = tools/cleanup-images
+    share/kolla/tools = tools/stop-containers
     share/kolla/doc = doc/*
     share/kolla/etc_examples = etc/*
     share/kolla = tools/init-runonce
diff --git a/tools/kolla-ansible b/tools/kolla-ansible
index 16891734b2..fefd195218 100755
--- a/tools/kolla-ansible
+++ b/tools/kolla-ansible
@@ -50,6 +50,7 @@ Commands:
     post-deploy         Do post deploy on deploy node
     pull                Pull all images for containers (only pulls, no running container changes)
     reconfigure         Reconfigure OpenStack service
+    stop                Stop Kolla containers
     certificates        Generate self-signed certificate for TLS *For Development Only*
     upgrade             Upgrades existing OpenStack Environment
     genconfig           Generate configuration files for enabled OpenStack services
@@ -206,6 +207,10 @@ EOF
         ACTION="Reconfigure OpenStack service"
         EXTRA_OPTS="$EXTRA_OPTS -e action=reconfigure -e serial=30%"
         ;;
+(stop)
+        ACTION="Stop Kolla containers"
+        PLAYBOOK="${BASEDIR}/ansible/stop.yml"
+        ;;
 (certificates)
         ACTION="Generate TLS Certificates"
         PLAYBOOK="${BASEDIR}/ansible/certificates.yml"
diff --git a/tools/stop-containers b/tools/stop-containers
new file mode 100755
index 0000000000..f12c50f44a
--- /dev/null
+++ b/tools/stop-containers
@@ -0,0 +1,18 @@
+#!/bin/bash
+if [[ $(pgrep qemu) ]]; then
+    echo "Some qemu processes were detected."
+    echo "Docker will not be able to stop the nova_libvirt container with those running."
+    echo "Please clean them up before rerunning this script."
+    exit 1
+fi
+
+if [ -n "$1" ]; then
+    containers_to_stop=($(docker ps | grep -E "$1" | awk '{print $1}'))
+else
+    containers_to_stop=$(docker ps --filter "label=kolla_version" --format "{{.Names}}" -a)
+fi
+
+echo "Stopping containers..."
+(docker stop -t 30 ${containers_to_stop} 2>&1) > /dev/null
+
+echo "All containers stopped!"
-- 
GitLab