From cf37e6c931645339fc5d7b5351fb14a2ca3283c0 Mon Sep 17 00:00:00 2001
From: root <root@srv2.soctools.grena.ge>
Date: Tue, 20 Dec 2022 14:49:36 +0400
Subject: [PATCH] add option to stop docker containers without destroy

---
 roles/docker/tasks/cassandra.yml             | 28 +++++++++++-
 roles/docker/tasks/cortex.yml                | 28 +++++++++++-
 roles/docker/tasks/haproxy.yml               | 47 +++++++++++++++++++-
 roles/docker/tasks/keycloak.yml              | 24 +++++++++-
 roles/docker/tasks/misp.yml                  | 21 ++++++++-
 roles/docker/tasks/mysql.yml                 | 23 +++++++++-
 roles/docker/tasks/networkremove.yml         |  2 +-
 roles/docker/tasks/nifi.yml                  | 28 +++++++++++-
 roles/docker/tasks/opensearch-dashboards.yml | 23 +++++++++-
 roles/docker/tasks/opensearches.yml          | 28 +++++++++++-
 roles/docker/tasks/thehive.yml               | 24 +++++++++-
 roles/docker/tasks/zookeeper.yml             | 24 +++++++++-
 soctools.yml                                 |  2 +-
 13 files changed, 281 insertions(+), 21 deletions(-)

diff --git a/roles/docker/tasks/cassandra.yml b/roles/docker/tasks/cassandra.yml
index bfb41cc..af7bd0e 100644
--- a/roles/docker/tasks/cassandra.yml
+++ b/roles/docker/tasks/cassandra.yml
@@ -15,11 +15,35 @@
   tags:
     - start-docker-containers
 
-- name: Disconnect cassandra containers from network and remove
+- name: Stop cassandra containers
   docker_container:
     name: "{{ item }}"
-    state: absent
+    hostname: "{{ item }}"
+    image: "{{ cassandra_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    volumes:
+      - "{{cassandra_name}}:/var/lib/cassandra"
+    interactive: "yes"
+    state: stopped
   with_items: "{{ groups['cassandra'] }}"
   tags:
     - stop-docker-containers
 
+
+- name: Destroy cassandra containers
+  docker_container:
+    name: "{{ item }}"
+    hostname: "{{ item }}"
+    image: "{{ cassandra_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    volumes:
+      - "{{cassandra_name}}:/var/lib/cassandra"
+    interactive: "yes"
+    state: absent
+  with_items: "{{ groups['cassandra'] }}"
+  tags:
+    - destroy-docker-containers
diff --git a/roles/docker/tasks/cortex.yml b/roles/docker/tasks/cortex.yml
index ec2ff38..5c3161b 100644
--- a/roles/docker/tasks/cortex.yml
+++ b/roles/docker/tasks/cortex.yml
@@ -15,10 +15,34 @@
   tags:
     - start-docker-containers
 
-- name: Disconnect cortex containers from network and remove
+- name: Stop cortex containers
   docker_container:
     name: "{{ item }}"
-    state: absent
+    hostname: "{{ item }}"
+    image: "{{ cortex_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    volumes:
+      - "{{item}}:/var/lib/elasticsearch/"
+    interactive: "yes"
+    state: stopped
   with_items: "{{ groups['cortex'] }}"
   tags:
     - stop-docker-containers
+
+- name: Destroy cortex containers
+  docker_container:
+    name: "{{ item }}"
+    hostname: "{{ item }}"
+    image: "{{ cortex_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    volumes:
+      - "{{item}}:/var/lib/elasticsearch/"
+    interactive: "yes"
+    state: absent
+  with_items: "{{ groups['cortex'] }}"
+  tags:
+    - destroy-docker-containers
diff --git a/roles/docker/tasks/haproxy.yml b/roles/docker/tasks/haproxy.yml
index 6353030..1c7b765 100644
--- a/roles/docker/tasks/haproxy.yml
+++ b/roles/docker/tasks/haproxy.yml
@@ -25,9 +25,54 @@
   tags:
     - start-docker-containers
 
