From 0041e1ebea4d957a2d0af1e25f4af66ccd76f1b2 Mon Sep 17 00:00:00 2001 From: Dmitriy Rabotyagov Date: Wed, 27 Nov 2024 16:34:45 +0100 Subject: [PATCH] Manage apt repositores and keys using deb822_repository module The apt-key module is deprecated so the code is refactored to allow any of the deb822_repository features to used instead. Change-Id: I3eb1bbf0a00849387e7d90237429fb68d4aab3c3 --- files/gpg/DEB-GPG-KEY-FRR | 354 ++++++++++++++++++++++++++++++++++++++ tasks/frr_install_apt.yml | 74 ++++---- vars/debian.yml | 24 +-- 3 files changed, 408 insertions(+), 44 deletions(-) create mode 100644 files/gpg/DEB-GPG-KEY-FRR diff --git a/files/gpg/DEB-GPG-KEY-FRR b/files/gpg/DEB-GPG-KEY-FRR new file mode 100644 index 0000000..affa2d3 --- /dev/null +++ b/files/gpg/DEB-GPG-KEY-FRR @@ -0,0 +1,354 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBFvRo7oBEADH/lEeQBaRW4Lpmzhpn7W53hhMUefgj1bJ7ISpMC3qOlgSIeof +sQjZ5Hr0RHxz5bRVRtcOhPhKRvL0wCmTpROvKBVyrOHDn4AAh+D7bqhzrEZezJwu +on2fBRA5prT97r99WKpIPjyqeKHWY3GsbkKMYAcFMGNwYZudEm9bqFaZ9F1CX96i +VHTArZiZZgPPycOW6fZzrdPDa5/07WA4tJ4PXnMFEd3bLpRDW/t46XqBeNOitBcN +TrRY7LY/rLnfAUfTWlQVm1wb5gl1E0e4LDlaAysqZCVDriAUwNzk9aRnLQw14h18 +af3sIi649fQ/uv/JwQ9hc1os/gu23N4wKSwSvQGYo3V6oqbxkhIQ5TR0MgXIxfF9 +LoSFgnrXvUpUc+V4qXJJV+hLbTEoAKrHaON0f7BQHAiTsKB1R7FLVCMFIRtuZ1RD +iUCL9jFFXmAikHsTUFE2EOCW7+kqRSQ5ICu3IqMbXXA1dHz4tN2ji5LPZ4OKh/1O +zZQCBev4IZ3KWibFZwNxDwWFSoFQeuNKnVujsfR31SuFRWmASqZGGpN/Jr+zVNsb +iUXUBrnSj8PXYs1zSLrfVVlaga6EI29o5ozUweZDvn5VnRycHaTVjVEmYynnf0ss +axkRKDgP4e0czNTbH9Rze+AL/Xfc5F0CVQ3jGZQwLgspqpj2UNicZhTzQwARAQAB +tCtEYXZpZCBMYW1wYXJ0ZXIgPGVxdWlub3gtZGViaWFuQGRpYWMyNC5uZXQ+iQJO +BBMBCAA4FiEEPZlorJrnvhFpKI3bH9WDmJX1f9oFAlvRo7oCGwEFCwkIBwIGFQgJ +CgsCBBYCAwECHgECF4AACgkQH9WDmJX1f9pNHg//VS3bICTNEjjmXRtHdsKyRs2s +Nl6BefYDuOPy6NWIra9oLZzo1G15Zt8wH1LLHIBND1d8QILa1739coQhfNJeeuyp +sYclgSoX85UqpLeHE0Ws/o1vjNmAlQX7qDR5q1iOxUfxLjyXAR7qaqOCBR0uGjxP +ZCI88ctu0bt9iI2rzmKwgyORDWwvKOmHovHxB8stPwdToyQK/eij94CVlf086pOz +eIrEjC54jE4pq7nae8w7RsWs5OmgBkrZoXIuLBfHa1ynbUjhE3okPiZDnZr9bPTH +FpJ4DnsQGhZGjFIiNVi5zbV+MxjavkfbshpzE1TK9EhNf1DdI8A+XzpiTfA5ifDL +sm/KnA9Z+4T2EswthB6YV1lcnacSGOrEI1CQUTHPSFwZc1WUDkX5aqwib8fCT6U7 +oEngVBwN+guj5l2ba50pt1bct86c8Rv0cnaeKt6boe9sLeHbAur/R7Smdp0yIwAa +pq52eSQvrxkV2sKlvOrBLX0v4hOut4LQKzresM0smjARYamh3ksj7oAaHJx1+RMZ +AK7i2AjcMR4BvALTerVd2oM4SNghSFubJTVoMUarzeM3XQ6mFGbdwsqo6ziPlr2r +vtX7syFclRXaeJw4VAQqXlBqbpZevld7A9/3G9CyuRSoQxgPv9p6fx3aE7R65O9U +YsBsMtj2oxhKnkNjoky5AQ0EW9Gj4AEIALrNBXS0J+LAtQjWfJUwp9KsXCYx/1fL +YDENUdkbwfCTDHPZFgZf0jvPFuQkvFl7SnoyjwbnDlFCn2kYeZJ1vS3ZidUwZbcE +QCrARSKBzovsHDdafQwuUi21GAGuBOmIUSY5RihozjLgZ/5h2/vbqmCucfoYsctb +tl3jpT8HTo6DJ4oQWSsHF5e4G8U5DCpCINbJnpqtfIFbm3yYGHm9Yzny4E2aMnzG +lHErxxAoYufGLh6Hfs1JeJSsWL07334NZMU/zgzUs9dBbhbJ0/QBnRVuU+YHje+x +9Ir+szHjKwHo29K6g3BV2BTjWpoW7IQG2d6baN1VgWepwpLnbzAG5wMAEQEAAYkD +bAQYAQgAIBYhBD2ZaKya574RaSiN2x/Vg5iV9X/aBQJb0aPgAhsCAUAJEB/Vg5iV +9X/awHQgBBkBCAAdFiEEN1UvZYKIwg4j4yPMVBjykdDUoaoFAlvRo+AACgkQVBjy +kdDUoarcggf/S3Vd9BqByRkCyuPLwgKWLt3KsIuKOKG9+lzoAy2VsKOomistO3g0 +itefSRUOGgSArVG/rarR0Dzva3LI7sFF9vS4XKlARSPJV0rY13buSR/LnagqmWUf +mQJTnh+MSWS6P37Burw0DqWioPd7VJQ67BfdrGUUeP8bChIPByo+ssi1qu2MFmLj +toYiLSYW0gRSKtn8+oz5hk1lzuQBBTZ14ykqwZH9L1kCo+3Q7O7e1dztJ6NX6jEm +QeHwLq27RqoUG15HR7CQvupa5CLbJ0Vja2tSkUnYb/ph8z7H9rkHz4qjKQWI1QoC +jLkiyrdDeWqVWfpwGhoAryBlWKn51T9j6NecEAC5WojJF6xqYFiiT/V7ekmMKZ0l +PA/IwW12U+ZP2EFVbqXjwBj3Mqx4NshNdRiWsl24ulIuNpmi6I3MJzx/1sfafGHl +mq7n2zv0Cky37M28tYoDOt5fzSLYn9cgo/OzhS3D05ARbHP+ofcXDz+So+mj8wQb +uW2sh9ToaiYOMzGqyMR0DFO6++FdIYzphN0sPyJBdfGeePNajV6+xhdS4zktWEGq +QaF2XukTGxodJ3J3poeCarfK9ubmkemLRJ1Q+ynlx5KNzvt4Ut1pEO+OXkYOxGfI +8gUuj3BXICVP3UVpB7RaqW5obz8zqQkskRqIBBrLoX+Dl+l4sID20BmW028xurkf +ef3lNfLGTat4RleypLrcVZ4CMvAM/KOLInrXEoFqIKLiwnlAp6RK3mRL1IURyOtO +WENn6w0DuD3yyQVglQfNft6TqaMjVxFjh2fDgWvISMe7x4Jp+EWljwBnpi+TtnG/ +P99J2sGb9Hwu6gC45mQ1Ufoe+suYuehSxAWNz00GzBS9XU1xRs00xLCjPNPhSjHO +MqmGdm3cSeFdcmp7JRM05RtDOeBYAZuDV/HZNQu4XG2gHUv1xbuIqwKqN4vRMrI2 +8fWRdN2sPNlULTjeeMpxy01lfwilvVkXRJKyCPCx9MWZfJ0qbFeEC/cDOonx34lK +mBW0B2Otoah+Em6d5bkBDQRb0aQLAQgAxXl4JTeK5v3xU8CxMG8IRLVrfT2XTWN+ +RvfnIoPPpvs1M9XXNnw2jVKaMJq/s9gKxpl3QaqcxR+zf+7L49ooAUoFodPg2Fbg +HoNLZYukSLyPyL4LgE/X1ZQpx78m51Yn+vzej0Va/dqa77W90GlDM4CIE/ikFFpn +oPO3c1SaqJv+bk3XNoP2l35ttsk3Y9if3r2LJRyn/ovVXZgQD+Ulb+klYugOBiKl +ezuq/v2tnySQJ7ouXuWyoQrcuTUS05GbFdhlbr4xJHE2HLxmqn1aSV7TQb8Uk9zQ +0SmSTinnlSlAgoDeq1veDLeMnYo6No2V2IOcXOLv9hOa3sNV+FnsaQARAQABiQI2 +BBgBCAAgFiEEPZlorJrnvhFpKI3bH9WDmJX1f9oFAlvRpAsCGwwACgkQH9WDmJX1 +f9p6+Q/+N97F+PW383hTi84JMyiQsX0mJrvDjt5hkkdN+7u0tUNL0l3AACQ7b85/ +ofJsGnfh8kYlB2nCP+gaNQU03qqbcyMLHsuwB+ULG0izbREb7aK02RBluFpIbgdV +rFrgrUkLiSsuQLdReQYRTP1tU0peosBPxhhb1alAGhkPebWx+MLlbtiyg/j4pu8+ +oFirrJ5WEltamGt8OSbdLGNS22PuwxV8VDo/Xbi57P1VBglCpgG1nWDEN8+i5nHh +8OKWZmvRhih1F89BR7U14OET+EENrZd8YRF2KOvOAM0eR1aIK/AilbINVZV0girt +B/rYFhwi9i7Fyo3gEtPRRZpzcQ7V0VZiBlpEAbjgqwe1XDVNJYquM7E4S2jBidR6 +XJaYQImiwzMcyFopZZgD0F46xSI3O8zZp21g7Dq4pv6wRXGU+L639u+X5INDtJ7s +kykwrYzmeGg/Mp0Mseiqq7iIJXrbP4dL1+Ck9alSGCe0p5vd3CIeBR3pFeSDG6yI +2DiRzDfzbkIuUdIOAjXWjIl+XWfsFc/Znnux3UcAGec4Nhe3JvKEy5keDpXZGSaZ +JaFJ3WJl8uQfJjO8n8M+P2lxmrpaErqkMk0+SC3DcSSZFEDigD6flMvfdVnOqdLa +R1K6skDZkO+PQYqSydf9erO6+YgEjJB0/uCMXgHDVsmO3uKLOTg= +=IWDv +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +egKcOCfAMg== +=Lt8H +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +hpAfNoqJsVCvi/Q6puan9EyRqzvmxWdOm9TGJdsCEs79jpnC3p4eU9mLpbsbRlfW +wln9ea6CQlrFRiUdTLdbtfsyD9ag8TNqhYrDSQkObIrq6nMdwmYiPCdWMDSoz1tn +ricd/sOMrb+Nwi9OVMFVyaCypZLx9tqAf+9j6i/Z+ADxUJWeuJF606fniIUaxbIL +VFr1TffcsGAbBATqhZWbJOuO09PqwBUxpz/nrrPw740u0FBkHqj+oGz+kYnshBoZ +Uz6nB8Yn2re7zTrq6v9jD/42ziJknu3iMuRZ617ZLHLS0is4uzXndrYqLVKzL/a4 +Nsn62n5FbisCrcqstqnsRF4DVy0hqQpeiU4FPucVZxTRC8+Us7NzcaUprTgax4xc +AbfSmD1FQ/Q1P9QZFpsYVRYpzf1Qq/9rXKMQJWuARJkXoD10tpnn5bpp3/1ZV0iv +TjcnGmrrb5AzpxqzuWSP1i4bUNAJ5fqdQpFzOkx5WTPerrdStPkiJ6ZR0BfZv9zr +hD+ibTUQ/JfUS/CUxGV9TMpNC2Ce+9Ml+0aTptrnZ0cv+fq5Nxg06PxbP3RF83mu +2rTWnYtMxoXS8NX4C5jXD/MXO2mUH3jM9pLcib9b18hYk2nKFrf+4rI9SUzLnApd +1maO28DyQUMLjBobnEWS2uMObE0qmpjTK8xL8aol+OFfd8nM6mmNCs01baRBu8x1 +51OT3zuJY+cfJQ6Fr3Oza6KuwfY8I4qje5jr2s9k4C8krPEkD2KLVTAO3W2FmSWO +9dq1LGzHRnR64uNCwUvyPfvhp+fItfpRIKECBzGssY8xJZIoFHTYMrlICCL9E7ld +pci1lmXWLk2mdhvRwADsXGzEwPgXV6tRP4ln7DLdh/IrsyEknTsknpTbLPy4NC6u +Xcm3WdJLC4Uya7EuEm0EtlFKyX8Bl0wbNP53dz/ukMAUdquiSy4Q1bq/Bs1GjWgU +Ig== +=ZfSv +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=gQ5g +-----END PGP PUBLIC KEY BLOCK----- \ No newline at end of file diff --git a/tasks/frr_install_apt.yml b/tasks/frr_install_apt.yml index 535be62..5fca3f4 100644 --- a/tasks/frr_install_apt.yml +++ b/tasks/frr_install_apt.yml @@ -13,46 +13,56 @@ # See the License for the specific language governing permissions and # limitations under the License. -- name: Install gpg tooling for key management +- name: Validate repo config is deb822 format + vars: + _repo_check: "{{ frr_repos | selectattr('repo', 'defined') | map(attribute='repo') }}" + ansible.builtin.assert: + that: _repo_check | length == 0 + fail_msg: "The following repository definitions must be updated to deb822 format {{ _repo_check }}" + +# NOTE(jrosser) remove this task for the 2025.2 release +- name: Clean up legacy repository config not in deb822 format + file: + path: "/etc/apt/sources.list.d/frr.list" + state: absent + register: _cleanup_apt_repositories + +- name: Ensure python3-debian package is available apt: - name: gnupg - state: present - register: _install_gpg - until: _install_gpg is success - retries: 5 - delay: 2 + name: python3-debian -- name: Add/Remove repositories gpg keys - apt_key: - id: "{{ key.id | default(omit) }}" - data: "{{ key.data | default(omit) }}" - keyserver: "{{ key.keyserver | default(omit) }}" - url: "{{ key.url | default(omit) }}" - state: "{{ key.state | default('present') }}" - with_items: "{{ frr_repos_keys }}" - loop_control: - loop_var: key - register: _add_apt_keys - until: _add_apt_keys is success - retries: 5 - delay: 2 - -- name: Add/remove defined APT repositories - apt_repository: - repo: "{{ repo.repo }}" - state: "{{ repo.state | default('present') }}" - filename: "{{ repo.filename | default(omit) }}" - update_cache: false +- name: Manage apt repositories + ansible.builtin.deb822_repository: + allow_downgrade_to_insecure: "{{ item.allow_downgrade_to_insecure | default(omit) }}" + allow_insecure: "{{ item.allow_insecure | default(omit) }}" + allow_weak: "{{ item.allow_weak | default(omit) }}" + architectures: "{{ item.architectures | default(omit) }}" + by_hash: "{{ item.by_hash | default(omit) }}" + check_date: "{{ item.check_date | default(omit) }}" + check_valid_until: "{{ item.check_valid_until | default(omit) }}" + components: "{{ item.components | default(omit) }}" + date_max_future: "{{ item.date_max_future | default(omit) }}" + enabled: "{{ item.enabled | default(omit) }}" + inrelease_path: "{{ item.inrelease_path | default(omit) }}" + languages: "{{ item.languages | default(omit) }}" + mode: "{{ item.mode | default(omit) }}" + name: "{{ item.name }}" + pdiffs: "{{ item.pdiffs | default(omit) }}" + signed_by: "{{ item.signed_by | default(omit) }}" + state: "{{ item.state | default(omit) }}" + suites: "{{ item.suites | default(omit) }}" + targets: "{{ item.targets | default(omit) }}" + trusted: "{{ item.trusted | default(omit) }}" + types: "{{ item.types | default(omit) }}" + uris: "{{ item.uris | default(omit) }}" with_items: "{{ frr_repos }}" - loop_control: - loop_var: repo - register: _adding_apt_repo + register: _manage_apt_repositories - name: Update Apt cache # noqa: no-handler apt: update_cache: true when: - - _adding_apt_repo is changed + - (_manage_apt_repositories is changed) or (_cleanup_apt_repositories is changed) register: _update_apt_cache until: _update_apt_cache is success changed_when: false diff --git a/vars/debian.yml b/vars/debian.yml index fa3f877..f32ed09 100644 --- a/vars/debian.yml +++ b/vars/debian.yml @@ -13,21 +13,21 @@ # See the License for the specific language governing permissions and # limitations under the License. -_frr_repos_keys: - - id: 4A56C7738BB3F81595A805D2A832769908F13ED1 - url: "https://deb.frrouting.org/frr/keys.asc" - state: present - - id: 3D9968AC9AE7BE1169288DDB1FD5839895F57FDA - url: "https://deb.frrouting.org/frr/keys.asc" - state: present - - id: A90FC36D9429409798E9C2D874DEED43AB194DBF - url: "https://deb.frrouting.org/frr/keys.asc" - state: present +_frr_architecture_mapping: + x86_64: amd64 + ppc64le: ppc64el + s390x: s390x + armv7l: armhf + aarch64: arm64 _frr_repos: - - repo: "deb {{ apt_repo_url | default('https://deb.frrouting.org/frr ' ~ ansible_facts['distribution_release'] ~ ' frr-stable') }}" + - name: "frr" + suites: "{{ ansible_facts['distribution_release'] }}" + uris: "https://deb.frrouting.org/frr" + signed_by: "{{ lookup('file', 'gpg/DEB-GPG-KEY-FRR') }}" + components: frr-stable + architectures: "{{ _frr_architecture_mapping.get(ansible_facts['architecture']) }}" state: present - filename: "frr" _frr_distro_packages: - frr