summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ansible/library/docker_list_containers.py99
-rw-r--r--ansible/roles/rancher/molecule/default/cleanup.yml10
-rw-r--r--ansible/roles/rancher/tasks/rancher_server.yml2
-rwxr-xr-xansible/test/bin/molecule.sh2
-rw-r--r--ansible/test/roles/cleanup-rancher/tasks/main.yml18
-rw-r--r--ansible/test/roles/prepare-docker/tasks/docker-packages.yml8
-rw-r--r--ansible/test/roles/prepare-docker/tasks/prepare-docker-repos.yml12
-rw-r--r--ansible/test/roles/prepare-docker/tasks/python-bindings.yml3
-rw-r--r--ansible/test/roles/prepare-docker/tasks/python2-docker.yml28
-rw-r--r--ansible/test/roles/prepare-docker/vars/main.yml9
10 files changed, 151 insertions, 40 deletions
diff --git a/ansible/library/docker_list_containers.py b/ansible/library/docker_list_containers.py
new file mode 100644
index 00000000..d8a789c6
--- /dev/null
+++ b/ansible/library/docker_list_containers.py
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+
+ANSIBLE_METADATA = {
+ 'metadata_version': '1.1',
+ 'status': ['preview'],
+ 'supported_by': 'community'
+}
+
+DOCUMENTATION = '''
+---
+module: docker_list_containers
+
+short_description: "List running docker containers"
+
+description:
+ - "Lists all running containers or those with matching label"
+
+options:
+ label_name:
+ description:
+ - container label name to match
+ required: false
+ label_value:
+ description:
+ - container label value to match
+ required: false
+
+author:
+ - Bartek Grzybowski (b.grzybowski@partner.samsung.com)
+'''
+
+EXAMPLES = '''
+# List all running containers
+- name: List containers
+ docker_list_containers:
+
+# List all running containers matching label
+- name: List containers
+ docker_list_containers:
+ label_name: 'io.rancher.project.name'
+ label_value: 'kubernetes'
+'''
+
+RETURN = '''
+containers:
+ description: List of running containers matching module criteria
+ type: list
+ returned: always
+ sample: [
+ "rancher-agent",
+ "rancher-server",
+ "kubernetes-node-1",
+ "infrastructure-server"
+ ]
+'''
+
+from ansible.module_utils.docker_common import AnsibleDockerClient
+
+class DockerListContainers:
+
+ def __init__(self):
+ self.docker_client = AnsibleDockerClient(
+ argument_spec=dict(
+ label_name=dict(type='str', required=False),
+ label_value=dict(type='str', required=False)
+ )
+ )
+
+ self.containers = self.docker_client.containers()
+ self.label_name=self.docker_client.module.params.get('label_name')
+ self.label_value=self.docker_client.module.params.get('label_value')
+
+ if self.label_name:
+ self.containers_names=self._get_containers_names_by_label()
+ else:
+ self.containers_names=self._get_containers_names()
+
+ self.result=dict(
+ containers=self.containers_names,
+ changed=False
+ )
+
+ def _get_containers_names(self):
+ return [str(container_meta.get('Names')[0][1:]) for container_meta in self.containers if 'Names' in container_meta]
+
+ def _get_containers_names_by_label(self):
+ names=[]
+ for container_meta in self.containers:
+ if container_meta.get('Labels',{}).get(self.label_name) == self.label_value:
+ names.append(str(container_meta['Names'][0][1:])) # strip leading '/' in container name and convert to str from unicode
+
+ return names
+
+def main():
+ cont=DockerListContainers()
+ cont.docker_client.module.exit_json(**cont.result)
+
+if __name__ == '__main__':
+ main()
diff --git a/ansible/roles/rancher/molecule/default/cleanup.yml b/ansible/roles/rancher/molecule/default/cleanup.yml
index 13b48278..d4bf4495 100644
--- a/ansible/roles/rancher/molecule/default/cleanup.yml
+++ b/ansible/roles/rancher/molecule/default/cleanup.yml
@@ -7,8 +7,8 @@
container_list:
- rancher-agent
- rancher-server
- # For some reason getting error "Device busy error" when trying to delete directory with root privileges and rancher-containers not anymore running.
- # - role: cleanup-directories
- # vars:
- # directories_files_list_to_remove:
- # - /var/lib/rancher/
+ - role: cleanup-rancher
+ vars:
+ container_list_by_label:
+ - { 'label':'io.rancher.project.name', 'value':'healthcheck'}
+ - { 'label':'io.rancher.project.name', 'value':'kubernetes'}
diff --git a/ansible/roles/rancher/tasks/rancher_server.yml b/ansible/roles/rancher/tasks/rancher_server.yml
index 4cda3722..a0893b0b 100644
--- a/ansible/roles/rancher/tasks/rancher_server.yml
+++ b/ansible/roles/rancher/tasks/rancher_server.yml
@@ -55,7 +55,7 @@
account_key: "{{ key_public }}:{{ key_private }}"
mode: access_control
data:
- account_id: 1a1 # default rancher admin account
+ account_id: 1a1 # default rancher admin account
password: "{{ rancher.admin_password }}"
when: "rancher.auth_enabled is defined and rancher.auth_enabled"
diff --git a/ansible/test/bin/molecule.sh b/ansible/test/bin/molecule.sh
index d983ca08..72dce6d9 100755
--- a/ansible/test/bin/molecule.sh
+++ b/ansible/test/bin/molecule.sh
@@ -42,7 +42,7 @@ MOLECULE_IMAGE=${MOLECULE_IMAGE:-molecule-dev}
MOLECULE_IMAGE_VERSION=${MOLECULE_IMAGE_VERSION:-2.20.0}
echo "Running molecule image: ${MOLECULE_IMAGE}:${MOLECULE_IMAGE_VERSION}"
MOLECULE_CMD=${MOLECULE_CMD:-molecule}
-docker run --rm -it \
+docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ${ROOT_DIR}:${CONTAINER_ROOT}:rw \
-w ${CONTAINER_ROOT}/${PROJECT_ROOT_IN_CONTAINER} \
diff --git a/ansible/test/roles/cleanup-rancher/tasks/main.yml b/ansible/test/roles/cleanup-rancher/tasks/main.yml
new file mode 100644
index 00000000..21b02988
--- /dev/null
+++ b/ansible/test/roles/cleanup-rancher/tasks/main.yml
@@ -0,0 +1,18 @@
+---
+# Remove containers spawned by Rancher Agent
+- name: Get list of containers spawned by Rancher Agent
+ docker_list_containers:
+ label_name: "{{ item.label }}"
+ label_value: "{{ item.value }}"
+ loop: "{{ container_list_by_label }}"
+ register: docker_list_containers_var
+
+- name: set fact # save a list of containers found by previous task to orphaned_containers var
+ set_fact: orphaned_containers="{{ orphaned_containers|default([]) + item.containers }}"
+ loop: "{{ docker_list_containers_var.results }}"
+
+- name: Remove orphaned containers
+ docker_container:
+ name: "{{ item }}"
+ state: absent
+ loop: "{{ orphaned_containers }}"
diff --git a/ansible/test/roles/prepare-docker/tasks/docker-packages.yml b/ansible/test/roles/prepare-docker/tasks/docker-packages.yml
new file mode 100644
index 00000000..b7e76c55
--- /dev/null
+++ b/ansible/test/roles/prepare-docker/tasks/docker-packages.yml
@@ -0,0 +1,8 @@
+---
+
+- name: Download docker related packages
+ command: yumdownloader --destdir="{{ rpm_dir }}" "{{ docker_ce_rpm }}" "{{ docker_ce_selinux_rpm }}"
+
+- name: Install docker related packages
+ yum:
+ name: "{{ rpm_dir + '/' + docker_ce_rpm + '.rpm'}},{{ rpm_dir + '/' + docker_ce_selinux_rpm + '.rpm' }}"
diff --git a/ansible/test/roles/prepare-docker/tasks/prepare-docker-repos.yml b/ansible/test/roles/prepare-docker/tasks/prepare-docker-repos.yml
index 26f89d64..f35ffeee 100644
--- a/ansible/test/roles/prepare-docker/tasks/prepare-docker-repos.yml
+++ b/ansible/test/roles/prepare-docker/tasks/prepare-docker-repos.yml
@@ -7,8 +7,16 @@
gpgcheck: true
gpgkey: https://download.docker.com/linux/centos/gpg
-- name: Install docker python bindings
- import_tasks: python-bindings.yml
+- name: Create rpm dir
+ file:
+ path: "{{ rpm_dir }}"
+ state: directory
+
+- name: Handle python2-docker dependency needed by Ansible's docker_* modules
+ import_tasks: python2-docker.yml
+
+- name: Handle docker-ce packages
+ import_tasks: docker-packages.yml
- name: Fake dockerd on container
import_tasks: docker-socket-override.yml
diff --git a/ansible/test/roles/prepare-docker/tasks/python-bindings.yml b/ansible/test/roles/prepare-docker/tasks/python-bindings.yml
deleted file mode 100644
index 7a66a328..00000000
--- a/ansible/test/roles/prepare-docker/tasks/python-bindings.yml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-- name: Handle python2-docker dependency needed by Ansible's docker_* modules
- import_tasks: python2-docker.yml
diff --git a/ansible/test/roles/prepare-docker/tasks/python2-docker.yml b/ansible/test/roles/prepare-docker/tasks/python2-docker.yml
index 9cb3b483..f091cf85 100644
--- a/ansible/test/roles/prepare-docker/tasks/python2-docker.yml
+++ b/ansible/test/roles/prepare-docker/tasks/python2-docker.yml
@@ -4,35 +4,13 @@
name: docker-python
state: absent
-- name: Create own-repo dir
- file:
- path: /root/own-repo
- state: directory
-
- name: Download python2-docker rpm for Ansible (docker_container module dep)
get_url:
- url: https://cbs.centos.org/kojifiles/packages/python-docker/2.5.1/2.el7/noarch/python2-docker-2.5.1-2.el7.noarch.rpm
- dest: /root/own-repo/
+ url: "{{ python2_docker_rpm_url }}"
+ dest: "{{ rpm_dir }}"
register: rpm
-- name: Install createrepo
- package:
- name: createrepo
- state: present
-
-- name: Run createrepo
- command: createrepo /root/own-repo/
- when: rpm.changed
-
-- name: Create own-repo
- yum_repository:
- name: own-repo
- description: Own repo for ansible deps
- baseurl: file:///root/own-repo
- enabled: true
- gpgcheck: false
-
- name: Install docker python module
package:
- name: python2-docker
+ name: "{{ rpm_dir + '/' + python2_docker_rpm }}"
state: present
diff --git a/ansible/test/roles/prepare-docker/vars/main.yml b/ansible/test/roles/prepare-docker/vars/main.yml
index c63c0dea..aabd65dc 100644
--- a/ansible/test/roles/prepare-docker/vars/main.yml
+++ b/ansible/test/roles/prepare-docker/vars/main.yml
@@ -2,6 +2,9 @@
docker_needed_repos:
- /etc/yum.repos.d/CentOS-Base.repo.disabled
- /etc/yum.repos.d/docker-ce.repo.disabled
- - /etc/yum.repos.d/own-repo.repo.disabled
-
-offline_repo_file: /etc/yum.repos.d/onap.repo \ No newline at end of file
+offline_repo_file: /etc/yum.repos.d/onap.repo
+rpm_dir: /root/rpm
+python2_docker_rpm: python2-docker-2.5.1-2.el7.noarch.rpm
+python2_docker_rpm_url: "https://cbs.centos.org/kojifiles/packages/python-docker/2.5.1/2.el7/noarch/{{ python2_docker_rpm }}"
+docker_ce_rpm: docker-ce-17.03.2.ce-1.el7.centos.x86_64
+docker_ce_selinux_rpm: docker-ce-selinux-17.03.3.ce-1.el7.noarch