From 6b1eaa705b0352d85d1d3d57ddde5f5de05a84c9 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Tue, 22 Sep 2026 13:36:05 +0000 Subject: [PATCH] runtime: publish SUPPORT-260922-SPB-HOME-INGRESS-ACME-HOOK-PRECHECK-9120R1 --- ...OME-INGRESS-ACME-HOOK-PRECHECK-9120R1.json | 38 +++++++++++++++++++ ...HOME-INGRESS-ACME-HOOK-PRECHECK-9120R1.txt | 36 ++++++++++++++++++ runtime/latest.json | 16 ++++---- runtime/latest.txt | 16 ++++---- 4 files changed, 90 insertions(+), 16 deletions(-) create mode 100644 runtime/history/SUPPORT-260922-SPB-HOME-INGRESS-ACME-HOOK-PRECHECK-9120R1.json create mode 100644 runtime/history/SUPPORT-260922-SPB-HOME-INGRESS-ACME-HOOK-PRECHECK-9120R1.txt diff --git a/runtime/history/SUPPORT-260922-SPB-HOME-INGRESS-ACME-HOOK-PRECHECK-9120R1.json b/runtime/history/SUPPORT-260922-SPB-HOME-INGRESS-ACME-HOOK-PRECHECK-9120R1.json new file mode 100644 index 00000000..53deef95 --- /dev/null +++ b/runtime/history/SUPPORT-260922-SPB-HOME-INGRESS-ACME-HOOK-PRECHECK-9120R1.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-260922-SPB-HOME-INGRESS-ACME-HOOK-PRECHECK-9120R1", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "spb-home-ingress-acme-hook-precheck", + "started_at_utc": "2026-09-22T13:36:00Z", + "finished_at_utc": "2026-09-22T13:36:04Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "b1a01d27969a1f75b7fe7163b96f1cdf80777ac2464b02682bec2697891b8f99", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "change_declared": false, + "result_contract_valid": true, + "result_contract_status": null, + "result_contract_error": null, + "command_rc": 0, + "changes_made": false, + "rollback_started": false, + "rollback_restored": null, + "mutation_outcome": "NO_MUTATION", + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "3cf1f3e3846e8996d51ae516413ea21e677e9893d8b4299f3f47cd409f5e0973", + "sanitized_output_sha256": "3cf1f3e3846e8996d51ae516413ea21e677e9893d8b4299f3f47cd409f5e0973", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "SPB9120_PRECHECK={\"guest\":{\"ok\":true,\"data\":{\"hostname\":\"edge-vm\",\"hooks\":{\"pvepro-cf-certbot-hook.py\":[{\"path\":\"/opt/npmplus/scripts/pvepro-cf-certbot-hook.py\",\"sha256\":\"9b92d1893119af794096665dedeaae873b2da64905173c0a62916ae1f6aed268\",\"mode\":\"0o700\",\"uid\":0,\"gid\":0,\"executable\":true,\"certbot_env\":[],\"env_names\":[],\"mentions_gram1\":false,\"mentions_hbarhub\":false,\"mentions_newfilya\":false,\"selected_lines\":[\"req = urllib.request.Request(\\\"https://api.cloudflare.com/client/v4\\\"+path, data=data, headers={\\\"Authorization\\\":\\\"Bearer \\\"+token(), \\\"Content-Type\\\":\\\"application/json\\\"}, method=method)\",\"return STATE_DIR / (domain + \\\"-\\\" + hashlib.sha256((domain+\\\"|\\\"+validation).encode()).hexdigest()[:20] + \\\".json\\\")\",\"domain=os.environ.get(\\\"CERTBOT_DOMAIN\\\",\\\"\\\"); validation=os.environ.get(\\\"CERTBOT_VALIDATION\\\",\\\"\\\")\",\"name=\\\"_acme-challenge.\\\"+domain\",\"status, data = api(\\\"POST\\\", f\\\"/zones/{zid}/dns_records\\\", {\\\"type\\\":\\\"TXT\\\",\\\"name\\\":name,\\\"content\\\":validation,\\\"ttl\\\":120})\",\"time.sleep(45); return 0\",\"domain=os.environ.get(\\\"CERTBOT_DOMAIN\\\",\\\"\\\"); validation=os.environ.get(\\\"CERTBOT_VALIDATION\\\",\\\"\\\")\",\"status, resp=api(\\\"DELETE\\\", f\\\"/zones/{data['zone_id']}/dns_records/{data['record_id']}\\\")\"]}],\"pvepro-cf-cleanup-hook.sh\":[{\"path\":\"/opt/npmplus/scripts/pvepro-cf-cleanup-hook.sh\",\"sha256\":\"eff4da2a85d22f0887c3aa7380af6173ee65b634ff44ac5150673726c029149e\",\"mode\":\"0o700\",\"uid\":0,\"gid\":0,\"executable\":true,\"certbot_env\":[],\"env_names\":[],\"mentions_gram1\":false,\"mentions_hbarhub\":false,\"mentions_newfilya\":false,\"selected_lines\":[\"exec /usr/bin/python3 /opt/npmplus/scripts/pvepro-cf-certbot-hook.py cleanup\"]}],\"gram1-cf-auth-hook.sh\":[{\"path\":\"/opt/npmplus/scripts/gram1-cf-auth-hook.sh\",\"sha256\":\"c03c5b2b18444e38af05599cbd51c518a3646497feb3a59bf5b69996af06b0dc\",\"mode\":\"0o700\",\"uid\":0,\"gid\":0,\"executable\":true,\"certbot_env\":[],\"env_names\":[],\"mentions_gram1\":false,\"mentions_hbarhub\":false,\"mentions_newfilya\":false,\"selected_lines\":[\"exec /usr/bin/python3 /opt/npmplus/scripts/gram1-cf-certbot-hook.py auth\"]}],\"parked-cf-auth-hook.sh\":[{\"path\":\"/opt/npmplus/scripts/parked-cf-auth-hook.sh\",\"sha256\":\"c9c43720c1a0adaf27b3c20b050dbd8b860d030deb47d7f5789497e3000824c8\",\"mode\":\"0o700\",\"uid\":0,\"gid\":0,\"executable\":true,\"certbot_env\":[],\"env_names\":[],\"mentions_gram1\":false,\"mentions_hbarhub\":false,\"mentions_newfilya\":false,\"selected_lines\":[\"exec /usr/bin/python3 /opt/npmplus/scripts/parked-cf-certbot-hook.py auth\"]}],\"gram1-cf-certbot-hook.py\":[{\"path\":\"/opt/npmplus/scripts/gram1-cf-certbot-hook.py\",\"sha256\":\"dcaffc5a248359fa3ed93b7bf8af33ad69985776c4a8e3e7f2016c6168da5aee\",\"mode\":\"0o700\",\"uid\":0,\"gid\":0,\"executable\":true,\"certbot_env\":[],\"env_names\":[],\"mentions_gram1\":true,\"mentions_hbarhub\":false,\"mentions_newfilya\":false,\"selected_lines\":[\"req = urllib.request.Request(\\\"https://api.cloudflare.com/client/v4\\\" + path, data=data, headers={\\\"Authorization\\\": \\\"Bearer \\\" + token(), \\\"Content-Type\\\": \\\"application/json\\\"}, method=method)\",\"h = hashlib.sha256((domain + \\\"|\\\" + validation).encode()).hexdigest()[:20]\",\"domain = os.environ.get(\\\"CERTBOT_DOMAIN\\\", \\\"\\\"); validation = os.environ.get(\\\"CERTBOT_VALIDATION\\\", \\\"\\\")\",\"name = \\\"_acme-challenge.\\\" + domain\",\"status, data = api(\\\"POST\\\", f\\\"/zones/{zid}/dns_records\\\", {\\\"type\\\": \\\"TXT\\\", \\\"name\\\": name, \\\"content\\\": validation, \\\"ttl\\\": 120})\",\"out(f\\\"GRAM1_CF_AUTH domain={domain} status=ok record_id_prefix={rec[:8]}\\\"); time.sleep(45); return 0\",\"domain = os.environ.get(\\\"CERTBOT_DOMAIN\\\", \\\"\\\"); validation = os.environ.get(\\\"CERTBOT_VALIDATION\\\", \\\"\\\")\",\"status, resp = api(\\\"DELETE\\\", f\\\"/zones/{data['zone_id']}/dns_records/{data['record_id']}\\\")\"]}],\"gram1-cf-cleanup-hook.sh\":[{\"path\":\"/opt/npmplus/scripts/gram1-cf-cleanup-hook.sh\",\"sha256\":\"f86757b214f6603448a295238b6591eac79faa8702ffb1d0d36697f4f0c5ef17\",\"mode\":\"0o700\",\"uid\":0,\"gid\":0,\"executable\":true,\"certbot_env\":[],\"env_names\":[],\"mentions_gram1\":false,\"mentions_hbarhub\":false,\"mentions_newfilya\":false,\"selected_lines\":[\"exec /usr/bin/python3 /opt/npmplus/scripts/gram1-cf-certbot-hook.py cleanup\"]}],\"parked-cf-cleanup-hook.sh\":[{\"path\":\"/opt/npmplus/scripts/parked-cf-cleanup-hook.sh\",\"sha256\":\"2d82709fb60b8dcad9dfd38091516fae6ebc3825ec85a8da05643a5cf2cf4380\",\"mode\":\"0o700\",\"uid\":0,\"gid\":0,\"executable\":true,\"certbot_env\":[],\"env_names\":[],\"mentions_gram1\":false,\"mentions_hbarhub\":false,\"mentions_newfilya\":false,\"selected_lines\":[\"exec /usr/bin/python3 /opt/npmplus/scripts/parked-cf-certbot-hook.py cleanup\"]}],\"pvepro-cf-auth-hook.sh\":[{\"path\":\"/opt/npmplus/scripts/pvepro-cf-auth-hook.sh\",\"sha256\":\"6489531798eda50063aefa41ab44c3c692305c0c29cc5aa4c0dc35fdd469d8cb\",\"mode\":\"0o700\",\"uid\":0,\"gid\":0,\"executable\":true,\"certbot_env\":[],\"env_names\":[],\"mentions_gram1\":false,\"mentions_hbarhub\":false,\"mentions_newfilya\":false,\"selected_lines\":[\"exec /usr/bin/python3 /opt/npmplus/scripts/pvepro-cf-certbot-hook.py auth\"]}],\"parked-cf-certbot-hook.py\":[{\"path\":\"/opt/npmplus/scripts/parked-cf-certbot-hook.py\",\"sha256\":\"0783fe635ba9ceace923b78e12038ccfc0feaf237ea0abd67cad55169ab90428\",\"mode\":\"0o700\",\"uid\":0,\"gid\":0,\"executable\":true,\"certbot_env\":[],\"env_names\":[],\"mentions_gram1\":false,\"mentions_hbarhub\":false,\"mentions_newfilya\":false,\"selected_lines\":[\"req = urllib.request.Request(\\\"https://api.cloudflare.com/client/v4\\\" + path, data=data, headers=headers, method=method)\",\"h = hashlib.sha256((domain + \\\"|\\\" + validation).encode()).hexdigest()[:20]\",\"return api(\\\"GET\\\", f\\\"/zones/{zid}/dns_records?{q}\\\")\",\"domain = os.environ.get(\\\"CERTBOT_DOMAIN\\\", \\\"\\\")\",\"validation = os.environ.get(\\\"CERTBOT_VALIDATION\\\", \\\"\\\")\",\"out(\\\"CF_AUTH status=review reason=missing_certbot_env\\\")\",\"name = \\\"_acme-challenge.\\\" + domain\",\"status, data = api(\\\"POST\\\", f\\\"/zones/{zid}/dns_records\\\", payload)\",\"time.sleep(45)\",\"domain = os.environ.get(\\\"CERTBOT_DOMAIN\\\", \\\"\\\")\",\"validation = os.environ.get(\\\"CERTBOT_VALIDATION\\\", \\\"\\\")\",\"out(\\\"CF_CLEANUP status=review reason=missing_certbot_env\\\")\",\"status, resp = api(\\\"DELETE\\\", f\\\"/zones/{data['zone_id']}/dns_records/{data['record_id']}\\\")\",\"name = \\\"_acme-challenge.\\\" + domain\",\"api(\\\"DELETE\\\", f\\\"/zones/{zid}/dns_records/{r['id']}\\\")\"]}]},\"config_paths\":{\"9.conf\":[{\"path\":\"/opt/npmplus/manual-backups/forum-public-ok-20260701T064349Z/proxy_host.public-ok/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/forum-manual-routes-20260701T060633Z/proxy_host.before-manual-forums/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/gram1-root-placeholder-20260701T171405Z/proxy_host.before/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/parked-http01-fixed-20260701T151016Z/proxy_host.before-parked-http01-fixed/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/forum-publish-https81-20260701T060242Z/proxy_host.before-forum-publish/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/pvepro-stage22-20260701T173446Z/proxy_host.before/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/parked-dns01-final-20260701T155530Z/proxy_host.before/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/parked-http01-exact-20260701T153237Z/proxy_host.before-parked-http01-exact/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/forum-certs-fixed-20260701T061554Z/proxy_host.before-certs-fixed/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/parked-http01-acme-20260701T151429Z/proxy_host.before-parked-http01-acme/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/forum-certs-before-20260701T061334Z/proxy_host.before-certs/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/batch-publish-20260615T212936Z/proxy_host.before/9.conf\",\"sha256\":\"a5d04a8d52f9dd1e7f5200699297618fc54ae7525a475450ef80368e0edfec58\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/forum-publish-fixed-20260701T060004Z/proxy_host.before-forum-publish/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/parked-http01-20260701T150635Z/proxy_host.before-parked-http01/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/gitea-active-route-switch-20260702T051127Z/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/forum-publish-20260701T055831Z/proxy_host.before-forum-publish/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/manual-backups/parked-stage16-route-only-20260701T155843Z/proxy_host.before/9.conf\",\"sha256\":\"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/nginx/proxy_host/9.conf\",\"sha256\":\"098f4bd041e62ee6a431c6cbf0db92016b8ec549589c2e1d66e20b16561a7bac\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0}],\"999.conf\":[{\"path\":\"/opt/npmplus/manual-backups/public-server-tokens-20260904T081240Z/999.conf\",\"sha256\":\"fce52d92b088df4d01a8e89f7f45ebc9b37b90469d0bf8c0c220cc56694c283a\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/nginx/proxy_host/999.conf\",\"sha256\":\"d7ef6af1ded8e3ff2fdbc594f55210ef04a487f0183c724e07a4d5c8e03e8281\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0}],\"992.conf\":[{\"path\":\"/opt/npmplus/manual-backups/public-server-tokens-20260904T081240Z/992.conf\",\"sha256\":\"92c93cf35755510c01341f2637ae4d86297c39895fb500523892dd56e32bb27a\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0},{\"path\":\"/opt/npmplus/nginx/proxy_host/992.conf\",\"sha256\":\"38038cdbcc1cc963246837a27e82ed8de79aa358194092f2c494f4e7f68b68a1\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0}],\"git-read-location.conf\":[{\"path\":\"/opt/npmplus/custom_nginx/git-read-location.conf\",\"sha256\":\"9032f6959fdf666bb777378791042b7a99d40d99ddedb0472812a65fc07d81e9\",\"mode\":\"0o644\",\"uid\":0,\"gid\":0}]},\"certbot\":{\"host\":{\"rc\":0,\"out\":\"certbot 4.0.0\",\"err_sha\":null},\"container\":{\"rc\":0,\"out\":\"certbot 5.7.0\",\"err_sha\":null}},\"certbot_help\":{\"host\":{\"rc\":0,\"manual_auth_hook\":true,\"manual_cleanup_hook\":true,\"preferred_challenges\":true},\"container\":{\"rc\":0,\"manual_auth_hook\":true,\"manual_cleanup_hook\":true,\"preferred_challenges\":true}},\"referenced_config_files\":[]}}}\nTASK_COMPLETE=true\nTASK_RESULT=PASS_SPB_HOME_INGRESS_ACME_HOOK_PRECHECK\nDECISION=READ_EXACT_9120_THEN_CONTROLLED_CERT_AND_VHOST_FIX\n" +} diff --git a/runtime/history/SUPPORT-260922-SPB-HOME-INGRESS-ACME-HOOK-PRECHECK-9120R1.txt b/runtime/history/SUPPORT-260922-SPB-HOME-INGRESS-ACME-HOOK-PRECHECK-9120R1.txt new file mode 100644 index 00000000..f8cd1352 --- /dev/null +++ b/runtime/history/SUPPORT-260922-SPB-HOME-INGRESS-ACME-HOOK-PRECHECK-9120R1.txt @@ -0,0 +1,36 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-260922-SPB-HOME-INGRESS-ACME-HOOK-PRECHECK-9120R1 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=spb-home-ingress-acme-hook-precheck +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=b1a01d27969a1f75b7fe7163b96f1cdf80777ac2464b02682bec2697891b8f99 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=false +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=0 +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=3cf1f3e3846e8996d51ae516413ea21e677e9893d8b4299f3f47cd409f5e0973 +SANITIZED_OUTPUT_SHA256=3cf1f3e3846e8996d51ae516413ea21e677e9893d8b4299f3f47cd409f5e0973 +OUTPUT_BEGIN +SPB9120_PRECHECK={"guest":{"ok":true,"data":{"hostname":"edge-vm","hooks":{"pvepro-cf-certbot-hook.py":[{"path":"/opt/npmplus/scripts/pvepro-cf-certbot-hook.py","sha256":"9b92d1893119af794096665dedeaae873b2da64905173c0a62916ae1f6aed268","mode":"0o700","uid":0,"gid":0,"executable":true,"certbot_env":[],"env_names":[],"mentions_gram1":false,"mentions_hbarhub":false,"mentions_newfilya":false,"selected_lines":["req = urllib.request.Request(\"https://api.cloudflare.com/client/v4\"+path, data=data, headers={\"Authorization\":\"Bearer \"+token(), \"Content-Type\":\"application/json\"}, method=method)","return STATE_DIR / (domain + \"-\" + hashlib.sha256((domain+\"|\"+validation).encode()).hexdigest()[:20] + \".json\")","domain=os.environ.get(\"CERTBOT_DOMAIN\",\"\"); validation=os.environ.get(\"CERTBOT_VALIDATION\",\"\")","name=\"_acme-challenge.\"+domain","status, data = api(\"POST\", f\"/zones/{zid}/dns_records\", {\"type\":\"TXT\",\"name\":name,\"content\":validation,\"ttl\":120})","time.sleep(45); return 0","domain=os.environ.get(\"CERTBOT_DOMAIN\",\"\"); validation=os.environ.get(\"CERTBOT_VALIDATION\",\"\")","status, resp=api(\"DELETE\", f\"/zones/{data['zone_id']}/dns_records/{data['record_id']}\")"]}],"pvepro-cf-cleanup-hook.sh":[{"path":"/opt/npmplus/scripts/pvepro-cf-cleanup-hook.sh","sha256":"eff4da2a85d22f0887c3aa7380af6173ee65b634ff44ac5150673726c029149e","mode":"0o700","uid":0,"gid":0,"executable":true,"certbot_env":[],"env_names":[],"mentions_gram1":false,"mentions_hbarhub":false,"mentions_newfilya":false,"selected_lines":["exec /usr/bin/python3 /opt/npmplus/scripts/pvepro-cf-certbot-hook.py cleanup"]}],"gram1-cf-auth-hook.sh":[{"path":"/opt/npmplus/scripts/gram1-cf-auth-hook.sh","sha256":"c03c5b2b18444e38af05599cbd51c518a3646497feb3a59bf5b69996af06b0dc","mode":"0o700","uid":0,"gid":0,"executable":true,"certbot_env":[],"env_names":[],"mentions_gram1":false,"mentions_hbarhub":false,"mentions_newfilya":false,"selected_lines":["exec /usr/bin/python3 /opt/npmplus/scripts/gram1-cf-certbot-hook.py auth"]}],"parked-cf-auth-hook.sh":[{"path":"/opt/npmplus/scripts/parked-cf-auth-hook.sh","sha256":"c9c43720c1a0adaf27b3c20b050dbd8b860d030deb47d7f5789497e3000824c8","mode":"0o700","uid":0,"gid":0,"executable":true,"certbot_env":[],"env_names":[],"mentions_gram1":false,"mentions_hbarhub":false,"mentions_newfilya":false,"selected_lines":["exec /usr/bin/python3 /opt/npmplus/scripts/parked-cf-certbot-hook.py auth"]}],"gram1-cf-certbot-hook.py":[{"path":"/opt/npmplus/scripts/gram1-cf-certbot-hook.py","sha256":"dcaffc5a248359fa3ed93b7bf8af33ad69985776c4a8e3e7f2016c6168da5aee","mode":"0o700","uid":0,"gid":0,"executable":true,"certbot_env":[],"env_names":[],"mentions_gram1":true,"mentions_hbarhub":false,"mentions_newfilya":false,"selected_lines":["req = urllib.request.Request(\"https://api.cloudflare.com/client/v4\" + path, data=data, headers={\"Authorization\": \"Bearer \" + token(), \"Content-Type\": \"application/json\"}, method=method)","h = hashlib.sha256((domain + \"|\" + validation).encode()).hexdigest()[:20]","domain = os.environ.get(\"CERTBOT_DOMAIN\", \"\"); validation = os.environ.get(\"CERTBOT_VALIDATION\", \"\")","name = \"_acme-challenge.\" + domain","status, data = api(\"POST\", f\"/zones/{zid}/dns_records\", {\"type\": \"TXT\", \"name\": name, \"content\": validation, \"ttl\": 120})","out(f\"GRAM1_CF_AUTH domain={domain} status=ok record_id_prefix={rec[:8]}\"); time.sleep(45); return 0","domain = os.environ.get(\"CERTBOT_DOMAIN\", \"\"); validation = os.environ.get(\"CERTBOT_VALIDATION\", \"\")","status, resp = api(\"DELETE\", f\"/zones/{data['zone_id']}/dns_records/{data['record_id']}\")"]}],"gram1-cf-cleanup-hook.sh":[{"path":"/opt/npmplus/scripts/gram1-cf-cleanup-hook.sh","sha256":"f86757b214f6603448a295238b6591eac79faa8702ffb1d0d36697f4f0c5ef17","mode":"0o700","uid":0,"gid":0,"executable":true,"certbot_env":[],"env_names":[],"mentions_gram1":false,"mentions_hbarhub":false,"mentions_newfilya":false,"selected_lines":["exec /usr/bin/python3 /opt/npmplus/scripts/gram1-cf-certbot-hook.py cleanup"]}],"parked-cf-cleanup-hook.sh":[{"path":"/opt/npmplus/scripts/parked-cf-cleanup-hook.sh","sha256":"2d82709fb60b8dcad9dfd38091516fae6ebc3825ec85a8da05643a5cf2cf4380","mode":"0o700","uid":0,"gid":0,"executable":true,"certbot_env":[],"env_names":[],"mentions_gram1":false,"mentions_hbarhub":false,"mentions_newfilya":false,"selected_lines":["exec /usr/bin/python3 /opt/npmplus/scripts/parked-cf-certbot-hook.py cleanup"]}],"pvepro-cf-auth-hook.sh":[{"path":"/opt/npmplus/scripts/pvepro-cf-auth-hook.sh","sha256":"6489531798eda50063aefa41ab44c3c692305c0c29cc5aa4c0dc35fdd469d8cb","mode":"0o700","uid":0,"gid":0,"executable":true,"certbot_env":[],"env_names":[],"mentions_gram1":false,"mentions_hbarhub":false,"mentions_newfilya":false,"selected_lines":["exec /usr/bin/python3 /opt/npmplus/scripts/pvepro-cf-certbot-hook.py auth"]}],"parked-cf-certbot-hook.py":[{"path":"/opt/npmplus/scripts/parked-cf-certbot-hook.py","sha256":"0783fe635ba9ceace923b78e12038ccfc0feaf237ea0abd67cad55169ab90428","mode":"0o700","uid":0,"gid":0,"executable":true,"certbot_env":[],"env_names":[],"mentions_gram1":false,"mentions_hbarhub":false,"mentions_newfilya":false,"selected_lines":["req = urllib.request.Request(\"https://api.cloudflare.com/client/v4\" + path, data=data, headers=headers, method=method)","h = hashlib.sha256((domain + \"|\" + validation).encode()).hexdigest()[:20]","return api(\"GET\", f\"/zones/{zid}/dns_records?{q}\")","domain = os.environ.get(\"CERTBOT_DOMAIN\", \"\")","validation = os.environ.get(\"CERTBOT_VALIDATION\", \"\")","out(\"CF_AUTH status=review reason=missing_certbot_env\")","name = \"_acme-challenge.\" + domain","status, data = api(\"POST\", f\"/zones/{zid}/dns_records\", payload)","time.sleep(45)","domain = os.environ.get(\"CERTBOT_DOMAIN\", \"\")","validation = os.environ.get(\"CERTBOT_VALIDATION\", \"\")","out(\"CF_CLEANUP status=review reason=missing_certbot_env\")","status, resp = api(\"DELETE\", f\"/zones/{data['zone_id']}/dns_records/{data['record_id']}\")","name = \"_acme-challenge.\" + domain","api(\"DELETE\", f\"/zones/{zid}/dns_records/{r['id']}\")"]}]},"config_paths":{"9.conf":[{"path":"/opt/npmplus/manual-backups/forum-public-ok-20260701T064349Z/proxy_host.public-ok/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/forum-manual-routes-20260701T060633Z/proxy_host.before-manual-forums/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/gram1-root-placeholder-20260701T171405Z/proxy_host.before/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/parked-http01-fixed-20260701T151016Z/proxy_host.before-parked-http01-fixed/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/forum-publish-https81-20260701T060242Z/proxy_host.before-forum-publish/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/pvepro-stage22-20260701T173446Z/proxy_host.before/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/parked-dns01-final-20260701T155530Z/proxy_host.before/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/parked-http01-exact-20260701T153237Z/proxy_host.before-parked-http01-exact/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/forum-certs-fixed-20260701T061554Z/proxy_host.before-certs-fixed/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/parked-http01-acme-20260701T151429Z/proxy_host.before-parked-http01-acme/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/forum-certs-before-20260701T061334Z/proxy_host.before-certs/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/batch-publish-20260615T212936Z/proxy_host.before/9.conf","sha256":"a5d04a8d52f9dd1e7f5200699297618fc54ae7525a475450ef80368e0edfec58","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/forum-publish-fixed-20260701T060004Z/proxy_host.before-forum-publish/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/parked-http01-20260701T150635Z/proxy_host.before-parked-http01/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/gitea-active-route-switch-20260702T051127Z/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/forum-publish-20260701T055831Z/proxy_host.before-forum-publish/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/manual-backups/parked-stage16-route-only-20260701T155843Z/proxy_host.before/9.conf","sha256":"3764265cb2b64d6f5a495efcbd42e451b45a3469a460dc34cab8214088dc3bb4","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/nginx/proxy_host/9.conf","sha256":"098f4bd041e62ee6a431c6cbf0db92016b8ec549589c2e1d66e20b16561a7bac","mode":"0o644","uid":0,"gid":0}],"999.conf":[{"path":"/opt/npmplus/manual-backups/public-server-tokens-20260904T081240Z/999.conf","sha256":"fce52d92b088df4d01a8e89f7f45ebc9b37b90469d0bf8c0c220cc56694c283a","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/nginx/proxy_host/999.conf","sha256":"d7ef6af1ded8e3ff2fdbc594f55210ef04a487f0183c724e07a4d5c8e03e8281","mode":"0o644","uid":0,"gid":0}],"992.conf":[{"path":"/opt/npmplus/manual-backups/public-server-tokens-20260904T081240Z/992.conf","sha256":"92c93cf35755510c01341f2637ae4d86297c39895fb500523892dd56e32bb27a","mode":"0o644","uid":0,"gid":0},{"path":"/opt/npmplus/nginx/proxy_host/992.conf","sha256":"38038cdbcc1cc963246837a27e82ed8de79aa358194092f2c494f4e7f68b68a1","mode":"0o644","uid":0,"gid":0}],"git-read-location.conf":[{"path":"/opt/npmplus/custom_nginx/git-read-location.conf","sha256":"9032f6959fdf666bb777378791042b7a99d40d99ddedb0472812a65fc07d81e9","mode":"0o644","uid":0,"gid":0}]},"certbot":{"host":{"rc":0,"out":"certbot 4.0.0","err_sha":null},"container":{"rc":0,"out":"certbot 5.7.0","err_sha":null}},"certbot_help":{"host":{"rc":0,"manual_auth_hook":true,"manual_cleanup_hook":true,"preferred_challenges":true},"container":{"rc":0,"manual_auth_hook":true,"manual_cleanup_hook":true,"preferred_challenges":true}},"referenced_config_files":[]}}} +TASK_COMPLETE=true +TASK_RESULT=PASS_SPB_HOME_INGRESS_ACME_HOOK_PRECHECK +DECISION=READ_EXACT_9120_THEN_CONTROLLED_CERT_AND_VHOST_FIX + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 2ff07ca5..53deef95 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-260922-SPB-HOME-INGRESS-CERT-SAN-RCA-9119R1", + "command_id": "SUPPORT-260922-SPB-HOME-INGRESS-ACME-HOOK-PRECHECK-9120R1", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", - "component": "spb-home-ingress-cert-san-rca", - "started_at_utc": "2026-09-22T13:28:19Z", - "finished_at_utc": "2026-09-22T13:28:22Z", + "component": "spb-home-ingress-acme-hook-precheck", + "started_at_utc": "2026-09-22T13:36:00Z", + "finished_at_utc": "2026-09-22T13:36:04Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "d8045ced2dff397b063d566c3cfeca7c305d9349aa60ed07a7945e5b1042c0b0", + "command_sha256": "b1a01d27969a1f75b7fe7163b96f1cdf80777ac2464b02682bec2697891b8f99", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "b1d739a5d7a5c86998d7091abecc8a480e6986eacffc3e5c5a2259fc592e51ef", - "sanitized_output_sha256": "ea74e8b95627eb15a745603f2361a7d249767f6999dd253269dc0915b7e480c7", + "raw_evidence_sha256": "3cf1f3e3846e8996d51ae516413ea21e677e9893d8b4299f3f47cd409f5e0973", + "sanitized_output_sha256": "3cf1f3e3846e8996d51ae516413ea21e677e9893d8b4299f3f47cd409f5e0973", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "SPB9119_RCA={\"guest\":{\"ok\":true,\"data\":{\"hostname\":\"edge-vm\",\"root_blocks\":{\"git.gram1.ru\":[{\"names\":[\"git.gram1.ru\"],\"listen\":[\"unix:/run/nginx.sock\",\"0.0.0.0:80\",\"0.0.0.0:443 ssl\"],\"certs\":[\"/data/tls/certbot/live/npm-29/fullchain.pem\"],\"keys\":[\"d6e74cf29e41a401\"],\"proxy\":[\"http://[PRIVATE_IP]:18095\",\"http://upstream_9\"],\"returns\":[\"301 https://$host$is_request_port$request_port$request_uri\",\"301 https://$host$is_request_port$request_port$request_uri\"],\"includes\":[\"proxy-headers.conf\",\"/data/custom_nginx/server_http.conf\",\"/data/custom_nginx/server_proxy.conf\"]}],\"hbarhub.ru\":[{\"names\":[\"hbarhub.ru\"],\"listen\":[\"unix:/run/nginx.sock\",\"0.0.0.0:80\",\"0.0.0.0:443 ssl\"],\"certs\":[\"/data/tls/certbot/live/hbarhub.ru/fullchain.pem\"],\"keys\":[\"bb408869549c1032\"],\"proxy\":[\"http://upstream_999\"],\"returns\":[\"301 https://$host$is_request_port$request_port$request_uri\",\"301 https://$host$is_request_port$request_port$request_uri\"],\"includes\":[\"proxy-headers.conf\",\"/data/custom_nginx/server_http.conf\",\"/data/custom_nginx/server_proxy.conf\"]}],\"newfilya.ru\":[{\"names\":[\"newfilya.ru\"],\"listen\":[\"0.0.0.0:80\"],\"certs\":[],\"keys\":[],\"proxy\":[],\"returns\":[\"301 https://newfilya.ru$request_uri\"],\"includes\":[]},{\"names\":[\"newfilya.ru\"],\"listen\":[\"unix:/run/nginx.sock\",\"0.0.0.0:443 ssl\"],\"certs\":[\"/data/tls/certbot/live/newfilya.ru/fullchain.pem\"],\"keys\":[\"88811a6e13394274\"],\"proxy\":[],\"returns\":[\"200 'Илюша — сайт готовится к запуску