+- name: Stop haproxy container
+  docker_container:
+    name: "{{ haproxy_name }}"
+    hostname: "{{ haproxy_name }}"
+    image: "{{ haproxy_img }}"
+    networks:
+      - name: "{{ soctools_netname}}"
+    networks_cli_compatible: yes
+    published_ports:
+      - "8888:8888"
+      - "9443:9443"
+      - "9200:9200"
+      - "7750:7750"
+      - "9000:9000"
+      - "9001:9001"
+      - "12443:12443"
+      - "5601:5601"
+      - "5443:5443"
+      - "6443:6443"
+      - "5000-5099:5000-5099"
+      - "6000-6099:6000-6099"
+    interactive: "yes"
+    state: stopped
+  tags:
+    - stop-docker-containers
+
 - name: Destroy haproxy container
   docker_container:
     name: "{{ haproxy_name }}"
+    hostname: "{{ haproxy_name }}"
+    image: "{{ haproxy_img }}"
+    networks:
+      - name: "{{ soctools_netname}}"
+    networks_cli_compatible: yes
+    published_ports:
+      - "8888:8888"
+      - "9443:9443"
+      - "9200:9200"
+      - "7750:7750"
+      - "9000:9000"
+      - "9001:9001"
+      - "12443:12443"
+      - "5601:5601"
+      - "5443:5443"
+      - "6443:6443"
+      - "5000-5099:5000-5099"
+      - "6000-6099:6000-6099"
+    interactive: "yes"
     state: absent
   tags:
-    - stop-docker-containers
+    - destroy-docker-containers
diff --git a/roles/docker/tasks/keycloak.yml b/roles/docker/tasks/keycloak.yml
index 7193449..2bcb335 100644
--- a/roles/docker/tasks/keycloak.yml
+++ b/roles/docker/tasks/keycloak.yml
@@ -13,11 +13,31 @@
   tags:
     - start-docker-containers
 
-- name: Disconnect keycloak containers from network and remove
+- name: Stop keycloak containers
   docker_container:
     name: "{{ item }}"
-    state: absent
+    hostname: "{{ item }}"
+    image: "{{ keycloak_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    interactive: "yes"
+    state: stopped
   with_items: "{{ groups['keycloakcontainers'] }}"
   tags:
     - stop-docker-containers
 
+- name: Destroy keycloak containers
+  docker_container:
+    name: "{{ item }}"
+    hostname: "{{ item }}"
+    image: "{{ keycloak_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    interactive: "yes"
+    state: absent
+  with_items: "{{ groups['keycloakcontainers'] }}"
+  tags:
+    - destroy-docker-containers
+
diff --git a/roles/docker/tasks/misp.yml b/roles/docker/tasks/misp.yml
index acba5ea..98179e0 100644
--- a/roles/docker/tasks/misp.yml
+++ b/roles/docker/tasks/misp.yml
@@ -12,9 +12,28 @@
   tags:
     - start-docker-containers
 
+- name: Stop misp container
+  docker_container:
+    name: "{{ misp_name }}"
+    hostname: "{{ misp_name }}"
+    image: "{{ misp_img }}"
+    networks:
+      - name: "{{ soctools_netname}}"
+    interactive: "yes"
+    networks_cli_compatible: yes
+    state: stopped
+  tags:
+    - stop-docker-containers
+
 - name: Destroy misp container
   docker_container:
     name: "{{ misp_name }}"
+    hostname: "{{ misp_name }}"
+    image: "{{ misp_img }}"
+    networks:
+      - name: "{{ soctools_netname}}"
+    interactive: "yes"
+    networks_cli_compatible: yes
     state: absent
   tags:
-    - stop-docker-containers
+    - destroy-docker-containers
diff --git a/roles/docker/tasks/mysql.yml b/roles/docker/tasks/mysql.yml
index d7779da..dcbe804 100644
--- a/roles/docker/tasks/mysql.yml
+++ b/roles/docker/tasks/mysql.yml
@@ -13,9 +13,30 @@
   tags:
     - start-docker-containers
 
