Skip to content

Commit 9fdec59

Browse files
committed
Add signing setup to aap_compose_dev.yaml
Signing: - add GPG config - Run all containers as `root` (the only way to be able to have skopeo signing) - add signing scripts - add signing keys - add signing-service - add repo publickey to staging and published Extra: - Schedule REsource Sync Task
1 parent b2ddd87 commit 9fdec59

File tree

2 files changed

+164
-45
lines changed

2 files changed

+164
-45
lines changed

aap_compose_dev.yaml

Lines changed: 123 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
x-common-env: &common-env
22

3+
GNUPGHOME: /root/.gnupg/
4+
KEYRING: /root/.gnupg/pubring.kbx
5+
36
DJANGO_SUPERUSER_USERNAME: admin
47
DJANGO_SUPERUSER_EMAIL: admin@example.com
58
DJANGO_SUPERUSER_PASSWORD: admin
@@ -78,7 +81,7 @@ services:
7881
test: ["CMD", "pg_isready", "-U", "galaxy_ng"]
7982
interval: 10s
8083
retries: 5
81-
84+
8285
helper:
8386
image: quay.io/centos/centos:stream9
8487
environment:
@@ -88,24 +91,45 @@ services:
8891
volumes:
8992
- "etc_pulp_certs:/etc/pulp/certs"
9093
- "var_lib_pulp:/var/lib/pulp"
94+
- ".:/src/galaxy_ng"
9195
command: |
9296
bash -c "
93-
if [[ ! -e /etc/pulp/certs/database_fields.symmetric.key ]] || [[ -s /etc/pulp/certs/database_fields.symmetric.key ]]; then
94-
mkdir -p /etc/pulp/certs/;
95-
echo 'check openssl and install ...';
96-
rpm -q openssl || dnf -y install openssl;
97-
echo 'generate key ...';
98-
openssl rand -base64 32 > /etc/pulp/certs/database_fields.symmetric.key;
99-
echo 'chown key ...';
100-
chmod 640 /etc/pulp/certs/database_fields.symmetric.key;
101-
else
102-
echo 'symmetric key exists'
103-
fi;
97+
echo '#> STEP: Database Symmetric Key';
98+
echo 'WARNING: Symmetric key is hardcoded for development only.';
99+
echo 'DNmNdwgyZugTax9S64J0FITTr9IHPxbuoF1F1CGPr68=' > /etc/pulp/certs/database_fields.symmetric.key;
104100
find /etc/pulp ;
105101
echo '# KEY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>';
106102
cat /etc/pulp/certs/database_fields.symmetric.key;
107103
echo '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<';
108-
echo "DONE!";
104+
echo 'DONE! <#';
105+
106+
echo '#> STEP: Signing scripts';
107+
base64 -d <<< 'IyEvdXNyL2Jpbi9lbnYgYmFzaApHTlVQR0hPTUU9L3Jvb3QvLmdudXBnLwpGSUxFX1BBVEg9JDEKU0lHTkFUVVJFX1BBVEg9IiQxLmFzYyIKQURNSU5fSUQ9IiRQVUxQX1NJR05JTkdfS0VZX0ZJTkdFUlBSSU5UIgpQQVNTV09SRD0iR2FsYXh5MjAyNCIKZ3BnIC0tbG9jay1uZXZlciAtLXF1aWV0IC0tYmF0Y2ggLS1waW5lbnRyeS1tb2RlIGxvb3BiYWNrIC0teWVzIFwKICAtLXBhc3NwaHJhc2UgJFBBU1NXT1JEIC0taG9tZWRpciAvcm9vdC8uZ251cGcvIC0tZGV0YWNoLXNpZ24gLS1hcm1vciBcCiAgLS1vdXRwdXQgJFNJR05BVFVSRV9QQVRIICRGSUxFX1BBVEgKU1RBVFVTPSQ/CmlmIFsgJFNUQVRVUyAtZXEgMCBdOyB0aGVuCiAgIGVjaG8ge1wiZmlsZVwiOiBcIiRGSUxFX1BBVEhcIiwgXCJzaWduYXR1cmVcIjogXCIkU0lHTkFUVVJFX1BBVEhcIn0KZWxzZQogICBleGl0ICRTVEFUVVMKZmk=' > /var/lib/pulp/scripts/collection_sign.sh;
108+
base64 -d <<< 'IyEvdXNyL2Jpbi9lbnYgYmFzaAplY2hvICJHYWxheHkyMDI0IiA+IC90bXAva2V5X3Bhc3N3b3JkLnR4dApNQU5JRkVTVF9QQVRIPSQxCklNQUdFX1JFRkVSRU5DRT0iJFJFRkVSRU5DRSIKRklOR0VSUFJJTlQ9IiRQVUxQX1NJR05JTkdfS0VZX0ZJTkdFUlBSSU5UIgpTSUdOQVRVUkVfUEFUSD0iJFNJR19QQVRIIgojIElNUE9SVEFOVDogU2tvcGVvIGRvZXNudCBhbGxvdyB0byBzZXQgY3VzdG9tIGdudXBnaG9tZSBvciBrZXlyaW5nCiMgU28gaXQgd2lsbCB1c2UgdGhlIGN1cnJlbnQgdXNlciBIT01FLy5nbnVwZyBhbmQgZGVmYXVsdCBrZXlyaW5nCnNrb3BlbyBzdGFuZGFsb25lLXNpZ24gLS1wYXNzcGhyYXNlLWZpbGUgL3RtcC9rZXlfcGFzc3dvcmQudHh0IFwKICAkTUFOSUZFU1RfUEFUSCAkSU1BR0VfUkVGRVJFTkNFICRGSU5HRVJQUklOVCAtLW91dHB1dCAkU0lHTkFUVVJFX1BBVEgKU1RBVFVTPSQ/CmlmIFsgJFNUQVRVUyAtZXEgMCBdOyB0aGVuCiAgZWNobyB7XCJzaWduYXR1cmVfcGF0aFwiOiBcIiRTSUdOQVRVUkVfUEFUSFwifQplbHNlCiAgZXhpdCAkU1RBVFVTCmZp' > /var/lib/pulp/scripts/container_sign.sh;
109+
chmod +x /var/lib/pulp/scripts/*_sign.sh;
110+
ls -la /var/lib/pulp/scripts/collection_sign.sh;
111+
cat /var/lib/pulp/scripts/collection_sign.sh;
112+
echo ' ';
113+
ls -la /var/lib/pulp/scripts/container_sign.sh;
114+
cat /var/lib/pulp/scripts/container_sign.sh;
115+
echo ' ';
116+
echo 'DONE! <#';
117+
118+
echo '#> STEP: Signing keys';
119+
echo 'WARNING: This key is for development only, passphrase:Galaxy2024';
120+
base64 -d <<< 'LS0tLS1CRUdJTiBQR1AgUFJJVkFURSBLRVkgQkxPQ0stLS0tLQoKbFFQR0JHY0JrRE1CQ0FEY1h6TEZwSUhqbFBTTnROc1FCdnRuUkNjcUJVS1VrN1h6OGVaSUhWSU90NmxGM1RQTgpaTWZ5eVBoYWloTGxLekpRZGh6RG9jMy9oZFRLUnhmQmx0cmZmOW5ZeDVkSFdlZ29tVkwxaS9TMEhBQjdNT3FuClNqMWRFcmtRRVBoWWJubzFWSTVtbDcxTE1ldS9hbkRtRWtFaHR2a1ZjcVduWHM2RGlpdWRVMFRtYzRXLytsVkgKQ2x1aytJU2tnMS8zcHhMQVFqU2lQcFdnL1lCL2NORGN1dUh4dWVDMEtxSUhnR0lyeDBpREk4VHE3S2xOYmNPVgpDeWowWHBjdjY1M2REbEpaQUE5Ty9samZsZU5hMDhOeHNwUkJFb01YaElLdU9ML293Vlk2NVpEQ0JCZ2c1R0dICnVLR25GQklUbUtkOWRXVVZSZXpqN3NLdTVwNEVyQVRnUmk3bEFCRUJBQUgrQndNQ0hQSG9wTFhOeS9INXg5c3YKdytDYTNsQXFLanFGWDBNVEpFbGo1ZE9uZFJnZFVoM29VQW9ZZlNCNi9GM09IR0lsM3psS2hoNVFyUDhVVUZqYgpQRlpqSllWb0VVK3ltQk51Y1hNTEJBeW1SQWI4RnhzREQ5NEc3NVRZWnhnK1BYalFDblViQnhlZUZvWWw1dkEyCjM1S01acEdBSXpoaE5BalpseUZvWDdHaU1xZFd4YUt1VWtSK05BaTdjRVdqaHJnVEU4Z1R0UGZEbDhhV04waWYKMmIySmw4WVhYbEczMlArWU40cW4wUDkxWi9uUkFIUG5ybTB3R2JEdGNGQ1BHTEdsMndYdG9ZMmViLzJnd3J1VQpyMHVoM0xFWHEvMjdHNkVmZ1g1QURpa21YSTRXNlZkeUNra0lSamJBdjdqZm91M2pFc2VpeTFqSTJvR0N2V1ZuCmsweTc5ZzA0b1RTakRHYWRXMGd2WmJHQTg3SG5kblM3cDdTMG9WbVBWdWh6S290ODk0VkgzVENDcjFWM25PK1oKeTdGZmpkQ0RrTjliWjRpam9JMGFYZE9HWkQxbGJSSGxxMlVDYUNlOVpLeTI3eEZwcW5rcWxmdWs1OXdqbWNWSgp4dit3MTFrUGgxUVc1MXhZNXF1ditDWEtGZDNERjFMOWF1UnZSQkpQK1VaYTZRcS8ydzVZWlZQS0xqOVZGNW9TCjRpUU9OM2wvNGNhc29qVC9zM0Y3TjErSGZzU1pINnkzK1dGcjl1cDgwNkdVdGU4ZVFVaXFIeEFuS2ZLZG9VQzkKNml6RmVHV2k2QUw1N3ZFaUxwOTM5UldoNUFFUm5MSEhBcDRLcFI0ZkRid29CUkViZ3F0QmUyRkhDSkNuaHFWbAovRS8xWWRsZTFiWFYvc3dwUEk1bHNLcWpmMkVoS0syaEZVVG1CbERrUWpmTjR0VlUxQnZDNnM3SEdEL0YwT1F1CmxvWmdoVWlzTjY2dDljQTByWkhZenZkMHlJa25nbERYZmpnemorcmRYYU1vYXFPS1Y4SWdFYS9Td2ROakx3NUEKbS9kRlhDZnozQXVlempIcmRBdzh5MStGL3dSbGV6eVNGUm1kNlJFU3RNZ0h0V0plUmdKaXY0Mlpna3RCSnppTAphNjcxd3A2YzhiVjBBdGFhNDNXSUJ1N0taYnE2TnVpSm5rWkhOSTdCSUxwRU5BOTh5VjZXTmV0Q2I3U3NaNk9RCmxQZHpXMHdwOUJJTHRDWkhZV3hoZUhrZ1JHVjJJRXRsZVNBOFoyRnNZWGg1WkdWMlFHRnVjMmxpYkdVdVkyOXQKUG9rQlVRUVRBUWdBT3hZaEJQdUxQeTBrdks5Ky9mZVRxZk4xZGNVdFR4YnpCUUpuQVpBekFoc0RCUXNKQ0FjQwpBaUlDQmhVS0NRZ0xBZ1FXQWdNQkFoNEhBaGVBQUFvSkVQTjFkY1V0VHhienc1Z0lBTUNTZjB6dzYxdlhKUm16Cm14dW5kMFU4ek5QRWRSNzhkY1VZYVhsaGdkN2oyb1BzMGk1cG9FaDFMSkZsZ29VYTlabkhTSHgrdEI0SFlVZFQKeUpQYkl5ckUxcUs4MHRENkpZcmV3M2U2VXZudGJCWFJuakJSbDlKWXcyQmVlZk1tbCtUUWxRYkxTR3FzVTdoMwpQa2hqbUUvUCs4T1QrLzh1eTR2VGdUdUw2VDhlb0t2MFZTZGNlaHB3eEM2WVJuc3N3SlQ4M3IwY0ZhKzRkdTVICnlJblNQTHc5aTJMTjZsZTdISnpuRnZvUlhDZWJyUzNudU9JbXRRUXdtQTBZRG9NK0pES00vNnhrT0swZGVXazMKSllvWE5QcWJtU2E3N0ZFREQwdGZxdlY2Q1R5YlByUGhxNUdOdUdDQS93VFZGOHRJL3dVZWIwRUx3a2dtbG5RUQp4c2hiMWV3PQo9aHcxUQotLS0tLUVORCBQR1AgUFJJVkFURSBLRVkgQkxPQ0stLS0tLQ==' > /etc/pulp/certs/ansible-sign.key;
121+
head -n 4 /etc/pulp/certs/ansible-sign.key;
122+
echo '...';
123+
tail -n 4 /etc/pulp/certs/ansible-sign.key;
124+
echo ' ';
125+
base64 -d <<< 'LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUVOQkdjQmtETUJDQURjWHpMRnBJSGpsUFNOdE5zUUJ2dG5SQ2NxQlVLVWs3WHo4ZVpJSFZJT3Q2bEYzVFBOClpNZnl5UGhhaWhMbEt6SlFkaHpEb2MzL2hkVEtSeGZCbHRyZmY5bll4NWRIV2Vnb21WTDFpL1MwSEFCN01PcW4KU2oxZEVya1FFUGhZYm5vMVZJNW1sNzFMTWV1L2FuRG1Fa0VodHZrVmNxV25YczZEaWl1ZFUwVG1jNFcvK2xWSApDbHVrK0lTa2cxLzNweExBUWpTaVBwV2cvWUIvY05EY3V1SHh1ZUMwS3FJSGdHSXJ4MGlESThUcTdLbE5iY09WCkN5ajBYcGN2NjUzZERsSlpBQTlPL2xqZmxlTmEwOE54c3BSQkVvTVhoSUt1T0wvb3dWWTY1WkRDQkJnZzVHR0gKdUtHbkZCSVRtS2Q5ZFdVVlJlemo3c0t1NXA0RXJBVGdSaTdsQUJFQkFBRzBKa2RoYkdGNGVTQkVaWFlnUzJWNQpJRHhuWVd4aGVIbGtaWFpBWVc1emFXSnNaUzVqYjIwK2lRRlJCQk1CQ0FBN0ZpRUUrNHMvTFNTOHIzNzk5NU9wCjgzVjF4UzFQRnZNRkFtY0JrRE1DR3dNRkN3a0lCd0lDSWdJR0ZRb0pDQXNDQkJZQ0F3RUNIZ2NDRjRBQUNna1EKODNWMXhTMVBGdlBEbUFnQXdKSi9UUERyVzljbEdiT2JHNmQzUlR6TTA4UjFIdngxeFJocGVXR0IzdVBhZyt6UwpMbW1nU0hVc2tXV0NoUnIxbWNkSWZINjBIZ2RoUjFQSWs5c2pLc1RXb3J6UzBQb2xpdDdEZDdwUytlMXNGZEdlCk1GR1gwbGpEWUY1NTh5YVg1TkNWQnN0SWFxeFR1SGMrU0dPWVQ4Lzd3NVA3L3k3TGk5T0JPNHZwUHg2Z3EvUlYKSjF4NkduREVMcGhHZXl6QWxQemV2UndWcjdoMjdrZklpZEk4dkQyTFlzM3FWN3Njbk9jVytoRmNKNXV0TGVlNAo0aWExQkRDWURSZ09nejRrTW96L3JHUTRyUjE1YVRjbGloYzArcHVaSnJ2c1VRTVBTMStxOVhvSlBKcytzK0dyCmtZMjRZSUQvQk5VWHkwai9CUjV2UVF2Q1NDYVdkQkRHeUZ2VjdBPT0KPTBoWksKLS0tLS1FTkQgUEdQIFBVQkxJQyBLRVkgQkxPQ0stLS0tLQo=' > /etc/pulp/certs/ansible-sign-pub.gpg;
126+
head -n 4 /etc/pulp/certs/ansible-sign-pub.gpg;
127+
echo '...';
128+
tail -n 4 /etc/pulp/certs/ansible-sign-pub.gpg;
129+
find /etc/pulp/certs ;
130+
echo ' ';
131+
echo 'DONE! <#';
132+
109133
"
110134
111135
migrations:
@@ -124,6 +148,7 @@ services:
124148
command: |
125149
bash -c "
126150
set -e;
151+
rm -rf /var/lib/pulp/.migrated;
127152
while [[ ! -f /etc/pulp/certs/database_fields.symmetric.key ]]; do
128153
echo 'Waiting for key';
129154
sleep 2;
@@ -153,6 +178,7 @@ services:
153178
networks:
154179
- default
155180
- service-mesh
181+
user: root
156182
command: |
157183
bash -c "
158184
while [[ ! -f /var/lib/pulp/.migrated ]]; do
@@ -179,6 +205,7 @@ services:
179205
networks:
180206
- default
181207
- service-mesh
208+
user: root
182209
command: |
183210
bash -c "
184211
while [[ ! -f /var/lib/pulp/.migrated ]]; do
@@ -200,12 +227,91 @@ services:
200227
- ".:/src/galaxy_ng"
201228
environment:
202229
<<: *common-env
230+
user: root
203231
command: |
204232
bash -c "
205233
while [[ ! -f /var/lib/pulp/.migrated ]]; do
206234
echo 'Waiting for migrations ...';
207235
sleep 2;
208-
done && exec pulpcore-worker;
236+
done;
237+
while [[ ! -f /etc/pulp/certs/ansible-sign.key ]]; do
238+
echo 'Waiting for signing key';
239+
sleep 2;
240+
done;
241+
242+
echo '#> STEP: Import GPG Keys for content signing tasks';
243+
gpgconf --kill gpg-agent && gpg --batch --no-default-keyring --import /etc/pulp/certs/ansible-sign.key;
244+
(echo 5; echo y; echo save) | gpg --command-fd 0 --no-tty --no-greeting -q --edit-key 'FB8B3F2D24BCAF7EFDF793A9F37575C52D4F16F3' trust;
245+
gpg --list-secret-keys;
246+
echo 'DONE! <#';
247+
248+
exec pulpcore-worker;
249+
"
250+
251+
manager:
252+
image: "localhost/galaxy_ng/galaxy_ng:base"
253+
depends_on:
254+
- base_img
255+
- postgres
256+
- helper
257+
- migrations
258+
- worker
259+
volumes:
260+
- "etc_pulp_certs:/etc/pulp/certs"
261+
- "var_lib_pulp:/var/lib/pulp"
262+
- ".:/src/galaxy_ng"
263+
environment:
264+
<<: *common-env
265+
user: root
266+
command: |
267+
bash -c "
268+
while [[ ! -f /var/lib/pulp/.migrated ]]; do
269+
echo 'Waiting for migrations ...';
270+
sleep 2;
271+
done;
272+
while [[ ! -f /etc/pulp/certs/ansible-sign.key ]]; do
273+
echo 'Waiting for signing key';
274+
sleep 2;
275+
done;
276+
277+
echo '#> STEP: Scheduling Resource Sync Task.';
278+
pulpcore-manager task-scheduler --id dab_sync --interval 15 --path "galaxy_ng.app.tasks.resource_sync.run";
279+
curl -s -u admin:admin http://api:24817/api/galaxy/pulp/api/v3/task-schedules/?name=dab_sync | python -m json.tool;
280+
echo 'DONE! <#';
281+
282+
echo '#> STEP: Import GPG Keys for signing service creation.';
283+
gpgconf --kill gpg-agent && gpg --batch --no-default-keyring --import /etc/pulp/certs/ansible-sign.key;
284+
(echo 5; echo y; echo save) | gpg --command-fd 0 --no-tty --no-greeting -q --edit-key 'FB8B3F2D24BCAF7EFDF793A9F37575C52D4F16F3' trust;
285+
gpg --list-secret-keys;
286+
echo 'DONE! <#';
287+
echo '#> STEP: Creating signing services';
288+
pulpcore-manager add-signing-service ansible-default /var/lib/pulp/scripts/collection_sign.sh F37575C52D4F16F3;
289+
pulpcore-manager add-signing-service container-default /var/lib/pulp/scripts/container_sign.sh F37575C52D4F16F3 --class container:ManifestSigningService;
290+
# add-signing-service is not idempotent, so the note below.
291+
echo 'NOTE!!! CommandError: duplicate key value, above is NOT A PROBLEM if 2 signing services are returned from API below:';
292+
curl -s -u admin:admin http://api:24817/api/galaxy/pulp/api/v3/signing-services/?fields=name,script,pubkey_fingerprint | python -m json.tool;
293+
echo 'DONE! <#';
294+
echo '#> STEP: Setting repository public key for signature upload verification'
295+
pulpcore-manager set-repo-keyring --repository staging --publickeypath /etc/pulp/certs/ansible-sign-pub.gpg -y;
296+
pulpcore-manager set-repo-keyring --repository published --publickeypath /etc/pulp/certs/ansible-sign-pub.gpg -y;
297+
echo 'DONE! <#';
298+
299+
echo '#> STEP: Installing dev tools';
300+
/venv/bin/pip3.11 install ipython ipdb django-extensions;
301+
echo 'DONE! <#';
302+
echo ' ';
303+
304+
echo '###################### API ROOT ##############################';
305+
curl -s http://api:24817/api/galaxy/ | python -m json.tool;
306+
307+
echo '######################## READY ###############################';
308+
echo ' ';
309+
echo 'API: http://localhost:5001/api/galaxy/v3/swagger-ui/';
310+
echo 'Django Admin CLI: docker compose -f aap_compose_dev.yaml exec manager pulpcore-manager';
311+
echo 'Settings list: docker compose -f aap_compose_dev.yaml exec manager dynaconf list';
312+
313+
# Keep it running indefinitely to enable `docker compose -f ... exec manager /bin/bash`
314+
tail -f /dev/null
209315
"
210316
211317
nginx:
@@ -224,10 +330,10 @@ services:
224330

225331
volumes:
226332
var_lib_pulp:
227-
name: var_lib_pulp
333+
name: var_lib_pulp
228334
etc_pulp_certs:
229-
name: etc_pulp_certs
335+
name: etc_pulp_certs
230336

231337
networks:
232338
service-mesh:
233-
name: service-mesh
339+
name: service-mesh

galaxy_ng/app/management/commands/set-repo-keyring.py

Lines changed: 41 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ def echo(self, message, style=None):
3131
self.stdout.write(style(message))
3232

3333
def add_arguments(self, parser):
34-
parser.add_argument("--keyring", type=str, help="Keyring", required=True)
34+
parser.add_argument("--keyring", type=str, help="Keyring", required=False, default="")
35+
parser.add_argument("--publickeypath", type=str, help="Path to Public Key File",
36+
required=False, default="")
3537
parser.add_argument("--repository", type=str, help="Repository name", required=True)
3638
parser.add_argument(
3739
"-y",
@@ -46,40 +48,51 @@ def handle(self, *args, **options):
4648

4749
repository = options["repository"].strip()
4850
keyring = options["keyring"].strip()
51+
publickey = options["publickeypath"].strip()
52+
53+
if not keyring and not publickey:
54+
self.echo("One of keyring or publickey is required")
55+
exit(1)
56+
if keyring and publickey:
57+
self.echo("keyring or publickey are mutually exclusive")
58+
exit(1)
4959

5060
try:
5161
repo = AnsibleRepository.objects.get(name=repository)
5262
except AnsibleRepository.DoesNotExist:
5363
self.echo(f"Repository {repository} does not exist", self.style.ERROR)
5464
sys.exit(1)
5565

56-
certs_dir = settings.get("ANSIBLE_CERTS_DIR", "/etc/pulp/certs")
57-
keyring_path = os.path.join(certs_dir, keyring)
58-
if not os.path.exists(keyring_path):
59-
self.echo(f"Keyring {keyring_path} does not exist", self.style.ERROR)
60-
sys.exit(1)
61-
62-
if not options["yes"]:
63-
confirm = input(
64-
f"This will set keyring to {keyring_path} for "
65-
"{repository} repository, " "Proceed? (Y/n)"
66-
).lower()
67-
while True:
68-
if confirm not in ("y", "n", "yes", "no"):
69-
confirm = input('Please enter either "y/yes" or "n/no": ')
70-
continue
71-
if confirm in ("y", "yes"):
72-
break
73-
else:
74-
self.echo("Process canceled.")
75-
return
76-
77-
tempdir_path = tempfile.mkdtemp()
78-
proc = subprocess.run([
79-
"gpg", "--homedir", tempdir_path, "--keyring", keyring_path, "--export", "-a"
80-
], capture_output=True)
81-
82-
pubkey = proc.stdout.decode().strip()
66+
if publickey:
67+
with open(publickey) as pubkeyfile:
68+
pubkey = pubkeyfile.read()
69+
elif keyring:
70+
certs_dir = settings.get("ANSIBLE_CERTS_DIR", "/etc/pulp/certs")
71+
keyring_path = os.path.join(certs_dir, keyring)
72+
if not os.path.exists(keyring_path):
73+
self.echo(f"Keyring {keyring_path} does not exist", self.style.ERROR)
74+
sys.exit(1)
75+
76+
if not options["yes"]:
77+
confirm = input(
78+
f"This will set keyring to {keyring_path} for "
79+
f"{repository} repository, " "Proceed? (Y/n)"
80+
).lower()
81+
while True:
82+
if confirm not in ("y", "n", "yes", "no"):
83+
confirm = input('Please enter either "y/yes" or "n/no": ')
84+
continue
85+
if confirm in ("y", "yes"):
86+
break
87+
else:
88+
self.echo("Process canceled.")
89+
return
90+
91+
tempdir_path = tempfile.mkdtemp()
92+
proc = subprocess.run([
93+
"gpg", "--homedir", tempdir_path, "--keyring", keyring_path, "--export", "-a"
94+
], capture_output=True)
95+
pubkey = proc.stdout.decode().strip()
8396

8497
task = dispatch(
8598
set_repo_gpgkey,

0 commit comments

Comments
 (0)