تخطَّ إلى المحتوى

المرحلة 4 — إزالة التهيئة

تقوم المرحلة 4 بإزالة جميع الكائنات التي تم إنشاؤها خلال التمرين بترتيب عكسي لتبعياتها. تتطلب هذه المرحلة تأكيداً صريحاً من الإنسان قبل تنفيذ أي عمليات تدميرية.

احذف الكائنات بـ ترتيب إنشاء عكسي — احذف الكائنات التي تعتمد على كائنات أخرى أولاً:

  1. النطاقات المُخففة — احذف جميع النطاقات المُخففة لـ CSD التي تم إنشاؤها في المرحلة 3
  2. موازن تحميل HTTPS (${F5XC_LB_NAME}-https) — تجريده إلى هيكل عظمي (الحفاظ على شهادة Let’s Encrypt)؛ حذف كامل إذا كانت NAMESPACE_CREATED=true أو عند طلب صريح
  3. موازن تحميل HTTP (${F5XC_LB_NAME}-http) — يعتمد على مجموعة المصدر
  4. مجموعة المصدر — تعتمد على الفحص الصحي (إذا تم إنشاؤه)
  5. تنظيف منطقة DNS — يحتفظ هيكل HTTPS LB العظمي بسجلات A المُدارة وسجلات ACME الخاصة به (هذا مطلوب — يحافظ على صلاحية الشهادة). تُنظَّف السجلات المُدارة لـ HTTP LB تلقائياً عند الحذف. تحتاج السجلات اليدوية في default_rr_set_group إلى تنظيف يدوي عبر PUT
  6. الفحص الصحي — فقط إذا تم إنشاؤه في المرحلة 1 الخطوة 1
  7. النطاق المحمي — احذف تسجيل النطاق المحمي لـ CSD
  8. مساحة الأسماء — فقط إذا تم إنشاؤها خلال المرحلة 1 الخطوة 0 (NAMESPACE_CREATED=true)

إذا تم تنفيذ المرحلة 3، احذف جميع النطاقات المُخففة قبل إزالة كائنات البنية التحتية. يُنشئ المحاكاة القياسية 6 نطاقات مُخففة:

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

التحقق: أدرج النطاقات المُخففة للتأكد من أن العدد هو 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 على ما إذا كانت مساحة الأسماء قد تم إنشاؤها خلال جلسة العرض التوضيحي هذه (متغير NAMESPACE_CREATED من المرحلة 1 الخطوة 0):

  • NAMESPACE_CREATED=false (مساحة أسماء موجودة مسبقاً) — تجريده إلى حالة هيكل عظمي، مع الحفاظ على شهادة Let’s Encrypt لإعادة الاستخدام
  • NAMESPACE_CREATED=true (مساحة الأسماء تم إنشاؤها أثناء العرض التوضيحي) — حذف كامل، نظراً لأن مساحة الأسماء نفسها ستُحذف ولا يمكن الحفاظ على الشهادة

المسار أ: التجريد إلى هيكل عظمي (مساحة الأسماء الموجودة مسبقاً)

Section titled “المسار أ: التجريد إلى هيكل عظمي (مساحة الأسماء الموجودة مسبقاً)”

عندما تكون مساحة الأسماء موجودة مسبقاً، جرّد موازن تحميل HTTPS إلى حالة هيكل عظمي — أزل مرجع مجموعة المصدر وتهيئة CSD مع الحفاظ على ربط النطاق وإعدادات https_auto_cert وشهادة Let’s Encrypt. يتجنب هذا تشغيل طلب شهادة جديد في تشغيل العرض التوضيحي التالي (تفرض Let’s Encrypt حداً يبلغ 5 شهادات مكررة لكل مجموعة معرّفات مطابقة تماماً كل 7 أيام).

الخطوة 1 — احصل على تهيئة موازن تحميل HTTPS الحالية:

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")

الخطوة 2 — التجريد إلى هيكل عظمي عبر jq وإعادة 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 بالمواصفة بأكملها (النطاقات، وhttps_auto_cert، وadvertise_on_public_default_vip، وجميع علامات الميزات المعطلة) مع إزالة client_side_defense (يُستبدل بـ disable_client_side_defense: {}) وتفريغ default_route_pools إلى مصفوفة فارغة. تبقى الشهادة وربط DNS سليمَين.