+- name: Stop mysql container
+  docker_container:
+    name: "{{ mysql_name }}"
+    hostname: "{{ mysql_name }}"
+    image: "{{ mysql_img }}"
+    networks:
+      - name: "{{ soctools_netname}}"
+    networks_cli_compatible: yes
+    volumes:
+      - "{{mysql_name}}:/var/opt/rh/rh-mariadb103/lib/mysql"
+    state: stopped
+  tags:
+    - stop-docker-containers
+
 - name: Destroy mysql container
   docker_container:
     name: "{{ mysql_name }}"
+    hostname: "{{ mysql_name }}"
+    image: "{{ mysql_img }}"
+    networks:
+      - name: "{{ soctools_netname}}"
+    networks_cli_compatible: yes
+    volumes:
+      - "{{mysql_name}}:/var/opt/rh/rh-mariadb103/lib/mysql"
     state: absent
   tags:
-    - stop-docker-containers
+    - destroy-docker-containers
diff --git a/roles/docker/tasks/networkremove.yml b/roles/docker/tasks/networkremove.yml
index 5a217ce..eb78813 100644
--- a/roles/docker/tasks/networkremove.yml
+++ b/roles/docker/tasks/networkremove.yml
@@ -5,5 +5,5 @@
     name: "{{ soctools_netname }}"
     state: absent
   tags:
-    - stop-docker-containers
+    - destroy-docker-containers
 
diff --git a/roles/docker/tasks/nifi.yml b/roles/docker/tasks/nifi.yml
index fa32278..59180c4 100644
--- a/roles/docker/tasks/nifi.yml
+++ b/roles/docker/tasks/nifi.yml
@@ -15,11 +15,35 @@
   tags:
     - start-docker-containers
 
-- name: Disconnect Nifi containers from network and remove
+- name: Stop Nifi containers
   docker_container:
     name: "{{ item }}"
-    state: absent
+    hostname: "{{ item }}"
+    image: "{{ nifi_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    volumes:
+      - "{{item}}:/opt/nifi/nifi-current/conf"
+    interactive: "yes"
+    state: stopped
   with_items: "{{ groups['nificontainers'] }}"
   tags:
     - stop-docker-containers
 
+- name: Destroy Nifi containers
+  docker_container:
+    name: "{{ item }}"
+    hostname: "{{ item }}"
+    image: "{{ nifi_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    volumes:
+      - "{{item}}:/opt/nifi/nifi-current/conf"
+    interactive: "yes"
+    state: absent
+  with_items: "{{ groups['nificontainers'] }}"
+  tags:
+    - destroy-docker-containers
+
diff --git a/roles/docker/tasks/opensearch-dashboards.yml b/roles/docker/tasks/opensearch-dashboards.yml
index 66808f4..b94a972 100644
--- a/roles/docker/tasks/opensearch-dashboards.yml
+++ b/roles/docker/tasks/opensearch-dashboards.yml
@@ -13,11 +13,30 @@
   tags:
     - start-docker-containers
 
-- name: Disconnect Opensearch Dashboard containers from network and remove
+- name: Stop Opensearch Dashboard containers
   docker_container:
     name: "{{ item }}"
-    state: absent
+    hostname: "{{ item }}"
+    image: "{{ opensearchdashboards_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    interactive: "yes"
+    state: stopped
   with_items: "{{ groups['opensearchdashboardscontainers'] }}"
   tags:
     - stop-docker-containers
 
+- name: Destroy Opensearch Dashboard containers
+  docker_container:
+    name: "{{ item }}"
+    hostname: "{{ item }}"
+    image: "{{ opensearchdashboards_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    interactive: "yes"
+    state: absent
+  with_items: "{{ groups['opensearchdashboardscontainers'] }}"
+  tags:
+    - destroy-docker-containers
diff --git a/roles/docker/tasks/opensearches.yml b/roles/docker/tasks/opensearches.yml
index 81a910c..e09c9d7 100644
--- a/roles/docker/tasks/opensearches.yml
+++ b/roles/docker/tasks/opensearches.yml
@@ -15,11 +15,35 @@
   tags:
     - start-docker-containers
 
