runtime: publish CLUSTER-REFERENCE-PUBLISHER-TARGET-CONTRACT-176
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1,137 @@
|
|||||||
|
CHAT_OUTPUT_BEGIN
|
||||||
|
COMMAND_ID=CLUSTER-REFERENCE-PUBLISHER-TARGET-CONTRACT-176
|
||||||
|
STATUS=OK
|
||||||
|
RC=0
|
||||||
|
HOST=pve01
|
||||||
|
MODE=read-only
|
||||||
|
COMPONENT=cluster-audit
|
||||||
|
REFERENCE_REGISTER_CHECK=OK
|
||||||
|
REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e
|
||||||
|
ERROR_REGISTER_CHECK=OK
|
||||||
|
ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752
|
||||||
|
COMMAND_SHA256=01b8504576da954cebe19fd1679257dc1dcf959e67d0d138616c0d3e0026fa9e
|
||||||
|
DUPLICATE_FAILED_COMMAND_BLOCKED=false
|
||||||
|
EXECUTION_STARTED=true
|
||||||
|
CHANGES_MADE=false
|
||||||
|
SANITIZED=yes
|
||||||
|
SECRETS_INCLUDED=no
|
||||||
|
PRIVATE_ADDRESSES_INCLUDED=no
|
||||||
|
RAW_EVIDENCE_SHA256=0d8074606aafa496e20565b406a75e334bec6ebb6de78d3259fd8ace493c704f
|
||||||
|
SANITIZED_OUTPUT_SHA256=0d8074606aafa496e20565b406a75e334bec6ebb6de78d3259fd8ace493c704f
|
||||||
|
OUTPUT_BEGIN
|
||||||
|
validation=PASS
|
||||||
|
REFERENCE_CHECK=OK
|
||||||
|
ERROR_REGISTER_CHECK=OK
|
||||||
|
BOOTSTRAP_CHECK=OK
|
||||||
|
ERROR_REGISTER_LOADED=YES
|
||||||
|
PREVIOUS_RESULT=VERIFIED
|
||||||
|
PRIOR_FAILURE_173=RC141_EMPTY_OUTPUT_REGISTERED
|
||||||
|
=== EXISTING_RECEIVER ===
|
||||||
|
REMOTE_RUNTIME_RECEIVER_SHA256=6f4eadda35241d984c30084430f60c456e943d3b17fea6b8c82cf3d5d6a318f4
|
||||||
|
REMOTE_RUNTIME_RECEIVER_LINES=273
|
||||||
|
=== RECEIVER_CONTRACT_LINES ===
|
||||||
|
8:PUBLIC_DIR="${HOST_DATA}/gitea/public/.well-known/homelab-runtime"
|
||||||
|
99: raise SystemExit("FORBIDDEN_PUBLIC_CONTENT")
|
||||||
|
108: "$PUBLIC_DIR" \
|
||||||
|
116:install \
|
||||||
|
123:install \
|
||||||
|
184:mkdir -p runtime/history
|
||||||
|
186:cp "$STAGE/latest.json" runtime/latest.json
|
||||||
|
187:cp "$STAGE/latest.txt" runtime/latest.txt
|
||||||
|
188:cp "$STAGE/latest.json" "runtime/history/${COMMAND_ID}.json"
|
||||||
|
189:cp "$STAGE/latest.txt" "runtime/history/${COMMAND_ID}.txt"
|
||||||
|
190:cp "$STAGE/README.md" README.md
|
||||||
|
192:git add \
|
||||||
|
196: "runtime/history/${COMMAND_ID}.json"
|
||||||
|
198:git add "runtime/history/${COMMAND_ID}.txt"
|
||||||
|
204: git commit \
|
||||||
|
210:GIT_ASKPASS=/data/gitea/runtime-auth/askpass GIT_TERMINAL_PROMPT=0 git push --quiet http://127.0.0.1:3000/homelab-admin/homelab-public-context.git HEAD:refs/heads/assistant-runtime
|
||||||
|
219:JSON_TMP="$(mktemp "${PUBLIC_DIR}/.latest.json.XXXXXX")"
|
||||||
|
220:TXT_TMP="$(mktemp "${PUBLIC_DIR}/.latest.txt.XXXXXX")"
|
||||||
|
221:INDEX_TMP="$(mktemp "${PUBLIC_DIR}/.index.json.XXXXXX")"
|
||||||
|
223:install -m 0644 "$JSON_FILE" "$JSON_TMP"
|
||||||
|
224:install -m 0644 "$TXT_FILE" "$TXT_TMP"
|
||||||
|
243: "https://git.gram1.ru/.well-known/"
|
||||||
|
247: "https://git.gram1.ru/.well-known/"
|
||||||
|
255:mv -f "$JSON_TMP" "$PUBLIC_DIR/latest.json"
|
||||||
|
256:mv -f "$TXT_TMP" "$PUBLIC_DIR/latest.txt"
|
||||||
|
257:mv -f "$INDEX_TMP" "$PUBLIC_DIR/index.json"
|
||||||
|
261: http://127.0.0.1:3002/.well-known/homelab-runtime/latest.json |
|
||||||
|
272:echo 'STATIC_PUBLICATION=OK'
|
||||||
|
273:echo 'RAW_BRANCH_PUBLICATION=OK'
|
||||||
|
=== REMOTE_RECEIVER_AND_PUBLISHER_TOOLS ===
|
||||||
|
/usr/local/sbin/homelab-runtime-receive.before-clean-final.20260721T101829Z
|
||||||
|
/usr/local/sbin/homelab-runtime-receive.before-curl-pipe.20260721T065850Z
|
||||||
|
/usr/local/sbin/homelab-runtime-receive.before-history-txt.20260721T063221Z
|
||||||
|
/usr/local/sbin/homelab-runtime-receive
|
||||||
|
/usr/local/sbin/homelab-runtime-receive.before-clean.20260721T102823Z
|
||||||
|
/usr/local/sbin/homelab-runtime-receive.before-cleanup.20260721T101513Z
|
||||||
|
/usr/local/sbin/homelab-runtime-receive.before-real-push.20260721T094507Z
|
||||||
|
/usr/local/sbin/homelab-runtime-receive.before-real-push.20260721T095258Z
|
||||||
|
=== REMOTE_STATIC_WELL_KNOWN_DIRECTORIES ===
|
||||||
|
.well-known
|
||||||
|
.well-known/homelab-runtime
|
||||||
|
=== REMOTE_STATIC_WELL_KNOWN_FILES ===
|
||||||
|
.well-known/gitea-auth-check-014.txt
|
||||||
|
.well-known/gitea-auth-check-017.txt
|
||||||
|
.well-known/gitea-push-auth-stage-012.txt
|
||||||
|
.well-known/gitea-real-push-canary.txt
|
||||||
|
.well-known/homelab-bootstrap.json
|
||||||
|
.well-known/homelab-bootstrap.json.bak.20260721T092825Z
|
||||||
|
.well-known/homelab-bootstrap.json.bak.20260721T093110Z
|
||||||
|
.well-known/homelab-context.json
|
||||||
|
.well-known/homelab-context-manifest.json
|
||||||
|
.well-known/homelab-context.txt
|
||||||
|
.well-known/homelab-runtime/index.json
|
||||||
|
.well-known/homelab-runtime/latest.json
|
||||||
|
.well-known/homelab-runtime/latest.txt
|
||||||
|
.well-known/runtime-receiver-preflight-020.txt
|
||||||
|
.well-known/runtime-receiver-state-026.txt
|
||||||
|
=== LOCAL_REFERENCE_PUBLIC_MIRROR ===
|
||||||
|
LOCAL_PUBLIC_FILE_COUNT=26
|
||||||
|
LOCAL_PUBLIC_BYTES=492590
|
||||||
|
6c1c36edcb16428cea7c0813a7272bc9d8741e1bbdae6d66b07fbb94b4a6b977 /etc/homelab/reference/public/index.json
|
||||||
|
LOCAL_PUBLIC=effective/access.json SIZE=7732
|
||||||
|
LOCAL_PUBLIC=effective/applications.json SIZE=184
|
||||||
|
LOCAL_PUBLIC=effective/backups.json SIZE=28817
|
||||||
|
LOCAL_PUBLIC=effective/certificates.json SIZE=184
|
||||||
|
LOCAL_PUBLIC=effective/change_management.json SIZE=189
|
||||||
|
LOCAL_PUBLIC=effective/cluster.json SIZE=2904
|
||||||
|
LOCAL_PUBLIC=effective/containers.json SIZE=1396
|
||||||
|
LOCAL_PUBLIC=effective/contracts.json SIZE=181
|
||||||
|
LOCAL_PUBLIC=effective/dependencies.json SIZE=184
|
||||||
|
LOCAL_PUBLIC=effective/disaster_recovery.json SIZE=189
|
||||||
|
LOCAL_PUBLIC=effective/dns.json SIZE=368
|
||||||
|
LOCAL_PUBLIC=effective/domains.json SIZE=19160
|
||||||
|
LOCAL_PUBLIC=effective/external_services.json SIZE=22902
|
||||||
|
LOCAL_PUBLIC=effective/guests.json SIZE=4075
|
||||||
|
LOCAL_PUBLIC=effective/ingress.json SIZE=179
|
||||||
|
LOCAL_PUBLIC=effective/monitoring.json SIZE=31856
|
||||||
|
LOCAL_PUBLIC=effective/networks.json SIZE=372
|
||||||
|
LOCAL_PUBLIC=effective/nodes.json SIZE=1950
|
||||||
|
LOCAL_PUBLIC=effective/owners.json SIZE=178
|
||||||
|
LOCAL_PUBLIC=effective/runbooks.json SIZE=180
|
||||||
|
LOCAL_PUBLIC=effective/security.json SIZE=488
|
||||||
|
LOCAL_PUBLIC=effective/services.json SIZE=366949
|
||||||
|
LOCAL_PUBLIC=effective/storage.json SIZE=916
|
||||||
|
LOCAL_PUBLIC=effective/vendors.json SIZE=179
|
||||||
|
LOCAL_PUBLIC=index.json SIZE=703
|
||||||
|
LOCAL_PUBLIC=README.md SIZE=175
|
||||||
|
=== LOCAL_PUBLICATION_METADATA ===
|
||||||
|
/etc/homelab/reference/manifest.json:4: "updated_at": "2026-07-22T08:12:10+00:00",
|
||||||
|
/etc/homelab/reference/manifest.json:85: "publish sanitized mirror",
|
||||||
|
/etc/homelab/reference/state/current.json:3: "status": "AUTO_REFRESH_READY",
|
||||||
|
/etc/homelab/reference/state/current.json:4: "updated_at": "2026-07-22T10:32:25+00:00",
|
||||||
|
/etc/homelab/reference/state/current.json:83: "public_index": "/etc/homelab/reference/public/index.json",
|
||||||
|
/etc/homelab/reference/docs/OPERATIONS.md:11:Publish: homelab-reference-publish
|
||||||
|
=== BOOTSTRAP_STATE ===
|
||||||
|
BOOTSTRAP_GENERATED_AT=2026-07-21T07:02:17Z
|
||||||
|
{"status":"PARTIAL","missing":["automatic_refresh","per_node_freshness","structured_service_inventory"]}
|
||||||
|
REFERENCE_CHECK=OK
|
||||||
|
ERROR_REGISTER_CHECK=OK
|
||||||
|
SECRET_PRINTED=NO
|
||||||
|
PRIVATE_ADDRESS_PRINTED=NO
|
||||||
|
PUBLISHER_TARGET_CONTRACT=COMPLETE
|
||||||
|
|
||||||
|
OUTPUT_END
|
||||||
|
CHAT_OUTPUT_END
|
||||||
+7
-7
File diff suppressed because one or more lines are too long
+110
-224
@@ -1,5 +1,5 @@
|
|||||||
CHAT_OUTPUT_BEGIN
|
CHAT_OUTPUT_BEGIN
|
||||||
COMMAND_ID=CLUSTER-REFERENCE-PUBLISHER-SOURCE-EXTRACT-175
|
COMMAND_ID=CLUSTER-REFERENCE-PUBLISHER-TARGET-CONTRACT-176
|
||||||
STATUS=OK
|
STATUS=OK
|
||||||
RC=0
|
RC=0
|
||||||
HOST=pve01
|
HOST=pve01
|
||||||
@@ -9,243 +9,129 @@ REFERENCE_REGISTER_CHECK=OK
|
|||||||
REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e
|
REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e
|
||||||
ERROR_REGISTER_CHECK=OK
|
ERROR_REGISTER_CHECK=OK
|
||||||
ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752
|
ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752
|
||||||
COMMAND_SHA256=c7bfd2a11496ee580c4f487ad180de917052a698bfeb10fb1916d2dd2cf2acac
|
COMMAND_SHA256=01b8504576da954cebe19fd1679257dc1dcf959e67d0d138616c0d3e0026fa9e
|
||||||
DUPLICATE_FAILED_COMMAND_BLOCKED=false
|
DUPLICATE_FAILED_COMMAND_BLOCKED=false
|
||||||
EXECUTION_STARTED=true
|
EXECUTION_STARTED=true
|
||||||
CHANGES_MADE=false
|
CHANGES_MADE=false
|
||||||
SANITIZED=yes
|
SANITIZED=yes
|
||||||
SECRETS_INCLUDED=no
|
SECRETS_INCLUDED=no
|
||||||
PRIVATE_ADDRESSES_INCLUDED=no
|
PRIVATE_ADDRESSES_INCLUDED=no
|
||||||
RAW_EVIDENCE_SHA256=dbcffd7aedbdb836ef10a48eecc98523d23e2c0db4017bba124caeeaab4a1b47
|
RAW_EVIDENCE_SHA256=0d8074606aafa496e20565b406a75e334bec6ebb6de78d3259fd8ace493c704f
|
||||||
SANITIZED_OUTPUT_SHA256=f76fc120b3d22cac5e9945e9e3287749dff8d0bdd35bfb2399f961933259130e
|
SANITIZED_OUTPUT_SHA256=0d8074606aafa496e20565b406a75e334bec6ebb6de78d3259fd8ace493c704f
|
||||||
OUTPUT_BEGIN
|
OUTPUT_BEGIN
|
||||||
validation=PASS
|
validation=PASS
|
||||||
AUTHORITATIVE_PREVIOUS=CLUSTER-REFERENCE-PUBLISHER-RECOVERY-AUDIT-170:OK
|
|
||||||
=== LOCAL_174_EVIDENCE ===
|
|
||||||
/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-RUNNER-GAP-AUDIT-174-20260722T104212Z.json
|
|
||||||
/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-RUNNER-GAP-AUDIT-174-20260722T104212Z-latest.txt
|
|
||||||
/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-RUNNER-GAP-AUDIT-174-20260722T104212Z.txt
|
|
||||||
COMMAND_ID=CLUSTER-REFERENCE-RUNNER-GAP-AUDIT-174
|
|
||||||
STATUS=OK
|
|
||||||
RC=0
|
|
||||||
ERROR_REGISTER_CHECK=OK
|
|
||||||
REMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171 PRESENT
|
|
||||||
LOCAL_LEDGER=2026-07-22T10:25:15Z CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171 1299fe30eb30386fec901e120ab525ece490edc5eca767d9216466ecd225bef5 0 OK cluster-audit
|
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.json
|
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z-latest.txt
|
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.txt
|
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.log
|
|
||||||
REMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172 PRESENT
|
|
||||||
LOCAL_LEDGER=2026-07-22T10:31:23Z CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172 1732aee566a83403f448dd74bbfed41489b1640081fd869e751d662ce82fabd8 0 OK cluster-audit
|
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.json
|
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z-latest.txt
|
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.txt
|
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.log
|
|
||||||
REMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173 PRESENT
|
|
||||||
LOCAL_LEDGER=2026-07-22T10:36:43Z CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173 5cdd947b6f70123b03dde2c7e4e6f2438293bf651fe1cf84f77374b982df1f7e 141 FAIL cluster-audit
|
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.json
|
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z-latest.txt
|
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.txt
|
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.log
|
|
||||||
REFERENCE_CHECK=OK
|
REFERENCE_CHECK=OK
|
||||||
ERROR_REGISTER_CHECK=OK
|
ERROR_REGISTER_CHECK=OK
|
||||||
GAP_ERROR_REGISTERED=YES
|
BOOTSTRAP_CHECK=OK
|
||||||
RUNNER_GAP_AUDIT=COMPLETE
|
ERROR_REGISTER_LOADED=YES
|
||||||
REMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171 PRESENT
|
PREVIOUS_RESULT=VERIFIED
|
||||||
LOCAL_LEDGER=2026-07-22T10:25:15Z CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171 1299fe30eb30386fec901e120ab525ece490edc5eca767d9216466ecd225bef5 0 OK cluster-audit
|
PRIOR_FAILURE_173=RC141_EMPTY_OUTPUT_REGISTERED
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.json
|
=== EXISTING_RECEIVER ===
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z-latest.txt
|
REMOTE_RUNTIME_RECEIVER_SHA256=6f4eadda35241d984c30084430f60c456e943d3b17fea6b8c82cf3d5d6a318f4
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.txt
|
REMOTE_RUNTIME_RECEIVER_LINES=273
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.log
|
=== RECEIVER_CONTRACT_LINES ===
|
||||||
REMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172 PRESENT
|
8:PUBLIC_DIR="${HOST_DATA}/gitea/public/.well-known/homelab-runtime"
|
||||||
LOCAL_LEDGER=2026-07-22T10:31:23Z CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172 1732aee566a83403f448dd74bbfed41489b1640081fd869e751d662ce82fabd8 0 OK cluster-audit
|
99: raise SystemExit("FORBIDDEN_PUBLIC_CONTENT")
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.json
|
108: "$PUBLIC_DIR" \
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z-latest.txt
|
116:install \
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.txt
|
123:install \
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.log
|
184:mkdir -p runtime/history
|
||||||
REMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173 PRESENT
|
186:cp "$STAGE/latest.json" runtime/latest.json
|
||||||
LOCAL_LEDGER=2026-07-22T10:36:43Z CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173 5cdd947b6f70123b03dde2c7e4e6f2438293bf651fe1cf84f77374b982df1f7e 141 FAIL cluster-audit
|
187:cp "$STAGE/latest.txt" runtime/latest.txt
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.json
|
188:cp "$STAGE/latest.json" "runtime/history/${COMMAND_ID}.json"
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z-latest.txt
|
189:cp "$STAGE/latest.txt" "runtime/history/${COMMAND_ID}.txt"
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.txt
|
190:cp "$STAGE/README.md" README.md
|
||||||
LOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.log
|
192:git add \
|
||||||
REFERENCE_CHECK=OK
|
196: "runtime/history/${COMMAND_ID}.json"
|
||||||
ERROR_REGISTER_CHECK=OK
|
198:git add "runtime/history/${COMMAND_ID}.txt"
|
||||||
GAP_ERROR_REGISTERED=YES
|
204: git commit \
|
||||||
RUNNER_GAP_AUDIT=COMPLETE
|
210:GIT_ASKPASS=/data/gitea/runtime-auth/askpass GIT_TERMINAL_PROMPT=0 git push --quiet http://127.0.0.1:3000/homelab-admin/homelab-public-context.git HEAD:refs/heads/assistant-runtime
|
||||||
=== WORKING_RUNTIME_PUBLICATION_SOURCE ===
|
219:JSON_TMP="$(mktemp "${PUBLIC_DIR}/.latest.json.XXXXXX")"
|
||||||
"raw_evidence_retained_locally": True,
|
220:TXT_TMP="$(mktemp "${PUBLIC_DIR}/.latest.txt.XXXXXX")"
|
||||||
"raw_evidence_sha256": raw_sha,
|
221:INDEX_TMP="$(mktemp "${PUBLIC_DIR}/.index.json.XXXXXX")"
|
||||||
"sanitized_output_sha256": sanitized_sha,
|
223:install -m 0644 "$JSON_FILE" "$JSON_TMP"
|
||||||
"output_truncated_in_json": output_truncated,
|
224:install -m 0644 "$TXT_FILE" "$TXT_TMP"
|
||||||
"full_sanitized_output_url": (
|
243: "https://git.gram1.ru/.well-known/"
|
||||||
"https://git.gram1.ru/.well-known/"
|
247: "https://git.gram1.ru/.well-known/"
|
||||||
"homelab-runtime/latest.txt"
|
255:mv -f "$JSON_TMP" "$PUBLIC_DIR/latest.json"
|
||||||
),
|
256:mv -f "$TXT_TMP" "$PUBLIC_DIR/latest.txt"
|
||||||
"output": output_preview,
|
257:mv -f "$INDEX_TMP" "$PUBLIC_DIR/index.json"
|
||||||
}
|
261: http://127.0.0.1:3002/.well-known/homelab-runtime/latest.json |
|
||||||
|
272:echo 'STATIC_PUBLICATION=OK'
|
||||||
Path(json_path).write_text(
|
273:echo 'RAW_BRANCH_PUBLICATION=OK'
|
||||||
json.dumps(
|
=== REMOTE_RECEIVER_AND_PUBLISHER_TOOLS ===
|
||||||
document,
|
/usr/local/sbin/homelab-runtime-receive.before-clean-final.20260721T101829Z
|
||||||
ensure_ascii=False,
|
/usr/local/sbin/homelab-runtime-receive.before-curl-pipe.20260721T065850Z
|
||||||
indent=2,
|
/usr/local/sbin/homelab-runtime-receive.before-history-txt.20260721T063221Z
|
||||||
)
|
/usr/local/sbin/homelab-runtime-receive
|
||||||
+ "\n",
|
/usr/local/sbin/homelab-runtime-receive.before-clean.20260721T102823Z
|
||||||
encoding="utf-8",
|
/usr/local/sbin/homelab-runtime-receive.before-cleanup.20260721T101513Z
|
||||||
)
|
/usr/local/sbin/homelab-runtime-receive.before-real-push.20260721T094507Z
|
||||||
PY
|
/usr/local/sbin/homelab-runtime-receive.before-real-push.20260721T095258Z
|
||||||
|
=== REMOTE_STATIC_WELL_KNOWN_DIRECTORIES ===
|
||||||
{
|
.well-known
|
||||||
echo 'CHAT_OUTPUT_BEGIN'
|
.well-known/homelab-runtime
|
||||||
echo "COMMAND_ID=$COMMAND_ID"
|
=== REMOTE_STATIC_WELL_KNOWN_FILES ===
|
||||||
echo "STATUS=$STATUS"
|
.well-known/gitea-auth-check-014.txt
|
||||||
echo "RC=$RC"
|
.well-known/gitea-auth-check-017.txt
|
||||||
echo "HOST=$HOST_SHORT"
|
.well-known/gitea-push-auth-stage-012.txt
|
||||||
echo "MODE=$MODE"
|
.well-known/gitea-real-push-canary.txt
|
||||||
echo "COMPONENT=$COMPONENT"
|
.well-known/homelab-bootstrap.json
|
||||||
echo 'REFERENCE_REGISTER_CHECK=OK'
|
.well-known/homelab-bootstrap.json.bak.20260721T092825Z
|
||||||
echo "REFERENCE_SHA256=$REFERENCE_SHA256"
|
.well-known/homelab-bootstrap.json.bak.20260721T093110Z
|
||||||
echo 'ERROR_REGISTER_CHECK=OK'
|
.well-known/homelab-context.json
|
||||||
echo "ERROR_REGISTER_SHA256=$ERROR_REGISTER_SHA256"
|
.well-known/homelab-context-manifest.json
|
||||||
echo "COMMAND_SHA256=$COMMAND_SHA256"
|
.well-known/homelab-context.txt
|
||||||
echo "DUPLICATE_FAILED_COMMAND_BLOCKED=$REPEAT_BLOCKED"
|
.well-known/homelab-runtime/index.json
|
||||||
echo "EXECUTION_STARTED=$RUN_STARTED"
|
.well-known/homelab-runtime/latest.json
|
||||||
echo "CHANGES_MADE=$CHANGES_MADE"
|
.well-known/homelab-runtime/latest.txt
|
||||||
echo 'SANITIZED=yes'
|
.well-known/runtime-receiver-preflight-020.txt
|
||||||
echo 'SECRETS_INCLUDED=no'
|
.well-known/runtime-receiver-state-026.txt
|
||||||
echo 'PRIVATE_ADDRESSES_INCLUDED=no'
|
=== LOCAL_REFERENCE_PUBLIC_MIRROR ===
|
||||||
echo "RAW_EVIDENCE_SHA256=$RAW_SHA256"
|
LOCAL_PUBLIC_FILE_COUNT=26
|
||||||
echo "SANITIZED_OUTPUT_SHA256=$SANITIZED_SHA256"
|
LOCAL_PUBLIC_BYTES=492590
|
||||||
echo 'OUTPUT_BEGIN'
|
6c1c36edcb16428cea7c0813a7272bc9d8741e1bbdae6d66b07fbb94b4a6b977 /etc/homelab/reference/public/index.json
|
||||||
cat "$SANITIZED_FILE"
|
LOCAL_PUBLIC=effective/access.json SIZE=7732
|
||||||
echo
|
LOCAL_PUBLIC=effective/applications.json SIZE=184
|
||||||
echo 'OUTPUT_END'
|
LOCAL_PUBLIC=effective/backups.json SIZE=28817
|
||||||
echo 'CHAT_OUTPUT_END'
|
LOCAL_PUBLIC=effective/certificates.json SIZE=184
|
||||||
} >"$TXT_FILE"
|
LOCAL_PUBLIC=effective/change_management.json SIZE=189
|
||||||
|
LOCAL_PUBLIC=effective/cluster.json SIZE=2904
|
||||||
chmod 0600 \
|
LOCAL_PUBLIC=effective/containers.json SIZE=1396
|
||||||
"$RAW_FILE" \
|
LOCAL_PUBLIC=effective/contracts.json SIZE=181
|
||||||
"$SANITIZED_FILE" \
|
LOCAL_PUBLIC=effective/dependencies.json SIZE=184
|
||||||
"$JSON_FILE" \
|
LOCAL_PUBLIC=effective/disaster_recovery.json SIZE=189
|
||||||
"$TXT_FILE"
|
LOCAL_PUBLIC=effective/dns.json SIZE=368
|
||||||
|
LOCAL_PUBLIC=effective/domains.json SIZE=19160
|
||||||
TARGET=debian@[PRIVATE_IP]
|
LOCAL_PUBLIC=effective/external_services.json SIZE=22902
|
||||||
REMOTE_PREFIX="/tmp/homelab-runtime-${COMMAND_ID}-$$"
|
LOCAL_PUBLIC=effective/guests.json SIZE=4075
|
||||||
|
LOCAL_PUBLIC=effective/ingress.json SIZE=179
|
||||||
SSH_OPTS=(
|
LOCAL_PUBLIC=effective/monitoring.json SIZE=31856
|
||||||
-o BatchMode=yes
|
LOCAL_PUBLIC=effective/networks.json SIZE=372
|
||||||
-o ConnectTimeout=10
|
LOCAL_PUBLIC=effective/nodes.json SIZE=1950
|
||||||
-o ConnectionAttempts=1
|
LOCAL_PUBLIC=effective/owners.json SIZE=178
|
||||||
-o StrictHostKeyChecking=yes
|
LOCAL_PUBLIC=effective/runbooks.json SIZE=180
|
||||||
-o UserKnownHostsFile=[SENSITIVE_PATH]
|
LOCAL_PUBLIC=effective/security.json SIZE=488
|
||||||
)
|
LOCAL_PUBLIC=effective/services.json SIZE=366949
|
||||||
|
LOCAL_PUBLIC=effective/storage.json SIZE=916
|
||||||
scp \
|
LOCAL_PUBLIC=effective/vendors.json SIZE=179
|
||||||
-q \
|
LOCAL_PUBLIC=index.json SIZE=703
|
||||||
"${SSH_OPTS[@]}" \
|
LOCAL_PUBLIC=README.md SIZE=175
|
||||||
"$JSON_FILE" \
|
=== LOCAL_PUBLICATION_METADATA ===
|
||||||
"${TARGET}:${REMOTE_PREFIX}.json"
|
/etc/homelab/reference/manifest.json:4: "updated_at": "2026-07-22T08:12:10+00:00",
|
||||||
|
/etc/homelab/reference/manifest.json:85: "publish sanitized mirror",
|
||||||
scp \
|
/etc/homelab/reference/state/current.json:3: "status": "AUTO_REFRESH_READY",
|
||||||
-q \
|
/etc/homelab/reference/state/current.json:4: "updated_at": "2026-07-22T10:32:25+00:00",
|
||||||
"${SSH_OPTS[@]}" \
|
/etc/homelab/reference/state/current.json:83: "public_index": "/etc/homelab/reference/public/index.json",
|
||||||
"$TXT_FILE" \
|
/etc/homelab/reference/docs/OPERATIONS.md:11:Publish: homelab-reference-publish
|
||||||
"${TARGET}:${REMOTE_PREFIX}.txt"
|
=== BOOTSTRAP_STATE ===
|
||||||
|
BOOTSTRAP_GENERATED_AT=2026-07-21T07:02:17Z
|
||||||
ssh "${SSH_OPTS[@]}" "$TARGET" "
|
{"status":"PARTIAL","missing":["automatic_refresh","per_node_freshness","structured_service_inventory"]}
|
||||||
set +e
|
|
||||||
|
|
||||||
sudo -n /usr/local/sbin/homelab-runtime-receive \
|
|
||||||
'$COMMAND_ID' \
|
|
||||||
'${REMOTE_PREFIX}.json' \
|
|
||||||
'${REMOTE_PREFIX}.txt'
|
|
||||||
|
|
||||||
receiver_rc=\$?
|
|
||||||
|
|
||||||
rm -f \
|
|
||||||
'${REMOTE_PREFIX}.json' \
|
|
||||||
'${REMOTE_PREFIX}.txt'
|
|
||||||
|
|
||||||
exit \$receiver_rc
|
|
||||||
"
|
|
||||||
|
|
||||||
PUBLIC_URL='https://git.gram1.ru/.well-known/homelab-runtime/latest.json'
|
|
||||||
PUBLIC_VISIBLE=false
|
|
||||||
|
|
||||||
for ATTEMPT in $(seq 1 30); do
|
|
||||||
CONTENT="$(
|
|
||||||
curl -fsS \
|
|
||||||
--max-time 15 \
|
|
||||||
"$PUBLIC_URL" 2>/dev/null ||
|
|
||||||
true
|
|
||||||
)"
|
|
||||||
|
|
||||||
if printf '%s\n' "$CONTENT" |
|
|
||||||
grep -Fq "\"command_id\": \"$COMMAND_ID\""; then
|
|
||||||
PUBLIC_VISIBLE=true
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
sleep 2
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ "$PUBLIC_VISIBLE" != true ]; then
|
|
||||||
echo 'RESULT=FAIL'
|
|
||||||
echo 'REASON=PUBLIC_RUNTIME_RESULT_NOT_VISIBLE'
|
|
||||||
echo "COMMAND_ID=$COMMAND_ID"
|
|
||||||
echo "LOCAL_RAW_FILE=$RAW_FILE"
|
|
||||||
exit 75
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf '%s\t%s\t%s\t%s\t%s\t%s\n' \
|
|
||||||
"$FINISHED_AT" \
|
|
||||||
"$COMMAND_ID" \
|
|
||||||
"$COMMAND_SHA256" \
|
|
||||||
"$RC" \
|
|
||||||
"$STATUS" \
|
|
||||||
"$COMPONENT" >>"$LEDGER"
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo '===== HOMELAB CHAT RUN COMPLETE ====='
|
|
||||||
echo "COMMAND_ID=$COMMAND_ID"
|
|
||||||
echo "STATUS=$STATUS"
|
|
||||||
echo "RC=$RC"
|
|
||||||
echo 'REFERENCE_REGISTER_CHECK=OK'
|
|
||||||
echo 'ERROR_REGISTER_CHECK=OK'
|
|
||||||
echo "DUPLICATE_FAILED_COMMAND_BLOCKED=$REPEAT_BLOCKED"
|
|
||||||
echo 'GITEA_PUBLICATION=OK'
|
|
||||||
echo "PUBLIC_URL=$PUBLIC_URL"
|
|
||||||
echo "LOCAL_RAW_FILE=$RAW_FILE"
|
|
||||||
echo 'SHELL_SESSION_PRESERVED=yes'
|
|
||||||
|
|
||||||
exit "$RC"
|
|
||||||
=== REFERENCE_PUBLISH_CONTRACT ===
|
|
||||||
1-# Operations
|
|
||||||
2-
|
|
||||||
3-List: homelab-reference list
|
|
||||||
4-Read: homelab-reference get SECTION ID --layer effective
|
|
||||||
5-Add: homelab-reference add SECTION JSON
|
|
||||||
6-Edit: homelab-reference edit SECTION ID --set key=value
|
|
||||||
7-Remove: homelab-reference remove SECTION ID
|
|
||||||
8-Validate: homelab-reference validate
|
|
||||||
9-Merge: homelab-reference merge
|
|
||||||
10-Refresh: homelab-reference-refresh
|
|
||||||
11:Publish: homelab-reference-publish
|
|
||||||
12-
|
|
||||||
13-Immutable runtime history for the exact COMMAND_ID is authoritative. latest.json is not authoritative.
|
|
||||||
5:S=json.loads((R/"manifest.json").read_text())["sections"]
|
|
||||||
34: f=int(json.loads((R/"manifest.json").read_text()).get("freshness_seconds",{}).get(s,3600));z=(t+datetime.timedelta(seconds=f)).isoformat()
|
|
||||||
124: rec={"cluster":[{"id":"cluster-homelab","hostname":socket.gethostname(),"kernel":os.uname().release,"pve_version":pv,"quorum_status":qu}],"nodes":[{**x,"id":"node-"+slug(x.get("node") or x.get("id"))} for x in nodes],"guests":[{"id":"guest-"+slug(x.get("vmid")),"vmid":x.get("vmid"),"name":x.get("name"),"type":x.get("type"),"node":x.get("node"),"status":x.get("status"),"tags":x.get("tags")} for x in guests],"containers":[{"id":"container-"+slug(x.get("vmid")),"vmid":x.get("vmid"),"name":x.get("name"),"node":x.get("node"),"status":x.get("status"),"tags":x.get("tags")} for x in guests if x.get("type")=="lxc"],"services":list(sv.values()),"applications":apps+comp,"networks":[{"id":"network-state","interfaces":addr,"routes":routes}],"dns":[{"id":"resolver-state","resolv_conf":dns}],"domains":[{"id":"domain-"+slug(x),"name":x} for x in sorted(dom)],"certificates":cert,"ingress":ing,"storage":[{**x,"id":"storage-"+slug(x.get("storage") or x.get("id"))} for x in stor],"backups":bk,"monitoring":[x for x in sv.values() if re.search(r"prometheus|grafana|zabbix|uptime|kuma|alertmanager|exporter|health|monitor",x.get("name",""),re.I)],"external_services":list(eps.values()),"dependencies":[{"id":"dependency-"+slug(x["id"]),"from":x["id"],"to":x.get("image"),"type":"container-image"} for x in apps if x.get("image")],"access":ac,"security":[{"id":"reference-security-policy","status":"enforced","secret_values_stored":False,"public_mirror_sanitized":True}]}
|
|
||||||
125: cnt={s:write(s,x,"automatic-reference-collector",t) for s,x in rec.items()};eff={};pd=R/"public"/"effective";pd.mkdir(parents=True,exist_ok=True)
|
|
||||||
128: atom(R/"public"/"index.json",{"schema_version":2,"reference_id":"homelab-cluster-reference-public","generated_at":t.isoformat(),"sections":eff,"secrets_included":False,"private_addresses_included":False})
|
|
||||||
131: st=load("state","current") if False else json.loads((R/"state/current.json").read_text());st.update({"schema_version":2,"status":"AUTO_REFRESH_READY","updated_at":t.isoformat(),"last_snapshot":str(snap),"observed_counts":cnt,"effective_counts":eff,"public_index":str(R/"public/index.json"),"collector":str(pathlib.Path(__file__))});atom(R/"state/current.json",st)
|
|
||||||
132: print("REFERENCE_REFRESH=PASS");print("OBSERVED_RECORDS="+str(sum(cnt.values())));print("EFFECTIVE_RECORDS="+str(sum(eff.values())));print("PUBLIC_MIRROR="+str(R/"public"))
|
|
||||||
REFERENCE_CHECK=OK
|
REFERENCE_CHECK=OK
|
||||||
ERROR_REGISTER_CHECK=OK
|
ERROR_REGISTER_CHECK=OK
|
||||||
SECRET_PRINTED=NO
|
SECRET_PRINTED=NO
|
||||||
PRIVATE_ADDRESS_PRINTED=NO
|
PRIVATE_ADDRESS_PRINTED=NO
|
||||||
PUBLISHER_SOURCE_EXTRACTION=COMPLETE
|
PUBLISHER_TARGET_CONTRACT=COMPLETE
|
||||||
|
|
||||||
OUTPUT_END
|
OUTPUT_END
|
||||||
CHAT_OUTPUT_END
|
CHAT_OUTPUT_END
|
||||||
|
|||||||
Reference in New Issue
Block a user