From 2a461b84aa1996d1eb0bcf1d8b85157b55e08532 Mon Sep 17 00:00:00 2001 From: Chris Croome <chris@webarchitects.co.uk> Date: Mon, 12 Feb 2024 16:24:47 +0000 Subject: [PATCH] Add arg spec verification for all docker_ vars --- .pre-commit-config.yaml | 4 ++-- defaults/main.yml | 3 ++- handlers/main.yml | 2 ++ meta/argument_specs.yml | 27 ++++++++++++++++++++++++--- tasks/apt.yml | 8 ++++---- tasks/compose_v1.yml | 8 ++++---- tasks/install.yml | 12 ++++++++---- vars/main.yml | 5 +++++ 8 files changed, 51 insertions(+), 18 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4b9a0af..2e5e558 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,7 +11,7 @@ repos: # https://github.com/adrienverge/yamllint/tags - repo: https://github.com/adrienverge/yamllint.git - rev: v1.33.0 + rev: v1.34.0 hooks: - id: yamllint name: YAML Lint @@ -34,7 +34,7 @@ repos: - README.md # https://github.com/ansible/ansible-lint/releases - repo: https://github.com/ansible/ansible-lint.git - rev: v6.22.2 + rev: v24.2.0 hooks: - id: ansible-lint name: Ansible Lint diff --git a/defaults/main.yml b/defaults/main.yml index 33d3886..577a367 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -9,7 +9,7 @@ # You should have received a copy of the GNU General Public License along with the Webarchitects Docker Ansible role. If not, see <https://www.gnu.org/licenses/>. --- docker: false -# docker_compose_v1: false +docker_compose_v1: false docker_compose_version_v1: "1.29.2" docker_daemon: storage-driver: overlay2 @@ -21,4 +21,5 @@ docker_pkg: - docker-ce-rootless-extras - docker-compose-plugin # - docker-scan-plugin +docker_verify: true ... diff --git a/handlers/main.yml b/handlers/main.yml index 94bad47..7f8ee52 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -13,4 +13,6 @@ name: docker state: restarted listen: Restart docker + tags: + - docker ... diff --git a/meta/argument_specs.yml b/meta/argument_specs.yml index 2b78e22..c2dd7ba 100644 --- a/meta/argument_specs.yml +++ b/meta/argument_specs.yml @@ -21,17 +21,38 @@ argument_specs: docker_daemon: type: dict required: true - description: Docker daemon configuration, YAML that will converted to JSON and written to `/etc/docker/daemon.json`. + description: Docker daemon configuration, YAML that will converted to JSON and written to /etc/docker/daemon.json. docker_compose_v1: type: bool required: false - description: Set to `false` for Docker Composer version 1 to be removed and set to `true` for `docker-compose` version 1 and `docker-compose-switch` to be installed. + description: Set to false for Docker Composer version 1 to be removed and set to true for docker-compose version 1 and docker-compose-switch to be installed. docker_compose_version_v1: type: str required: true - description: The version number of `docker-compose` version 1 to be installed when `docker_compose_v1` is defined and `true`. + description: The version number of docker-compose version 1 to be installed when docker_compose_v1 is defined and true. + docker_gpg_checksum: + type: str + required: true + description: The SHA256 checksum of the Docker GPG public key. + docker_gpg_fingerprints: + type: list + elements: str + required: true + description: A list of the Docker GPG public fingerprints. + docker_gpg_url: + type: str + required: true + description: URL for the Docker apt repo GPG public key. docker_pkg: type: list required: true description: Packages to be installed from the Docker apt repo. + docker_repo_pkg: + type: list + elements: str + description: A list of packages available from the Docker repo for apt pinning. + docker_verify: + type: bool + required: true + description: Check all variables that start with docker_ against the argument spec. ... diff --git a/tasks/apt.yml b/tasks/apt.yml index 5edcf14..6749bea 100644 --- a/tasks/apt.yml +++ b/tasks/apt.yml @@ -44,7 +44,7 @@ ansible.builtin.file: path: /etc/apt/keyrings state: directory - mode: 0755 + mode: "0755" owner: root group: root @@ -53,7 +53,7 @@ url: "{{ docker_gpg_url }}" checksum: "{{ docker_gpg_checksum }}" dest: /root/docker.asc - mode: 0644 + mode: "0644" owner: root group: root register: docker_tmp_asc_file @@ -123,7 +123,7 @@ ansible.builtin.template: src: docker.sources.j2 dest: /etc/apt/sources.list.d/docker.sources - mode: 0644 + mode: "0644" owner: root group: root register: docker_sources @@ -132,7 +132,7 @@ ansible.builtin.template: src: docker.pref.j2 dest: /etc/apt/preferences.d/docker.pref - mode: 0644 + mode: "0644" owner: root group: root register: docker_preferences diff --git a/tasks/compose_v1.yml b/tasks/compose_v1.yml index ccafdea..3979c52 100644 --- a/tasks/compose_v1.yml +++ b/tasks/compose_v1.yml @@ -101,7 +101,7 @@ dest: "{{ docker_compose_v1_download_dir.path }}/docker-compose-{{ ansible_system }}-{{ ansible_architecture }}.sha256" owner: root group: root - mode: 0644 + mode: "0644" - name: Docker Compose Version 1 base64 encoded version sha256 checksum slurped ansible.builtin.slurp: @@ -123,7 +123,7 @@ force: true owner: root group: root - mode: 0755 + mode: "0755" checksum: "{{ docker_compose_v1_sha256 }}" - name: Check docker-compose version 1 @@ -140,7 +140,7 @@ force: true owner: root group: root - mode: 0644 + mode: "0644" when: - not ansible_check_mode | bool @@ -175,7 +175,7 @@ force: true owner: root group: root - mode: 0755 + mode: "0755" - name: Check docker-compose alternatives ansible.builtin.command: update-alternatives --display docker-compose diff --git a/tasks/install.yml b/tasks/install.yml index 27b4253..bf5646d 100644 --- a/tasks/install.yml +++ b/tasks/install.yml @@ -42,12 +42,14 @@ autoclean: true autoremove: true state: absent + notify: Restart docker - name: Docker packages present ansible.builtin.apt: pkg: "{{ docker_pkg }}" state: present update_cache: true + notify: Restart docker - name: Directory for Docker config present ansible.builtin.file: @@ -55,16 +57,18 @@ state: directory owner: root group: root - mode: 0755 + mode: "0755" - - name: Docker configuration present + - name: Docker daemon configuration present ansible.builtin.template: src: templates/daemon.json.j2 dest: /etc/docker/daemon.json owner: root group: root - mode: 0644 - when: ( docker_nameservers is defined ) and ( docker_nameservers != [] ) + mode: "0644" + when: + - docker_daemon is defined + - docker_daemon | length > 0 notify: Restart docker - name: Docker started diff --git a/vars/main.yml b/vars/main.yml index 672266d..5615637 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -8,6 +8,10 @@ # # You should have received a copy of the GNU General Public License along with the Webarchitects Docker Ansible role. If not, see <https://www.gnu.org/licenses/>. --- +# https://docs.ansible.com/ansible/latest/playbook_guide/complex_data_manipulation.html +dockervarnames: "{{ q('varnames', '^docker_') | sort }}" +dockerhostvars: "{{ dict(dockervarnames | list | zip(q('vars', *dockervarnames))) }}" + # ASCII armored GPG public key URL linked from # https://docs.docker.com/engine/install/debian/ docker_gpg_url: "https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg" @@ -29,6 +33,7 @@ docker_gpg_fingerprints: # grep Package /var/lib/apt/lists/download.docker.com_*_Packages | sed 's/^Package: //' | uniq | sort | sed 's/^/ - /' docker_repo_pkg: - containerd.io + - docker-buildx-plugin - docker-ce - docker-ce-cli - docker-ce-rootless-extras -- GitLab