-- name: Disconnect Opensearch containers from network and remove
+- name: Stop Opensearch containers
   docker_container:
     name: "{{ item }}"
-    state: absent
+    hostname: "{{ item }}"
+    image: "{{ opensearches_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    volumes:
+      - "{{item}}:/opt/opensearch/data"
+    interactive: "yes"
+    state: stopped
   with_items: "{{ groups['opensearchescontainers'] }}"
   tags:
     - stop-docker-containers
 
+- name: Destroy Opensearch containers 
+  docker_container:
+    name: "{{ item }}"
+    hostname: "{{ item }}"
+    image: "{{ opensearches_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    volumes:
+      - "{{item}}:/opt/opensearch/data"
+    interactive: "yes"
+    state: absent
+  with_items: "{{ groups['opensearchescontainers'] }}"
+  tags:
+    - destroy-docker-containers
+
diff --git a/roles/docker/tasks/thehive.yml b/roles/docker/tasks/thehive.yml
index 18dc840..08a6c0d 100644
--- a/roles/docker/tasks/thehive.yml
+++ b/roles/docker/tasks/thehive.yml
@@ -13,11 +13,31 @@
   tags:
     - start-docker-containers
 
-- name: Disconnect thehive containers from network and remove
+- name: Stop thehive containers
   docker_container:
     name: "{{ item }}"
-    state: absent
+    hostname: "{{ item }}"
+    image: "{{ thehive_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    interactive: "yes"
+    state: stopped
   with_items: "{{ groups['thehive'] }}"
   tags:
     - stop-docker-containers
 
+
+- name: Destroy thehive containers
+  docker_container:
+    name: "{{ item }}"
+    hostname: "{{ item }}"
+    image: "{{ thehive_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    interactive: "yes"
+    state: absent
+  with_items: "{{ groups['thehive'] }}"
+  tags:
+    - destroy-docker-containers
diff --git a/roles/docker/tasks/zookeeper.yml b/roles/docker/tasks/zookeeper.yml
index d0b3f71..c1a0766 100644
--- a/roles/docker/tasks/zookeeper.yml
+++ b/roles/docker/tasks/zookeeper.yml
@@ -13,10 +13,30 @@
   tags:
     - start-docker-containers
 
-- name: Remove zookeeper
+- name: Stop zookeeper
   docker_container:
     name: "{{ zookeeper_name }}"
-    state: absent
+    hostname: "{{ zookeeper_name }}"
+    image: "{{ zookeeper_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    env:
+      ALLOW_ANONYMOUS_LOGIN: "yes"
+    state: stopped
   tags:
     - stop-docker-containers
 
+- name: Destroy zookeeper Container
+  docker_container:
+    name: "{{ zookeeper_name }}"
+    hostname: "{{ zookeeper_name }}"
+    image: "{{ zookeeper_img }}"
+    networks:
+      - name: "{{ soctools_netname }}"
+    networks_cli_compatible: yes
+    env:
+      ALLOW_ANONYMOUS_LOGIN: "yes"
+    state: absent
+  tags:
+    - destroy-docker-containers
diff --git a/soctools.yml b/soctools.yml
index f8391c1..f645c50 100644
--- a/soctools.yml
+++ b/soctools.yml
@@ -2,7 +2,7 @@
 
 - name: Manage Docker Containers
   import_playbook: dockercontainers.yml
-  when: "'start-docker-containers' in ansible_run_tags or 'stop-docker-containers' in ansible_run_tags"
+  when: "'start-docker-containers' in ansible_run_tags or 'stop-docker-containers' in ansible_run_tags or 'destroy-docker-containers' in ansible_run_tags"
 
 - name: Init and start soctools cluster
   import_playbook: initsoctools.yml
-- 
GitLab