इसे छोड़कर कंटेंट पर जाएं

चरण 4 — टियरडाउन

चरण 4 रिवर्स डिपेंडेंसी क्रम में अभ्यास के दौरान बनाए गए सभी ऑब्जेक्ट हटाता है। इस चरण के लिए किसी भी विनाशकारी ऑपरेशन से पहले स्पष्ट मानवीय पुष्टि आवश्यक है।

ऑब्जेक्ट को रिवर्स निर्माण क्रम में हटाएं — पहले उन ऑब्जेक्ट को हटाएं जो अन्य ऑब्जेक्ट पर निर्भर हैं:

  1. Mitigated Domains — चरण 3 में बनाए गए सभी CSD mitigated domains हटाएं
  2. HTTPS Load Balancer (${F5XC_LB_NAME}-https) — skeleton में बदलें (Let’s Encrypt certificate सुरक्षित रखें); NAMESPACE_CREATED=true होने पर या स्पष्ट अनुरोध पर पूर्ण DELETE करें
  3. HTTP Load Balancer (${F5XC_LB_NAME}-http) — Origin Pool पर निर्भर है
  4. Origin Pool — Healthcheck पर निर्भर है (यदि बनाया गया हो)
  5. DNS zone सफाई — HTTPS LB skeleton अपने managed A और ACME रिकॉर्ड बनाए रखता है (यह वांछित है — यह certificate को वैध रखता है)। HTTP LB के managed रिकॉर्ड हटाने पर स्वतः साफ हो जाते हैं। default_rr_set_group में manual रिकॉर्ड को PUT के माध्यम से manual सफाई की आवश्यकता है
  6. Healthcheck — केवल तभी यदि चरण 1 Step 1 में बनाया गया हो
  7. Protected Domain — CSD protected domain पंजीकरण हटाएं
  8. Namespace — केवल तभी यदि चरण 1 Step 0 के दौरान बनाया गया हो (NAMESPACE_CREATED=true)

यदि चरण 3 निष्पादित किया गया था, तो इन्फ्रास्ट्रक्चर ऑब्जेक्ट हटाने से पहले सभी mitigated domains हटाएं। मानक सिमुलेशन 6 mitigated domains बनाता है:

Terminal window
for domain in cdn.jsdelivr.net esm.sh unpkg.com ga.jspm.io httpbin.org jsonplaceholder.typicode.com; do
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains/$domain"
done

सत्यापन: यह पुष्टि करने के लिए mitigated domains की सूची बनाएं कि संख्या 0 है (या 1 — नीचे नोट देखें):

Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \
| jq '{count: (.items | length)}'

HTTPS LB टियरडाउन का व्यवहार इस बात पर निर्भर करता है कि namespace इस डेमो सत्र के दौरान बनाया गया था या नहीं (चरण 1 Step 0 से NAMESPACE_CREATED वेरिएबल):

  • NAMESPACE_CREATED=false (पूर्व-मौजूद namespace) — skeleton स्थिति में बदलें, पुनः उपयोग के लिए Let’s Encrypt certificate सुरक्षित रखें
  • NAMESPACE_CREATED=true (डेमो के दौरान बनाया गया namespace) — पूर्ण DELETE, क्योंकि namespace स्वयं हटाया जाएगा और certificate संरक्षित नहीं की जा सकती

पथ A: Skeleton में बदलें (पूर्व-मौजूद Namespace)

Section titled “पथ A: Skeleton में बदलें (पूर्व-मौजूद Namespace)”

जब namespace पूर्व-मौजूद हो, HTTPS LB को skeleton स्थिति में बदलें — domain binding, https_auto_cert सेटिंग्स और Let’s Encrypt certificate को सुरक्षित रखते हुए origin pool संदर्भ और CSD कॉन्फ़िगरेशन हटाएं। यह अगले डेमो रन पर नई certificate अनुरोध को ट्रिगर करने से बचाता है (Let’s Encrypt प्रति 7 दिनों में प्रति exact identifier set 5 duplicate certificates की सीमा लागू करता है)।

Step 1 — वर्तमान HTTPS LB config GET करें:

Terminal window
HTTPS_LB_JSON=$(curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https")

Step 2 — jq के माध्यम से skeleton में बदलें और वापस PUT करें:

Terminal window
echo "$HTTPS_LB_JSON" | jq '{
metadata: .metadata,
spec: (.spec | del(.client_side_defense) | .disable_client_side_defense = {} | .default_route_pools = [])
}' | curl -s -X PUT \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
-H "Content-Type: application/json" \
-d @- \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https" \
| jq .

jq फ़िल्टर संपूर्ण spec (domains, https_auto_cert, advertise_on_public_default_vip, और सभी disabled feature flags) को सुरक्षित रखता है जबकि client_side_defense हटाता है (disable_client_side_defense: {} से प्रतिस्थापित) और default_route_pools को एक खाली array में साफ करता है। Certificate और DNS bindings बरकरार रहती हैं।

सत्यापन करें कि HTTPS LB अब skeleton है:

Terminal window
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https" \
| jq '{
name: .metadata.name,
domains: .spec.domains,
has_origin_pools: ((.spec.default_route_pools // []) | length > 0),
has_csd: (.spec.client_side_defense != null),
cert_state: .spec.cert_state
}'

अपेक्षित: has_origin_pools: false, has_csd: false, domains अभी भी भरे हुए, cert_state अपरिवर्तित (उदा., CertificateValid)।

पथ B: पूर्ण Delete (डेमो के दौरान बनाया गया Namespace)

Section titled “पथ B: पूर्ण Delete (डेमो के दौरान बनाया गया Namespace)”

जब namespace इस डेमो सत्र के दौरान बनाया गया था, HTTPS LB को पूरी तरह हटाया जाना चाहिए — skeleton संरक्षण अनावश्यक है क्योंकि namespace स्वयं टियरडाउन के अंत में हटाया जाएगा।

Terminal window
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https"

सत्यापन: GET /api/config/namespaces/\{namespace\}/http_loadbalancers में ${F5XC_LB_NAME}-https नहीं होना चाहिए।

प्राथमिक HTTP LB हटाएं:

Terminal window
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http"

सत्यापन: GET /api/config/namespaces/\{namespace\}/http_loadbalancers में ${F5XC_LB_NAME}-http नहीं होना चाहिए। यदि DELETE 200 लौटाने के बाद भी ऑब्जेक्ट सूची में दिखता है, तो 30 सेकंड प्रतीक्षा करें और एक बार फिर जाँचें। दूसरी जाँच के बाद भी उपस्थित होने पर ऑपरेटर को रिपोर्ट करें — आगे न बढ़ें।

Terminal window
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/origin_pools/xF5XC_ORIGIN_POOLx"

सत्यापन: GET /api/config/namespaces/\{namespace\}/origin_pools में pool का नाम नहीं होना चाहिए। यदि DELETE 200 लौटाने के बाद भी ऑब्जेक्ट सूची में दिखता है, तो 30 सेकंड प्रतीक्षा करें और एक बार फिर जाँचें। दूसरी जाँच के बाद भी उपस्थित होने पर ऑपरेटर को रिपोर्ट करें।

Terminal window
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/healthchecks/xF5XC_HC_NAMEx"

सत्यापन: GET /api/config/namespaces/\{namespace\}/healthchecks में healthcheck का नाम नहीं होना चाहिए। यदि DELETE 200 लौटाने के बाद भी ऑब्जेक्ट सूची में दिखता है, तो 30 सेकंड प्रतीक्षा करें और एक बार फिर जाँचें। दूसरी जाँच के बाद भी उपस्थित होने पर ऑपरेटर को रिपोर्ट करें।

CSD protected domain पंजीकरण हटाएं। Protected domain tenant-scoped है (namespace-scoped नहीं), लेकिन यह एक CSD कॉन्फ़िगरेशन ऑब्जेक्ट है जो इस डिप्लॉयमेंट से जुड़ा है — DNS zone जैसा साझा इन्फ्रास्ट्रक्चर नहीं।

Terminal window
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains/xF5XC_ROOT_DOMAINx"

सत्यापन: यह पुष्टि करने के लिए protected domains की सूची बनाएं कि domain अब पंजीकृत नहीं है:

Terminal window
curl -s -X GET \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains" \
| jq '.items // [] | map(.metadata.name)'

Namespace हटाएं (सशर्त)

Section titled “Namespace हटाएं (सशर्त)”

यह चरण केवल तभी चलता है जब namespace चरण 1 Step 0 के दौरान बनाया गया था (NAMESPACE_CREATED=true)। यदि namespace पूर्व-मौजूद था (NAMESPACE_CREATED=false), तो इस चरण को पूरी तरह छोड़ें — namespace साझा इन्फ्रास्ट्रक्चर है जिसे हटाया नहीं जाना चाहिए।

Terminal window
if [ "$NAMESPACE_CREATED" = "true" ]; then
curl -s -X POST \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
-H "Content-Type: application/json" \
-d '{"name": "xF5XC_NAMESPACEx"}' \
"xF5XC_API_URLx/api/web/namespaces/xF5XC_NAMESPACEx/cascade_delete" | jq .
fi

सत्यापन: यह पुष्टि करें कि namespace अब मौजूद नहीं है:

Terminal window
curl -s -o /dev/null -w '%\{http_code\}' \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/web/namespaces/xF5XC_NAMESPACEx"

अपेक्षित: NAMESPACE_CREATED=true होने पर 404, NAMESPACE_CREATED=false होने पर 200

चरण 4 साक्ष्य सारांश

Section titled “चरण 4 साक्ष्य सारांश”
ऑब्जेक्टDelete स्थितिसत्यापन स्थिति
Mitigated Domains (6)सभी 200 (empty \{\}) या छोड़ा गया यदि चरण 3 नहीं चलासंख्या 0 (या 1 phantom) — PASS
HTTPS Load Balancer (-https)200 (skeleton PUT) या 200 (पूर्ण DELETE यदि NAMESPACE_CREATED=true)Skeleton सत्यापित या सूची में नहीं — PASS
HTTP Load Balancer (-http)200 (empty \{\})सूची में नहीं — PASS
Origin Pool200 (empty \{\})सूची में नहीं — PASS
Healthcheck200 (empty \{\}) या छोड़ा गयासूची में नहीं — PASS
Protected Domain200 (empty \{\})सूची में नहीं — PASS
DNS zoneहटाया नहीं गया (साझा infra)Zone अभी भी मौजूद है — PASS
Namespace200 (cascade delete) यदि NAMESPACE_CREATED=true, अन्यथा छोड़ा गयाहटाए जाने पर 404, सुरक्षित रखने पर 200 — PASS

टियरडाउन पूर्ण। जब namespace पूर्व-मौजूद था (NAMESPACE_CREATED=false), तो HTTPS LB skeleton को छोड़कर सभी डिप्लॉयमेंट ऑब्जेक्ट हटा दिए गए हैं, जो अगले डेमो रन के लिए Let’s Encrypt certificate और domain binding को सुरक्षित रखता है। जब namespace डेमो के दौरान बनाया गया था (NAMESPACE_CREATED=true), तो HTTPS LB और namespace सहित सभी ऑब्जेक्ट पूरी तरह हटा दिए गए हैं। DNS zone और उसके non-managed रिकॉर्ड दोनों मामलों में बरकरार रहते हैं।