add apt_repository role
This commit is contained in:
5
roles/apt_repository/defaults/main.yml
Normal file
5
roles/apt_repository/defaults/main.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
repo_arch: ""
|
||||
repo_suite: "{{ ansible_distribution_release }}"
|
||||
repo_components:
|
||||
- main
|
||||
36
roles/apt_repository/meta/argument_specs.yml
Normal file
36
roles/apt_repository/meta/argument_specs.yml
Normal file
@@ -0,0 +1,36 @@
|
||||
---
|
||||
|
||||
argument_specs:
|
||||
main:
|
||||
short_description: Apt repository
|
||||
description: "Gets apt repository gpg key from a url and adds repo to sources"
|
||||
options:
|
||||
repo_name:
|
||||
description: Name of the repository. Used in file names.
|
||||
type: str
|
||||
required: true
|
||||
repo_url:
|
||||
description: Url of the repository
|
||||
type: str
|
||||
required: true
|
||||
repo_key_url:
|
||||
description: Url of the repository signing key
|
||||
type: str
|
||||
required: true
|
||||
repo_arch:
|
||||
description: Architecture to use for the repsitory. You can use apt_arch variable here to use the system native archicecture.
|
||||
type: str
|
||||
required: false
|
||||
default: ''
|
||||
repo_suite:
|
||||
description: Suite of the repository. Usually distribution codename.
|
||||
type: str
|
||||
required: false
|
||||
default: "{{ ansible_distribution_release }}"
|
||||
repo_components:
|
||||
description: Components of the repository to use
|
||||
type: list
|
||||
elements: str
|
||||
required: false
|
||||
default:
|
||||
- main
|
||||
14
roles/apt_repository/molecule/default/converge.yml
Normal file
14
roles/apt_repository/molecule/default/converge.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
- name: Converge
|
||||
hosts: all
|
||||
tasks:
|
||||
- name: "Include apt_repository"
|
||||
ansible.builtin.import_role:
|
||||
name: apt_repository
|
||||
vars:
|
||||
repo_name: docker
|
||||
repo_url: https://download.docker.com/linux/{{ ansible_distribution | lower }}
|
||||
repo_key_url: https://download.docker.com/linux/debian/gpg
|
||||
repo_arch: "{{ apt_arch }}"
|
||||
repo_components:
|
||||
- stable
|
||||
13
roles/apt_repository/molecule/default/molecule.yml
Normal file
13
roles/apt_repository/molecule/default/molecule.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
dependency:
|
||||
name: galaxy
|
||||
driver:
|
||||
name: podman
|
||||
platforms:
|
||||
- name: bullseye
|
||||
image: git.uumas.fi/uumas/molecule-testbed:bullseye
|
||||
pre_build_image: true
|
||||
provisioner:
|
||||
name: ansible
|
||||
verifier:
|
||||
name: ansible
|
||||
21
roles/apt_repository/molecule/default/verify.yml
Normal file
21
roles/apt_repository/molecule/default/verify.yml
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
- name: Verify
|
||||
hosts: all
|
||||
gather_facts: true
|
||||
tasks:
|
||||
- name: Get content of docker source file
|
||||
ansible.builtin.slurp:
|
||||
src: /etc/apt/sources.list.d/docker.list
|
||||
register: docker_repo
|
||||
|
||||
- name: Ensure docker repo file content is as expected
|
||||
ansible.builtin.assert:
|
||||
that: >
|
||||
docker_repo.content | b64decode == "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc]
|
||||
https://download.docker.com/linux/{{ ansible_distribution | lower }}
|
||||
{{ ansible_distribution_release }} stable\n"
|
||||
msg: >
|
||||
/etc/apt/sources.list.d/docker.list should contain
|
||||
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc]
|
||||
https://download.docker.com/linux/{{ ansible_distribution | lower }}
|
||||
{{ ansible_distribution_release }} stable but it contained {{ docker_repo.content | b64decode }} instead
|
||||
41
roles/apt_repository/tasks/main.yml
Normal file
41
roles/apt_repository/tasks/main.yml
Normal file
@@ -0,0 +1,41 @@
|
||||
---
|
||||
|
||||
- name: Install dependencies
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- apt-transport-https
|
||||
- ca-certificates
|
||||
- gnupg
|
||||
update_cache: true
|
||||
|
||||
- name: Initialize repo_options
|
||||
ansible.builtin.set_fact:
|
||||
repo_options: []
|
||||
|
||||
- name: Add arch to repo_options
|
||||
ansible.builtin.set_fact:
|
||||
repo_options: "{{ repo_options + ['arch=' + repo_arch] }}"
|
||||
when: repo_arch | length > 0
|
||||
|
||||
- name: Esnure /etc/apt/keyrings exists
|
||||
ansible.builtin.file:
|
||||
path: /etc/apt/keyrings
|
||||
state: directory
|
||||
mode: "0755"
|
||||
|
||||
- name: Get repo signing key
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ repo_key_url }}"
|
||||
dest: /etc/apt/keyrings/{{ repo_name }}.asc
|
||||
mode: "0644"
|
||||
register: repo_key
|
||||
|
||||
- name: Add signed-by to repo_options
|
||||
ansible.builtin.set_fact:
|
||||
repo_options: "{{ repo_options + ['signed-by=' + repo_key.dest] }}"
|
||||
|
||||
- name: Add repo {{ repo_name }}
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "deb [{{ repo_options | join(' ') }}] {{ repo_url }} {{ repo_suite }} {{ repo_components | join(' ') }}"
|
||||
filename: docker
|
||||
mode: "0644"
|
||||
2
roles/apt_repository/vars/main.yml
Normal file
2
roles/apt_repository/vars/main.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
---
|
||||
apt_arch: "{{ 'arm64' if ansible_architecture == 'aarch64' else 'amd64' }}"
|
||||
Reference in New Issue
Block a user