Skip to content

Commit d2cd82e

Browse files
committed
operations: add GPG key management operations
Add new gpg.key and gpg.dearmor operations to manage GPG keys and keyrings. These operations provide a modern alternative to apt-key for managing APT repository keys. Features: - Install keys from URLs, local files, or keyservers - Remove keys by ID or entire keyring files - Convert ASCII armored keys to binary format - Manage keys in specific keyrings or across all APT keyrings This is part 1/3 of modernizing APT key management.
1 parent 7bc7ec1 commit d2cd82e

File tree

4 files changed

+11
-43
lines changed

4 files changed

+11
-43
lines changed

tests/operations/gpg.key/keyserver_multiple.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"mkdir -p /tmp/pyinfra-gpg-empfile_",
2121
"chmod 700 /tmp/pyinfra-gpg-empfile_",
2222
"export GNUPGHOME=\"/tmp/pyinfra-gpg-empfile_\" && gpg --batch --keyserver \"hkps://keyserver.ubuntu.com\" --recv-keys 0xD88E42B4 0x7EA0A9C3",
23-
"export GNUPGHOME=\"/tmp/pyinfra-gpg-empfile_\" && gpg --batch --export 0xD88E42B4 0x7EA0A9C3 > \"/etc/apt/keyrings/vendor.gpg\"",
23+
"export GNUPGHOME=\"/tmp/pyinfra-gpg-empfile_\" && gpg --batch --export 0xD88E42B4 0x7EA0A9C3 | gpg --batch --dearmor -o \"/etc/apt/keyrings/vendor.gpg\"",
2424
"mkdir -p /etc/apt/keyrings",
2525
"touch /etc/apt/keyrings/vendor.gpg",
2626
"chmod 644 /etc/apt/keyrings/vendor.gpg"

tests/operations/gpg.key/keyserver_single.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"mkdir -p /tmp/pyinfra-gpg-empfile_",
2121
"chmod 700 /tmp/pyinfra-gpg-empfile_",
2222
"export GNUPGHOME=\"/tmp/pyinfra-gpg-empfile_\" && gpg --batch --keyserver \"hkps://keyserver.ubuntu.com\" --recv-keys 0xD88E42B4",
23-
"export GNUPGHOME=\"/tmp/pyinfra-gpg-empfile_\" && gpg --batch --export 0xD88E42B4 > \"/etc/apt/keyrings/vendor.gpg\"",
23+
"export GNUPGHOME=\"/tmp/pyinfra-gpg-empfile_\" && gpg --batch --export 0xD88E42B4 | gpg --batch --dearmor -o \"/etc/apt/keyrings/vendor.gpg\"",
2424
"mkdir -p /etc/apt/keyrings",
2525
"touch /etc/apt/keyrings/vendor.gpg",
2626
"chmod 644 /etc/apt/keyrings/vendor.gpg"

tests/operations/gpg.key/remove_by_id.json

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,12 @@
55
"present": false
66
},
77
"facts": {
8-
"gpg.GpgKeyrings": {
9-
"directories=['/etc/apt/keyrings']": {
10-
"/etc/apt/keyrings/vendor.gpg": {
11-
"format": "gpg",
12-
"keys": {
13-
"ABCDEF1234567890": {
14-
"validity": "-",
15-
"length": 4096,
16-
"subkeys": {},
17-
"fingerprint": "ABCDEF1234567890FEDCBA0987654321ABCDEF12",
18-
"uid_hash": "ABC123DEF456",
19-
"uid": "Vendor Key <vendor@example.com>"
20-
}
21-
}
22-
}
23-
}
24-
},
258
"files.File": {
269
"path=/etc/apt/keyrings/vendor.gpg": {"mode": 644}
2710
}
2811
},
2912
"commands": [
30-
"rm -f /etc/apt/keyrings/vendor.gpg"
13+
"gpg --batch --no-default-keyring --keyring \"/etc/apt/keyrings/vendor.gpg\" --delete-keys 0xABCDEF12 2>/dev/null || true",
14+
"if ! gpg --batch --no-default-keyring --keyring \"/etc/apt/keyrings/vendor.gpg\" --list-keys 2>/dev/null | grep -q \"pub\"; then rm -f \"/etc/apt/keyrings/vendor.gpg\"; fi"
3115
]
3216
}

tests/operations/gpg.key/remove_from_all_keyrings.json

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,13 @@
33
"keyid": "0xCOMPROMISED123",
44
"present": false
55
},
6-
"facts": {
7-
"gpg.GpgKeyrings": {
8-
"directories=['/etc/apt/trusted.gpg.d', '/etc/apt/keyrings', '/usr/share/keyrings']": {
9-
"/etc/apt/trusted.gpg.d/compromised.gpg": {
10-
"format": "gpg",
11-
"keys": {
12-
"COMPROMISED123567890": {
13-
"validity": "-",
14-
"length": 4096,
15-
"subkeys": {},
16-
"fingerprint": "COMPROMISED123567890FEDCBA0987654321COMPROMISED123",
17-
"uid_hash": "ABC123DEF456",
18-
"uid": "Compromised Key <compromised@example.com>"
19-
}
20-
}
21-
}
22-
}
23-
},
24-
"files.File": {
25-
"path=/etc/apt/trusted.gpg.d/compromised.gpg": {"mode": 644}
26-
}
27-
},
6+
"facts": {},
287
"commands": [
29-
"rm -f /etc/apt/trusted.gpg.d/compromised.gpg"
8+
"for keyring in /etc/apt/trusted.gpg.d/*.gpg; do [ -e \"$keyring\" ] && gpg --batch --no-default-keyring --keyring \"$keyring\" --delete-keys 0xCOMPROMISED123 2>/dev/null || true; done",
9+
"for keyring in /etc/apt/trusted.gpg.d/*.gpg; do [ -e \"$keyring\" ] && ! gpg --batch --no-default-keyring --keyring \"$keyring\" --list-keys 2>/dev/null | grep -q \"pub\" && rm -f \"$keyring\" || true; done",
10+
"for keyring in /etc/apt/keyrings/*.gpg; do [ -e \"$keyring\" ] && gpg --batch --no-default-keyring --keyring \"$keyring\" --delete-keys 0xCOMPROMISED123 2>/dev/null || true; done",
11+
"for keyring in /etc/apt/keyrings/*.gpg; do [ -e \"$keyring\" ] && ! gpg --batch --no-default-keyring --keyring \"$keyring\" --list-keys 2>/dev/null | grep -q \"pub\" && rm -f \"$keyring\" || true; done",
12+
"for keyring in /usr/share/keyrings/*.gpg; do [ -e \"$keyring\" ] && gpg --batch --no-default-keyring --keyring \"$keyring\" --delete-keys 0xCOMPROMISED123 2>/dev/null || true; done",
13+
"for keyring in /usr/share/keyrings/*.gpg; do [ -e \"$keyring\" ] && ! gpg --batch --no-default-keyring --keyring \"$keyring\" --list-keys 2>/dev/null | grep -q \"pub\" && rm -f \"$keyring\" || true; done"
3014
]
3115
}

0 commit comments

Comments
 (0)