From: Guillaume Abrioux Date: Mon, 20 May 2019 07:46:10 +0000 (+0200) Subject: roles: introduce `ceph-container-engine` role X-Git-Tag: v4.0.0rc9~27 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=16c6d530c686a0bd0a99cbe150be900e984a3b98;p=ceph-ansible.git roles: introduce `ceph-container-engine` role This commit splits the current `ceph-container-common` role. This introduces a new role `ceph-container-engine` which handles the tasks specific to the installation of containers tools (docker/podman). This is needed for the ceph-dashboard implementation for 2 main reasons: 1/ Since the ceph-dashboard stack is only containerized, we must install everything needed to run containers even in non containerized deployments. Splitting this role allows us to not have to call the full `ceph-container-common` role which would run a bunch of unneeded tasks that would have been skipped anyway. 2/ The current implementation would have required to run `ceph-container-common` on all ceph-clients nodes which would have been conflicting with 9d3517c670ea2e944565e1a3e150a966b2d399de (we don't want to run ceph-container-common on all client nodes, see mentioned commit for more details) Signed-off-by: Guillaume Abrioux (cherry picked from commit 55420d6253bc6605738fe3f4745e2ba08a6ea5b8) --- diff --git a/infrastructure-playbooks/switch-from-non-containerized-to-containerized-ceph-daemons.yml b/infrastructure-playbooks/switch-from-non-containerized-to-containerized-ceph-daemons.yml index 5e4692b72..efffa8d2f 100644 --- a/infrastructure-playbooks/switch-from-non-containerized-to-containerized-ceph-daemons.yml +++ b/infrastructure-playbooks/switch-from-non-containerized-to-containerized-ceph-daemons.yml @@ -128,6 +128,9 @@ - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine + - import_role: name: ceph-container-common @@ -199,6 +202,9 @@ - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine + - import_role: name: ceph-container-common @@ -313,6 +319,9 @@ - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine + - import_role: name: ceph-container-common @@ -393,6 +402,9 @@ - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine + - import_role: name: ceph-container-common @@ -450,6 +462,9 @@ - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine + - import_role: name: ceph-container-common @@ -509,6 +524,9 @@ - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine + - import_role: name: ceph-container-common @@ -565,6 +583,9 @@ - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine + - import_role: name: ceph-container-common diff --git a/roles/ceph-container-common/README.md b/roles/ceph-container-common/README.md index ca230cdf0..0fff59a1a 100644 --- a/roles/ceph-container-common/README.md +++ b/roles/ceph-container-common/README.md @@ -1,3 +1,3 @@ -# Ansible role: ceph-docker +# Ansible role: ceph-container-common Documentation is available at http://docs.ceph.com/ceph-ansible/. diff --git a/roles/ceph-container-common/tasks/main.yml b/roles/ceph-container-common/tasks/main.yml index f6d1334e8..21e1414b6 100644 --- a/roles/ceph-container-common/tasks/main.yml +++ b/roles/ceph-container-common/tasks/main.yml @@ -1,24 +1,24 @@ --- -- name: include pre_requisites/prerequisites.yml - include_tasks: pre_requisites/prerequisites.yml +- name: include prerequisites.yml + include_tasks: prerequisites.yml when: not is_atomic - name: get docker version - command: docker --version - changed_when: false - check_mode: no - register: ceph_docker_version - when: container_binary == 'docker' + block: + - name: get docker version + command: docker --version + changed_when: false + check_mode: no + register: ceph_docker_version -- name: set_fact ceph_docker_version ceph_docker_version.stdout.split - set_fact: - ceph_docker_version: "{{ ceph_docker_version.stdout.split(' ')[2] }}" + - name: set_fact ceph_docker_version ceph_docker_version.stdout.split + set_fact: + ceph_docker_version: "{{ ceph_docker_version.stdout.split(' ')[2] }}" when: container_binary == 'docker' - name: include fetch_image.yml include_tasks: fetch_image.yml tags: fetch_container_image - when: containerized_deployment - name: get ceph version command: > @@ -28,13 +28,10 @@ changed_when: false check_mode: no register: ceph_version - when: containerized_deployment - name: set_fact ceph_version ceph_version.stdout.split set_fact: ceph_version: "{{ ceph_version.stdout.split(' ')[2] }}" - when: containerized_deployment - name: include release.yml include_tasks: release.yml - when: containerized_deployment diff --git a/roles/ceph-container-common/tasks/pre_requisites/debian_prerequisites.yml b/roles/ceph-container-common/tasks/pre_requisites/debian_prerequisites.yml deleted file mode 100644 index 726c016ab..000000000 --- a/roles/ceph-container-common/tasks/pre_requisites/debian_prerequisites.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- -- name: uninstall old docker versions - package: - name: ['docker', 'docker-engine', 'docker.io', 'containerd', 'runc'] - state: absent - -- name: allow apt to use a repository over https (debian) - package: - name: ['apt-transport-https', 'ca-certificates', 'gnupg', 'software-properties-common'] - update_cache: yes - register: result - until: result is succeeded - -- name: add docker's gpg key - apt_key: - url: 'https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg' - register: result - until: result is succeeded - -- name: add docker repository - apt_repository: - repo: "deb https://download.docker.com/linux/{{ ansible_distribution | lower}} {{ ansible_distribution_release }} stable" diff --git a/roles/ceph-container-common/tasks/pre_requisites/prerequisites.yml b/roles/ceph-container-common/tasks/pre_requisites/prerequisites.yml deleted file mode 100644 index b865175a0..000000000 --- a/roles/ceph-container-common/tasks/pre_requisites/prerequisites.yml +++ /dev/null @@ -1,53 +0,0 @@ ---- -- name: include specific variables - include_vars: "{{ item }}" - with_first_found: - - "{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml" - - "{{ ansible_os_family }}.yml" - -- name: include remove_ceph_udev_rules.yml - include_tasks: remove_ceph_udev_rules.yml - -- name: debian based systems tasks - include_tasks: debian_prerequisites.yml - when: - - ansible_os_family == 'Debian' - - container_package_name == 'docker-ce' - tags: with_pkg - -# ensure extras enabled for docker -- name: enable extras on centos - yum_repository: - name: extras - state: present - enabled: yes - when: - - ansible_distribution == 'CentOS' - - ceph_docker_enable_centos_extra_repo - tags: - with_pkg - -- name: install container package - package: - name: ['{{ container_package_name }}', '{{ container_binding_name }}'] - update_cache: true - tags: with_pkg - -- name: start container service - service: - name: '{{ container_service_name }}' - state: started - enabled: yes - tags: - with_pkg - when: container_service_name == 'docker' - -- name: ensure tmpfiles.d is present - lineinfile: - path: /etc/tmpfiles.d/ceph-common.conf - line: "d /run/ceph 0770 root root -" - owner: root - group: root - mode: 0644 - state: present - create: yes diff --git a/roles/ceph-container-common/tasks/pre_requisites/remove_ceph_udev_rules.yml b/roles/ceph-container-common/tasks/pre_requisites/remove_ceph_udev_rules.yml deleted file mode 100644 index 3e4ed3c6b..000000000 --- a/roles/ceph-container-common/tasks/pre_requisites/remove_ceph_udev_rules.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -- name: remove ceph udev rules - file: - path: "{{ item }}" - state: absent - with_items: - - /usr/lib/udev/rules.d/95-ceph-osd.rules - - /usr/lib/udev/rules.d/60-ceph-by-parttypeuuid.rules diff --git a/roles/ceph-container-common/tasks/prerequisites.yml b/roles/ceph-container-common/tasks/prerequisites.yml new file mode 100644 index 000000000..c7761c311 --- /dev/null +++ b/roles/ceph-container-common/tasks/prerequisites.yml @@ -0,0 +1,18 @@ +--- +- name: remove ceph udev rules + file: + path: "{{ item }}" + state: absent + with_items: + - /usr/lib/udev/rules.d/95-ceph-osd.rules + - /usr/lib/udev/rules.d/60-ceph-by-parttypeuuid.rules + +- name: ensure tmpfiles.d is present + lineinfile: + path: /etc/tmpfiles.d/ceph-common.conf + line: "d /run/ceph 0770 root root -" + owner: root + group: root + mode: 0644 + state: present + create: yes diff --git a/roles/ceph-container-common/vars/Debian.yml b/roles/ceph-container-common/vars/Debian.yml deleted file mode 100644 index 3df067185..000000000 --- a/roles/ceph-container-common/vars/Debian.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -container_package_name: docker-ce -container_service_name: docker -container_binding_name: python-docker diff --git a/roles/ceph-container-common/vars/RedHat-8.yml b/roles/ceph-container-common/vars/RedHat-8.yml deleted file mode 100644 index 3a93dbd04..000000000 --- a/roles/ceph-container-common/vars/RedHat-8.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -container_package_name: podman -container_service_name: podman -container_binding_name: podman diff --git a/roles/ceph-container-common/vars/RedHat.yml b/roles/ceph-container-common/vars/RedHat.yml deleted file mode 100644 index 4a14707dd..000000000 --- a/roles/ceph-container-common/vars/RedHat.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -container_package_name: docker -container_service_name: docker -container_binding_name: python-docker-py diff --git a/roles/ceph-container-common/vars/Ubuntu-16.yml b/roles/ceph-container-common/vars/Ubuntu-16.yml deleted file mode 100644 index b5b7c3529..000000000 --- a/roles/ceph-container-common/vars/Ubuntu-16.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -container_package_name: docker.io -container_service_name: docker -container_binding_name: python-docker diff --git a/roles/ceph-container-common/vars/Ubuntu-18.yml b/roles/ceph-container-common/vars/Ubuntu-18.yml deleted file mode 100644 index f457ca03a..000000000 --- a/roles/ceph-container-common/vars/Ubuntu-18.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -container_package_name: docker.io -container_service_name: docker -container_binding_name: python3-docker diff --git a/roles/ceph-container-engine/README.md b/roles/ceph-container-engine/README.md new file mode 100644 index 000000000..6d00c0259 --- /dev/null +++ b/roles/ceph-container-engine/README.md @@ -0,0 +1,3 @@ +# Ansible role: ceph-container-engine + +Documentation is available at http://docs.ceph.com/ceph-ansible/. diff --git a/roles/ceph-container-engine/meta/main.yml b/roles/ceph-container-engine/meta/main.yml new file mode 100644 index 000000000..f560ac2b2 --- /dev/null +++ b/roles/ceph-container-engine/meta/main.yml @@ -0,0 +1,17 @@ +--- +galaxy_info: + company: Red Hat + author: Guillaume Abrioux + description: Handles container installation prerequisites + license: Apache + min_ansible_version: 2.7 + platforms: + - name: Ubuntu + versions: + - xenial + - name: EL + versions: + - 7 + galaxy_tags: + - system +dependencies: [] diff --git a/roles/ceph-container-engine/tasks/main.yml b/roles/ceph-container-engine/tasks/main.yml new file mode 100644 index 000000000..42be16284 --- /dev/null +++ b/roles/ceph-container-engine/tasks/main.yml @@ -0,0 +1,4 @@ +--- +- name: include pre_requisites/prerequisites.yml + include_tasks: pre_requisites/prerequisites.yml + when: not is_atomic \ No newline at end of file diff --git a/roles/ceph-container-engine/tasks/pre_requisites/debian_prerequisites.yml b/roles/ceph-container-engine/tasks/pre_requisites/debian_prerequisites.yml new file mode 100644 index 000000000..726c016ab --- /dev/null +++ b/roles/ceph-container-engine/tasks/pre_requisites/debian_prerequisites.yml @@ -0,0 +1,22 @@ +--- +- name: uninstall old docker versions + package: + name: ['docker', 'docker-engine', 'docker.io', 'containerd', 'runc'] + state: absent + +- name: allow apt to use a repository over https (debian) + package: + name: ['apt-transport-https', 'ca-certificates', 'gnupg', 'software-properties-common'] + update_cache: yes + register: result + until: result is succeeded + +- name: add docker's gpg key + apt_key: + url: 'https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg' + register: result + until: result is succeeded + +- name: add docker repository + apt_repository: + repo: "deb https://download.docker.com/linux/{{ ansible_distribution | lower}} {{ ansible_distribution_release }} stable" diff --git a/roles/ceph-container-engine/tasks/pre_requisites/prerequisites.yml b/roles/ceph-container-engine/tasks/pre_requisites/prerequisites.yml new file mode 100644 index 000000000..161238bcb --- /dev/null +++ b/roles/ceph-container-engine/tasks/pre_requisites/prerequisites.yml @@ -0,0 +1,40 @@ +--- +- name: include specific variables + include_vars: "{{ item }}" + with_first_found: + - "{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml" + - "{{ ansible_os_family }}.yml" + +- name: debian based systems tasks + include_tasks: debian_prerequisites.yml + when: + - ansible_os_family == 'Debian' + - container_package_name == 'docker-ce' + tags: with_pkg + +# ensure extras enabled for docker +- name: enable extras on centos + yum_repository: + name: extras + state: present + enabled: yes + when: + - ansible_distribution == 'CentOS' + - ceph_docker_enable_centos_extra_repo + tags: + with_pkg + +- name: install container package + package: + name: ['{{ container_package_name }}', '{{ container_binding_name }}'] + update_cache: true + tags: with_pkg + +- name: start container service + service: + name: '{{ container_service_name }}' + state: started + enabled: yes + tags: + with_pkg + when: container_service_name == 'docker' \ No newline at end of file diff --git a/roles/ceph-container-engine/vars/Debian.yml b/roles/ceph-container-engine/vars/Debian.yml new file mode 100644 index 000000000..3df067185 --- /dev/null +++ b/roles/ceph-container-engine/vars/Debian.yml @@ -0,0 +1,4 @@ +--- +container_package_name: docker-ce +container_service_name: docker +container_binding_name: python-docker diff --git a/roles/ceph-container-engine/vars/RedHat-8.yml b/roles/ceph-container-engine/vars/RedHat-8.yml new file mode 100644 index 000000000..3a93dbd04 --- /dev/null +++ b/roles/ceph-container-engine/vars/RedHat-8.yml @@ -0,0 +1,4 @@ +--- +container_package_name: podman +container_service_name: podman +container_binding_name: podman diff --git a/roles/ceph-container-engine/vars/RedHat.yml b/roles/ceph-container-engine/vars/RedHat.yml new file mode 100644 index 000000000..4a14707dd --- /dev/null +++ b/roles/ceph-container-engine/vars/RedHat.yml @@ -0,0 +1,4 @@ +--- +container_package_name: docker +container_service_name: docker +container_binding_name: python-docker-py diff --git a/roles/ceph-container-engine/vars/Ubuntu-16.yml b/roles/ceph-container-engine/vars/Ubuntu-16.yml new file mode 100644 index 000000000..b5b7c3529 --- /dev/null +++ b/roles/ceph-container-engine/vars/Ubuntu-16.yml @@ -0,0 +1,4 @@ +--- +container_package_name: docker.io +container_service_name: docker +container_binding_name: python-docker diff --git a/roles/ceph-container-engine/vars/Ubuntu-18.yml b/roles/ceph-container-engine/vars/Ubuntu-18.yml new file mode 100644 index 000000000..f457ca03a --- /dev/null +++ b/roles/ceph-container-engine/vars/Ubuntu-18.yml @@ -0,0 +1,4 @@ +--- +container_package_name: docker.io +container_service_name: docker +container_binding_name: python3-docker diff --git a/site-container.yml.sample b/site-container.yml.sample index a5375e688..42cc6f86c 100644 --- a/site-container.yml.sample +++ b/site-container.yml.sample @@ -70,6 +70,8 @@ name: ceph-infra - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine - import_role: name: ceph-container-common tags: [with_pkg, fetch_container_image] @@ -114,6 +116,8 @@ tags: ['ceph_update_config'] - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine - import_role: name: ceph-container-common - import_role: @@ -161,6 +165,8 @@ tags: ['ceph_update_config'] - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine - import_role: name: ceph-container-common - import_role: @@ -203,6 +209,8 @@ tags: ['ceph_update_config'] - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine - import_role: name: ceph-container-common - import_role: @@ -245,6 +253,8 @@ tags: ['ceph_update_config'] - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine - import_role: name: ceph-container-common - import_role: @@ -287,6 +297,8 @@ tags: ['ceph_update_config'] - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine - import_role: name: ceph-container-common - import_role: @@ -329,6 +341,8 @@ tags: ['ceph_update_config'] - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine - import_role: name: ceph-container-common - import_role: @@ -371,6 +385,8 @@ tags: ['ceph_update_config'] - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine - import_role: name: ceph-container-common - import_role: @@ -413,6 +429,9 @@ tags: ['ceph_update_config'] - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine + when: inventory_hostname == groups.get('clients', ['']) | first or dashboard_enabled - import_role: name: ceph-container-common when: inventory_hostname == groups.get('clients', ['']) | first @@ -458,6 +477,8 @@ tags: ['ceph_update_config'] - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine - import_role: name: ceph-container-common - import_role: @@ -523,6 +544,8 @@ tags: ['ceph_update_config'] - import_role: name: ceph-handler + - import_role: + name: ceph-container-engine - import_role: name: ceph-container-common - import_role: diff --git a/site.yml.sample b/site.yml.sample index 6d8fe23cd..17f4c010f 100644 --- a/site.yml.sample +++ b/site.yml.sample @@ -498,7 +498,7 @@ - import_role: name: ceph-handler - import_role: - name: ceph-container-common + name: ceph-container-engine - import_role: name: ceph-node-exporter when: dashboard_enabled