diff options
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 |