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
This commit is contained in:
Dmitriy Rabotyagov 2024-11-27 16:34:45 +01:00
parent 552c4d2aaf
commit 0041e1ebea
3 changed files with 408 additions and 44 deletions

354
files/gpg/DEB-GPG-KEY-FRR Normal file
View File

@ -0,0 +1,354 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=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-----
mQINBFyVPosBEADMyAbmmfo6x7e/dly+yQk1BuWUDbvMHFX9coCSItNxVvvIVzYJ
Bw9pp4kJsTeqTI1cNQcCCjaeWbWevINCD5yFGN25xNPz2s1lgHCpJQzs/1qMKuE8
vrHkEpJZTrdPSl8J8VdjQDCIh0NrLss1VzoPpFbm7lIkuN/6tl87hsyUyedd/0bY
KkNVZfOW4UAjJFWQakofhTVifHqozb6wu+SYtPFnP/yBJdsYwrKlyyhR8hIIjyAK
sxpKz6Dym6tHoDNLIcPy1Q3uNUaYdN2pXXRqzLTIKq7M7RhgY1W7QO7VFtkaG74j
tmjbJYsX6nBGSlGE5cmlSz8N+D+uR/0NPMvgKOwI38joIT5/Sii/jgZUuX4Mz9Zk
7Rh/C+P906dJpjbCbEPYSxVnZC4fHJZ0ezSEgrFKZ4QGoViNJEcc6jwNkgTM7jdz
0e/xMKu4Ed30jLO7TvnwmcGWF/m2DZIgIMu9rhNHUaKeGRKo+Daf/x1naRbht/a/
uSyukGJA5koipy8XxmJorx7MdIa9ekYPJaHM3eOcE1fxn7IcOwoqn0piB4lllq2r
akLif195eFIcdI/cRfCX2fgQxBbgAAolUCqguJfus7cQCkn9Fr0cDgq7c0s0dQEw
0kofqGUq6/fpdqxadRdPlYXS3BIvrWA99zOVCzxaccvKaMZxaKauc/rKbQARAQAB
tDNKYWZhciBBbC1HaGFyYWliZWggKGxhdW5jaHBhZCkgPHRvLmphZmFyQGdtYWls
LmNvbT6JAk4EEwEKADgWIQSpD8NtlClAl5jpwth03u1DqxlNvwUCXJU+iwIbAwUL
CQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRB03u1DqxlNv7w7D/90u8bETWZmzRZ7
sRBfyN30YhXgvEJQCSKFgH1H5BS9H2W+VYQ8nmXpoVpsU5wLVosJ55WpO9oF7+6R
+wO2r3lo+vkqFzscYLfNd/KTo6r7kl7VTTN9bBCMgl7eFtmqSO90o5UCrNBHk2Ax
fTBJX9TLGa4SLPhiTlz51XdyYls3yG/3yQ6de6K+jPjrQsP2VbBSHP9OA+MKRTr6
ONDTyJJ7TEAuoX7W1NLMQYS0kdA1jjGvTKeyHkb8QqFDTM7RyRdczKBEwOXSi7DW
8v3Ink+7CgKGGLnOo3lXlm7q516Z9JMJ5BJtFkTx6Bo9iSAK4jSBiC5Zlta6CtP7
lLwq/eOut/y9VoDXsdVkQl3UdTrB5b/4MZHL4Z6ykN1dv56XzjdnIl/nM7azwrTW
N9tBDhjrYvKvscSI2l8TGdAseb4ftovHwIBFjNIlI6TYVEUR93ZEGPZCmuYeVSJe
MWStJuLDa+bbbr2/OLvHsjyWB0/5LJNsHHfMCKLZTP8jeNVcHAJi7P+iNPPLp57C
N2NEmyuJwgxFN/5cHlZzkg0QQgSaTm/tsft0jFJh4s0kO6L5NZ9ACP2JC9wfaBmt
QFwdl+Tc5/Jf6pTnnMzeHuSiVWvG4jB3EVr47dWD7p5ekP+O0cG0Rnm2rf66M+fo
z88Ga0gduOhxfdRn1qT3smK3hgyv2bkCDQRclT6LARAA8xTr8yu7ab6f4NAeMnTL
4mjjYoYVXBMd4qT/cdtkSFoCdOl+MwcEZmDrq1HzT5CVXo9hPEcI7iuyXiejoMhB
GFfvdY0Pcg5yMoUL57kE3XBoz9C8TEal1loSfTJ4IRou2VpY2sruaKgxO7PvmyQM
D8mk4Sgyewn6VkcQx4dGwQrN2VU8mwFqp4GnEm7DgVJKqFRD43hCFoncNYaSOc52
vf/EEU6VYxPWi01nZoRiNp8tXt+dYk5yb6fEhDsH9YYk51bgiiiGNoQw/zC1w2ek
zPqJH/Y0BzoODbJ59vqc2jCuzGII4tFkijYbBTcCk1b7/yvQgwLdBpOTrrHcNolh
plr7zHcB8TOc3aYrJ8TkwgP80uK85vlAIzB9AkZ/9Gn2K08b5eVC9cvMm0idwFkg
0fHY+v2aDesA4lv1UtTsQVmrqnx1zaCjwH9tu73GTGXX40guYpbatPu3HDog/QkV
fykVI5B2+vMixFCzudMKg80K+H7QI3uc1efqEmMRKjQU2rKXTNo/lASWjQMNfbWt
JvEsLuLPc909OFhBfoX6GR7pmbKn3MCrTpLVeUkmp0EjcqYaDZXHnzKZQjjNjOKm
6J69G3Ro6Abs7tRpnqOLTLZ5DKWBYidc3/fp/BF+CpeHdZlstLUazQ56ti9GshPf
W4+6TRg2gt1leeXRU18jQz0AEQEAAYkCNgQYAQoAIBYhBKkPw22UKUCXmOnC2HTe
7UOrGU2/BQJclT6LAhsMAAoJEHTe7UOrGU2/kToP/il4dvWMMJS4pgXuDPcwTaYc
e8T9a8Uf0B2BOOKJgLZk2kvI21bwHnGxXc3zuUHCzZ81Y89/IpX+s37J+frvLbqd
xOfE39+5plK9BDn7G9UsTzg7mXuGWpMQA6Mvki4LslY/qCfUqzVeFPNZquH4Emxr
z1u0SldhaqctrkKwW1teTTmqbCtGrRpb0v8x42TBw+WvBJopelpgtdy3TnRbKk86
NkiiPFVRnfC0RjyMlLxa095t5s8irrqjnAAKMvwKiuzt97CQ/U68WbsOYLyv42PT
ClfbbFJw6ghTZ7SRxiGwUVz7EwQ31MsiffmyJKRca81yqSQfrPS4MkEXChZBt8wF
C1IhG9I9zbHKt9saXWPYCbL8Zs2x3c1md62dl4mrH/VwLV9T+7PaJCM8qrFtkWlu
cYntgBhLW1KY9dWkCtZ7ML70n8FyIyHMD35mZb3lw+c1dBusuwGwZLSksH9ucOQz
Zh3+rlZ8PkYXXosKTkp9qBDVoSgNU5AH8F+K/Uw1uVm+JqqFP/ieQQydS8wAVYAv
ax/ZP+wTHhLvmHUoI70K51osk+sLcFh+h9L6sK+kq9i2mrJs/d2Sk6jau96RJCFe
pHI+29yZoK5ZpOkvFAFvbNXMFd2sn5O60y9LAvr9u2QRNlTvmQ7B1o2/US62SoD4
HGxIKIAggOUujclydhvumQINBF+HYcEBEADCT6kozPbSHZHzBhSo4DHs8BRCTi7S
+hSa+lfu0qPlnXfNZMI1tJWlwvQlN2UViB+xlaOHmJnNs8TbhV6e1sP9XhDU/PNd
FnmTPAhdGAH4OTsDqySxTijhFNxHkpr2ZtElm6CWJrLKz02HAYUfhuMriBaA7wpO
wk7SWJsSCEdWalA563m3Zf79gpJLo2O2RNtoLZU+l3Ni7UMTUDGjLjayHfISThJU
GEVEOlvq9wS9qulMHQkcHe6fcekdzm/aH16q3lN0fnGcpSuo/g7ztqesvYROpLZo
P09S/ozlz9us/GmODjQO0kcIce+0mRpaxZocbJODkU9LmRWUQiI6909AffM8bOXy
ZvdRQX5Icrs5BdNub7EhsgLdMM2JmYkniqcxUUzkTZqNEMcI9IYzkFk73VUmNWYH
iBbXjjkGLYo2Im7YASQHcARmA6V6dzqN9/Ceb4e0N+9O+nhFwYLdB4gH99gAwwIO
y5QDPY4dkWm6fmAMxVZt91C8vKCa8auB5j44hde2wjBWCMDdxWzVKbR8DRRfXl4X
C5QzyrFNkZ1MObTMdDqjChYppQKUp0nnL+v9ICgOHmSiilaswFmJr+cZvmTtBXM4
BEyxTCEsmGKRt3Y2+nCxDWeeZA+DhkNeHf+jxHjRPB5lMSN27TOINu4ZrgAJ8tGx
AfZq6hegq1zVHwARAQABtCdKYWZhciBBbC1HaGFyYWliZWggPHRvLmphZmFyQGdt
YWlsLmNvbT6JAk4EEwEIADgWIQS7yayp0TAlosGG/390HpKh9uOXWwUCX4dhwQIb
AwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRB0HpKh9uOXW7EsD/0d4wfpiB9i
iNhYiv+F1k49Ko37cbXO7O6LnzKXeoJBlA+nXBgqnTBJh3wNX9OAq0E7O0j/0L2t
/QDFsNfuOEdd5KYTYQ/TAX/ckS5hychH9VA9c+2HeWZyD8y4RIrxHEQPCinV8piZ
hG7ei3sFO33AryrldJFOfIvPa+ovzBgunL9iI6Rx1FtYOOo7+uZUAfOGKrVNMozM
DfJ5HWp36XyOLn/AgkHrHjxRBznMdWG6HIo3q/PPFcy9rSEqIaOk7MAYagtN2iNo
W7fRYB4OmIJu7g+yn9xIS3EYTomrd+A3IdN8JhQ6xvQiOPd43kw4UKkTi8kWryCV
AGCoQvaqrfjPiYzNAHrZayK5sWpVIXbO3rdVS+yBRKmO6PDyZ4WT12bKJ2Uj3YtG
Vlta6y9uiRR7Z4ZSDW7EUXLW6Yozl4B+432NEwsSfabi24xSAbYuq9ii4hKQPX40
a8gh8SSTketQcAdZ7VVi8Z/1TCgWBZhAKzXEeelUiop0Ml7EeaDQBko0jftSnAOr
PyXnXRh57rUW3QhK6a/HVTV9uN0DPD4CuSLDdsmYTqp8hDdIuIp5oRKSn7u3FLKb
aDEg5k9nh90jcujxPVSM5Af4hDwxbNKT2dmorXqJyM/91567LiNdT+kCXZaGln4I
NGjeFhhJA1nR8tBNPym4A9OeU17umpBSiLkCDQRfh2HBARAAuaErhmJw8+jjGAOI
FMe9bI0+aFrm7W+RI/sVnL+fBAAaOsVeAYq1+Zd5dy4zF88w6XlhxKDDVRrqCrkI
JWrzsZPjV4jS4GMOeFrMBR2ZYqvww8KTAiNf+fjcgQoYJoxbALC7qlTMH8PpU5O6
pwuPUjWTZSTk56R45OFxj5Q1f1MG80ZVNvhsdGL5ZVNHlxpGMEwMAuWexp/AwgsV
WSZVb+xSYvmT+53PCAiI8PF3Ki/5pXylWY2AY9Ji0NSCN50ydGyQhUmki5SiEdIO
jDUDHDKbbB7zUKPGDdAGECdW1BgRRvCoodJVmpFh+s2tJwaF0AnfxDCAdD0tHxhL
ylRIWIsAGn5I/CeZFzOFSNJcDZTe1Ei/gAlX2jzFK3LZOzO4mIfHdm23Pee/GXe1
q/jSdYA1WtjDQbf8MSUeOhLYNkShrcM1aMJF03OIMx/c4rOm7aTZ+IiUlXOTRsBW
zB+Lvu9YdAsOvHt36IbXYjyr7ndmfVgFPJP3y9B5sdhid+Udd6prSwbBDKI8Hsr8
m50J3ldfte/MmBcTTIe56w4D1BKrhYr7KZO7FfXM4NUlVXFO0WB6hyFbbD3y+WVm
p9YgZpv9UATyXJGqLUf0eR1vsyVhiujWbllx7pHDR8n+sK5JFd3d2Zys86Mr/HFP
q35tcbGCQUoIP4E/hx/XfKhrLx8AEQEAAYkCNgQYAQgAIBYhBLvJrKnRMCWiwYb/
f3QekqH245dbBQJfh2HBAhsMAAoJEHQekqH245dbqXIQALr9sNfgfbnunRDt2+88
rPVOdrUiB+cAmBkYOYhAwJw8ISG63pTEjYNMIWQDQOoib1tdshpCYnJAtNRt8XiA
c6i30tvsRlNUPSeYCzm+GAnnOBA6yJaRJS3UXpFcOpExanUgvbsVS57KULd3tu4t
1iD+IWDy3cm+MurZKLjhUc27VoC6MLEE1I6tyy9wRyjQikujktEH8M9upycLL8/o
octStD9gqOb41/Yxfvjc7IPghchD+Eum0k+9bZHIqmov84TCdBLVyDnivDGWqAjS
e0bM6NMz9JFr53MGiuercuQ3chOtN5aYEnBkWCZSoXwnAuWbIatLU2XTZwJHinrL
saEzCgc8OlW5UbMM3OsX2Z+xxCjs3psH4bWv1DGi6XGl6xnt1991TvKLSVKPP85Z
WcBKKZtJm+85FAC4JQLPDqlduO92RxyN2qxeIp0VPINxJnFV/FJvnucz7NmUGGjZ
SRmA5h8raQL5hGEsrX2eYu0Qjno360ohTCs0nfvCFzna8w77Z4IJk8BVH6hMskzS
HgDkjcrkVyaMqSko8OmiTD/7lq3/25WUlcTvQDY12Z7DoQbHLIJp4cEb/JOEsHxn
zLXT7WewHuBNMPa+DeBlqxG3LUm3Y8vVonJCpEyPMTmt0P4CtTSEBnNaVerIeLYk
WQvWkCLJSNSlWzwwufgK+3p8uQINBF+HgocBEADMSRyIcmTx3BIDNYIq6ebAlgYH
JUTwKChtglewXbHU2PAaEHoKBz26Zd/+11NBjdGF5vmVUUi/ZsN4VKdChC187sJo
8Py3pgdtdueNQrno5cAmfWRBZXVlqlnjgxc2He4VidQBPwPlXt/kE5ZNke95Z2te
WnvBakNrduZm3kCbIgYKdUgknJOQ1Qj+og/KNKNaOfik7CstTrnWuWC3i5xQUnMB
AmHu0otZ52Mz4xnj71QB/GYwpDj4NNvnPw2wAhEfbpro5zQq3jco7R+2itmm35o6
NXUI834ccXWpIS0iFmW3gm/zQg6u/bJz33olbaC7e50T0x/y6YaQjnCRgydllV00
gEqQxovI2pDSTWxcscDva7b5y9ZZj5ERC1YI/EA/OaM2B2Oj0pPJW5pNQ7NeemH5
Ao345Jnxiqna+YhsdEY1m+/yr0sKLOG2bFR+FKjjqmTnQKeTxHNe1ck+CsFl5xDU
dPsOFCNX8tQ39pFxOfjag0MdHw4mFokwWYVEYuGUyjPx0Kr+g7VPwZXmQWotECzA
pk9cQSpaxbIRFZ2GI9xeRd9IYNWxpP1d7CwC1UfPd1tGhZGT04PMCJh4OcpSL+Ns
CFEvVfMo7iFEkgPZrBlHYjz23DvughDSgbvRvZZn/C4kjCgTLKTPFSTOXC0zyO4w
RPBHGi9UQX77kUeS9wARAQABiQRsBBgBCAAgFiEEu8msqdEwJaLBhv9/dB6Sofbj
l1sFAl+HgocCGwICQAkQdB6Sofbjl1vBdCAEGQEIAB0WIQTDErY1AD/xZWQAHuPl
OFRZpiB/EwUCX4eChwAKCRDlOFRZpiB/E7RYEAC7cjyi/ll89hhGiOB8oPc9uECH
PZgHJAYcAEyq6+yPI3CsZ5kvFVKWMdVQaRRyy7a7B8jj3FT1zIZgeASWNkc9tCnz
BXkMeLsWSEsCdfvekSFf8CRzKBJmjkEzykzMSM1O4GPy/fp8gQtHGY5nsOOPfLFM
dVWTvA1Vw6ADYlo+pVLXAGIXn+R4hgxT+ac1bfIvr9an6gcwOQ8vt4SKGFgC5RxL
adrPx4wFLczl3EyXwNSwUG8kqDM+tMeS5ziYMnkIVa+JwE4H0yEbJ8DgEm+ZgfXp
lwAc1yaM+36hgONrLzrmE7IRKI4lG57D0ZBAcQlFVM9Ka0muOnKj6qFeIE5b1KSr
q/z/jl4B2D0IqlOPasWEQcuhgdPEPN0pQSXuOR1kCOo3LH09RVhH/GOQpeagNxcG
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-----