التحقق من أن موازن تحميل HTTPS أصبح هيكلاً عظمياً الآن:

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).

المسار ب: الحذف الكامل (مساحة الأسماء تم إنشاؤها أثناء العرض التوضيحي)

Section titled “المسار ب: الحذف الكامل (مساحة الأسماء تم إنشاؤها أثناء العرض التوضيحي)”

عندما تم إنشاء مساحة الأسماء خلال جلسة العرض التوضيحي هذه، يجب حذف موازن تحميل HTTPS بالكامل — الحفاظ على الهيكل العظمي غير ضروري لأن مساحة الأسماء نفسها ستُزال في نهاية إزالة التهيئة.

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 الأساسي:

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 على اسم المجموعة. إذا لا يزال الكائن يظهر في القائمة بعد أن أعاد 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 على اسم الفحص الصحي. إذا لا يزال الكائن يظهر في القائمة بعد أن أعاد DELETE 200، انتظر 30 ثانية وتحقق مرة أخرى. إذا كان لا يزال موجوداً بعد الفحص الثاني، أبلغ المشغّل.

احذف تسجيل النطاق المحمي لـ CSD. النطاق المحمي محدود بنطاق المستأجر (وليس بنطاق مساحة الأسماء)، لكنه كائن تهيئة CSD مرتبط بهذا النشر — وليس بنية تحتية مشتركة مثل منطقة DNS.

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"

التحقق: أدرج النطاقات المحمية للتأكد من أن النطاق لم يعد مسجلاً:

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)'

حذف مساحة الأسماء (مشروط)

Section titled “حذف مساحة الأسماء (مشروط)”

تعمل هذه الخطوة فقط إذا تم إنشاء مساحة الأسماء خلال المرحلة 1 الخطوة 0 (NAMESPACE_CREATED=true). إذا كانت مساحة الأسماء موجودة مسبقاً (NAMESPACE_CREATED=false)، تخطَّ هذه الخطوة بالكامل — مساحة الأسماء بنية تحتية مشتركة يجب ألا تُحذف.

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

التحقق: أكّد أن مساحة الأسماء لم تعد موجودة:

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

المتوقع: 404 إذا كانت NAMESPACE_CREATED=true، و200 إذا كانت NAMESPACE_CREATED=false.

الكائنحالة الحذفحالة التحقق
النطاقات المُخففة (6)جميعها 200 (فارغة \{\}) أو تم تخطيها إذا لم تُنفَّذ المرحلة 3العدد 0 (أو 1 وهمي) — ناجح
موازن تحميل HTTPS (-https)200 (PUT هيكل عظمي) أو 200 (حذف كامل إذا NAMESPACE_CREATED=true)تم التحقق من الهيكل العظمي أو غير موجود في القائمة — ناجح
موازن تحميل HTTP (-http)200 (فارغ \{\})غير موجود في القائمة — ناجح
مجموعة المصدر200 (فارغة \{\})غير موجودة في القائمة — ناجح
الفحص الصحي200 (فارغ \{\}) أو تم تخطيهغير موجود في القائمة — ناجح
النطاق المحمي200 (فارغ \{\})غير موجود في القائمة — ناجح
منطقة DNSلم تُحذف (بنية تحتية مشتركة)المنطقة لا تزال موجودة — ناجح
مساحة الأسماء200 (حذف متتالي) إذا NAMESPACE_CREATED=true، تم تخطيها في الحالات الأخرى404 إذا حُذفت، 200 إذا تم الحفاظ عليها — ناجح

اكتملت إزالة التهيئة. عندما كانت مساحة الأسماء موجودة مسبقاً (NAMESPACE_CREATED=false)، تمت إزالة جميع كائنات النشر باستثناء هيكل موازن تحميل HTTPS العظمي، الذي يحافظ على شهادة Let’s Encrypt وربط النطاق لتشغيل العرض التوضيحي التالي. عندما تم إنشاء مساحة الأسماء خلال العرض التوضيحي (NAMESPACE_CREATED=true)، تم حذف جميع الكائنات بما فيها موازن تحميل HTTPS ومساحة الأسماء بالكامل. تبقى منطقة DNS وسجلاتها غير المُدارة سليمة في كلتا الحالتين.