View File

@ -13,46 +13,56 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # 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: apt:
name: gnupg name: python3-debian
state: present
register: _install_gpg
until: _install_gpg is success
retries: 5
delay: 2
- name: Add/Remove repositories gpg keys - name: Manage apt repositories
apt_key: ansible.builtin.deb822_repository:
id: "{{ key.id | default(omit) }}" allow_downgrade_to_insecure: "{{ item.allow_downgrade_to_insecure | default(omit) }}"
data: "{{ key.data | default(omit) }}" allow_insecure: "{{ item.allow_insecure | default(omit) }}"
keyserver: "{{ key.keyserver | default(omit) }}" allow_weak: "{{ item.allow_weak | default(omit) }}"
url: "{{ key.url | default(omit) }}" architectures: "{{ item.architectures | default(omit) }}"
state: "{{ key.state | default('present') }}" by_hash: "{{ item.by_hash | default(omit) }}"
with_items: "{{ frr_repos_keys }}" check_date: "{{ item.check_date | default(omit) }}"
loop_control: check_valid_until: "{{ item.check_valid_until | default(omit) }}"
loop_var: key components: "{{ item.components | default(omit) }}"
register: _add_apt_keys date_max_future: "{{ item.date_max_future | default(omit) }}"
until: _add_apt_keys is success enabled: "{{ item.enabled | default(omit) }}"
retries: 5 inrelease_path: "{{ item.inrelease_path | default(omit) }}"
delay: 2 languages: "{{ item.languages | default(omit) }}"
mode: "{{ item.mode | default(omit) }}"
- name: Add/remove defined APT repositories name: "{{ item.name }}"
apt_repository: pdiffs: "{{ item.pdiffs | default(omit) }}"
repo: "{{ repo.repo }}" signed_by: "{{ item.signed_by | default(omit) }}"
state: "{{ repo.state | default('present') }}" state: "{{ item.state | default(omit) }}"
filename: "{{ repo.filename | default(omit) }}" suites: "{{ item.suites | default(omit) }}"
update_cache: false targets: "{{ item.targets | default(omit) }}"
trusted: "{{ item.trusted | default(omit) }}"
types: "{{ item.types | default(omit) }}"
uris: "{{ item.uris | default(omit) }}"
with_items: "{{ frr_repos }}" with_items: "{{ frr_repos }}"
loop_control: register: _manage_apt_repositories
loop_var: repo
register: _adding_apt_repo
- name: Update Apt cache # noqa: no-handler - name: Update Apt cache # noqa: no-handler
apt: apt:
update_cache: true update_cache: true
when: when:
- _adding_apt_repo is changed - (_manage_apt_repositories is changed) or (_cleanup_apt_repositories is changed)
register: _update_apt_cache register: _update_apt_cache
until: _update_apt_cache is success until: _update_apt_cache is success
changed_when: false changed_when: false

View File

@ -13,21 +13,21 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
_frr_repos_keys: _frr_architecture_mapping:
- id: 4A56C7738BB3F81595A805D2A832769908F13ED1 x86_64: amd64
url: "https://deb.frrouting.org/frr/keys.asc" ppc64le: ppc64el
state: present s390x: s390x
- id: 3D9968AC9AE7BE1169288DDB1FD5839895F57FDA armv7l: armhf
url: "https://deb.frrouting.org/frr/keys.asc" aarch64: arm64
state: present
- id: A90FC36D9429409798E9C2D874DEED43AB194DBF
url: "https://deb.frrouting.org/frr/keys.asc"
state: present
_frr_repos: _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 state: present
filename: "frr"
_frr_distro_packages: _frr_distro_packages:
- frr - frr