Skip to content

موفر Cockpit Terraform (Cockpit Terraform Provider)

يمكّنك موفر Cockpit Terraform من إدارة موارد Cockpit الخاصة بك باستخدام البنية التحتية كرمز (Infrastructure as Code - IaC). يعمل Cockpit كلوحة تحكم مركزية لبيئات التلخيص المتعددة لـ Vapor، ويسمح لك هذا الموفر بأتمتة توفير وإدارة دورة حياة المضيفين، والأجهزة الافتراضية، وعناقيد Kubernetes، ومستودعات التخزين، والمحولات الشبكية.

صفحة سجل الموفر متاحة في Terraform Registry - awanio/cockpit.

المتطلبات

  • Terraform >= 1.0
  • Go >= 1.25 (مطلوب فقط لبناء الموفر من المصدر)

إعداد الموفر

لاستخدام الموفر، أعلن عنه في تكوين Terraform الخاص بك. يتطلب الموفر بيانات اعتماد من حساب خدمة Cockpit (معرف العميل Client ID وسر العميل Client Secret) وعنوان URL لنقطة نهاية Cockpit API.

إعداد المخطط (Schema Configuration)

hcl
terraform {
  required_providers {
    cockpit = {
      source  = "awanio/cockpit"
      version = "~> 1.0.0" # Adjust to the desired version
    }
  }
}

provider "cockpit" {
  host          = "http://localhost:7771/api/v1"
  client_id     = "your-service-account-client-id"
  client_secret = "your-service-account-client-secret"
}

متغيرات البيئة

يمكن أيضًا تمرير معلمات التكوين باستخدام متغيرات البيئة. هذه هي الطريقة الموصى بها لتجنب كتابة بيانات الاعتماد الحساسة في ملفات HCL.

  • COCKPIT_HOST — عنوان URL الأساسي لـ Cockpit API (على سبيل المثال http://localhost:7771/api/v1).
  • COCKPIT_CLIENT_ID — معرف العميل (Client ID) لحساب الخدمة.
  • COCKPIT_CLIENT_SECRET — سر العميل (Client Secret) لحساب الخدمة.

الموارد (Resources)

cockpit_host

يدير تسجيل خادم Vapor الفيزيائي المضيف واتصاله داخل منسق Cockpit.

مثال على الاستخدام

hcl
resource "cockpit_host" "example" {
  address   = "10.0.0.15"
  port      = 7770
  api_token = "vapor-api-token-here"
  parent_id = "datacenter-or-cluster-uuid"
}

مرجع الوسائط (Argument Reference)

  • address (String, Required) — عنوان IP أو اسم النطاق المؤهل بالكامل (FQDN) لمضيف Vapor.
  • port (Number, Optional) — المنفذ الذي تستمع عليه خدمة Vapor API. الافتراضي 7770.
  • api_token (String, Required, Sensitive) — رمز API المستخدَم للمصادقة مع مضيف Vapor.
  • parent_id (String, Required) — المعرف الفريد (UUID) لكيان المخزون Datacenter أو Cluster الذي يُوضع فيه المضيف.

cockpit_virtual_machine

يدير دورة حياة الجهاز الافتراضي في منسق Cockpit.

مثال على الاستخدام

hcl
resource "cockpit_virtual_machine" "example" {
  host_id   = "host-uuid-here"
  name      = "terraform-vm"
  memory    = 2048
  vcpus     = 2
  autostart = true

  os = {
    type    = "linux"
    variant = "ubuntu22.04"
  }

  storage = {
    disks = [
      {
        size = 20
        pool = "default"
      }
    ]
  }

  networks = [
    {
      type   = "network"
      source = "default"
    }
  ]
}

مرجع الوسائط (Argument Reference)

  • host_id (String, Required) — المعرف الفريد (UUID) لمضيف Vapor حيث سيعمل الجهاز الافتراضي.
  • name (String, Required) — اسم الجهاز الافتراضي.
  • memory (Number, Required) — حجم الذاكرة المخصصة بالميجابايت (MB).
  • vcpus (Number, Required) — عدد أنوية المعالج الافتراضية (vCPU) المخصصة للجهاز.
  • cluster_id (String, Optional) — المعرف الفريد (UUID) للعنقود المستهدف لجدولة الجهاز الافتراضي.
  • datacenter_id (String, Optional) — المعرف الفريد (UUID) لمركز البيانات المستهدف.
  • os (Block, Optional) — معلمات إعداد نظام التشغيل. يحتوي على:
    • type (String) — نوع نظام التشغيل (مثل linux أو windows).
    • variant (String) — التوزيعة المحددة لنظام التشغيل (مثل ubuntu22.04).
  • storage (Block, Optional) — معلمات إعداد التخزين. يحتوي على:
    • disks (List of Blocks) — قائمة بإعدادات الأقراص. كتل الأقراص تحتوي على:
      • size (Number) — حجم القرص بالجيكابايت (GB).
      • pool (String) — اسم مجمع التخزين حيث سيتم توفير القرص.
  • networks (Block List, Optional) — واجهات الشبكة المراد توصيلها بالجهاز الافتراضي. كل كتلة شبكة تحتوي على:
    • type (String) — نوع الواجهة (مثل network).
    • source (String) — اسم شبكة المصدر أو الجسر.
  • autostart (Boolean, Optional) — ما إذا كان سيتم تشغيل الجهاز الافتراضي تلقائيًا عند إقلاع المضيف. الافتراضي false.

cockpit_kubernetes_cluster

يدير عنقود Kubernetes المُوفر عبر خدمة Cockpit Auto-Provisioner.

مثال على الاستخدام

hcl
resource "cockpit_kubernetes_cluster" "k8s" {
  name           = "k8s-prod"
  version        = "v1.36.1+k3s1"
  network_id     = "network-switch-uuid"
  ssh_public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ..."
  image_path     = "/var/lib/libvirt/images/ubuntu-k8s-template.qcow2"

  control_plane = {
    cpu             = 2
    memory_mb       = 2048
    storage_pool_id = "default"
    storage_gb      = 20
    desired_count   = 1
  }

  workers = {
    cpu             = 2
    memory_mb       = 2048
    storage_pool_id = "default"
    storage_gb      = 20
    desired_count   = 3
  }

  csi_tiers = {
    local_path_enabled = true
    longhorn_enabled   = false
  }
}

مرجع الوسائط (Argument Reference)

  • name (String, Required) — اسم عنقود Kubernetes.
  • version (String, Required) — علامة إصدار K3s Kubernetes المستهدفة (مثل v1.36.1+k3s1).
  • network_id (String, Required) — المعرف الفريد (UUID) لمحول الشبكة حيث تتصل عقد العنقود.
  • ssh_public_key (String, Required) — مفتاح SSH العام المحقون في عقد العنقود للوصول الإداري.
  • image_path (String, Optional) — مسار قالب نظام التشغيل أو الصورة الأساسية المستخدمة لتوفير العقد.
  • control_plane (Block, Required) — مواصفات العقدة للوحة التحكم (Control plane). تحتوي على:
    • cpu (Number) — أنوية المعالج لكل عقدة من لوحة التحكم.
    • memory_mb (Number) — الذاكرة بالميجابايت لكل عقدة من لوحة التحكم.
    • storage_pool_id (String) — معرف مجمع التخزين لأقراص نظام التشغيل الخاصة بالعقد.
    • storage_gb (Number) — حجم القرص بالجيكابايت.
    • desired_count (Number) — عدد عقد لوحة التحكم (يجب أن يكون رقمًا فرديًا للتوفر العالي، مثل 1، 3، 5).
  • workers (Block, Required) — مواصفات العقدة لعقد العمل (Worker nodes). تحتوي على:
    • cpu (Number) — أنوية المعالج لكل عقدة عمل.
    • memory_mb (Number) — الذاكرة بالميجابايت لكل عقدة عمل.
    • storage_pool_id (String) — معرف مجمع التخزين لأقراص نظام التشغيل الخاصة بالعقد.
    • storage_gb (Number) — حجم القرص بالجيكابايت.
    • desired_count (Number) — العدد المطلوب لعقد العمل.
  • csi_tiers (Block, Optional) — إعدادات تكامل التخزين لواجهة تخزين الحاويات في Kubernetes (CSI). تحتوي على:
    • local_path_enabled (Boolean) — تمكين أو تعطيل برنامج تشغيل المسار المحلي local path CSI driver.
    • longhorn_enabled (Boolean) — تمكين أو تعطيل برنامج تشغيل التخزين الكتلي الموزع Longhorn.

cockpit_datastore

يدير مستودع تخزين (مجمع تخزين Storage pool) على مضيف Vapor.

مثال على الاستخدام

hcl
resource "cockpit_datastore" "example" {
  name      = "nfs-images"
  host_id   = "host-uuid-here"
  type      = "netfs"
  path      = "/var/lib/libvirt/images/nfs-images"
  source    = "10.0.0.5:/exports/images"
  autostart = true
  scope     = "shared"
}

مرجع الوسائط (Argument Reference)

  • name (String, Required) — اسم مجمع التخزين أو مستودع التخزين.
  • host_id (String, Required) — المعرف الفريد (UUID) لمضيف Vapor حيث تم إعداد مستودع التخزين.
  • type (String, Required) — نوع مجمع التخزين (مثل dir أو netfs أو logical أو fs).
  • path (String, Optional) — مسار التثبيت أو الدليل المستهدف في نظام الملفات المحلي للمجمع.
  • source (String, Optional) — مسار المصدر أو معرف التصدير (مثل سلسلة تصدير NFS البعيدة).
  • target (String, Optional) — معرف التخزين أو المسار المستهدف.
  • autostart (Boolean, Optional) — تشغيل مجمع التخزين تلقائيًا عند إقلاع نظام المضيف. الافتراضي true.
  • scope (String, Optional) — النطاق المنطقي لمستودع التخزين. القيم المدعومة هي local أو shared. الافتراضي local.

cockpit_switch

يدير محول شبكة (شبكة افتراضية) على مضيف Vapor.

مثال على الاستخدام

hcl
resource "cockpit_switch" "example" {
  name       = "vnet-nat-example"
  host_id    = "host-uuid-here"
  mode       = "nat"
  ip_address = "192.168.100.1"
  netmask    = "255.255.255.0"
  dhcp_start = "192.168.100.10"
  dhcp_end   = "192.168.100.100"
  autostart  = true
}

مرجع الوسائط (Argument Reference)

  • name (String, Required) — اسم محول الشبكة الافتراضي.
  • host_id (String, Required) — المعرف الفريد (UUID) لمضيف Vapor المستهدف.
  • mode (String, Required) — وضع إعادة توجيه الشبكة. القيم المدعومة هي nat وbridge وroute وisolated.
  • bridge (String, Optional) — اسم جهاز واجهة الجسر الخاصة بالمضيف.
  • ip_address (String, Optional) — عنوان IP المعين لواجهة الجسر.
  • netmask (String, Optional) — قناع الشبكة الفرعية لشبكة الجسر.
  • dhcp_start (String, Optional) — عنوان IP لربط بداية مجمع تخصيص DHCP.
  • dhcp_end (String, Optional) — عنوان IP لربط نهاية مجمع تخصيص DHCP.
  • autostart (Boolean, Optional) — تشغيل المحول الافتراضي تلقائيًا عند إقلاع المضيف. الافتراضي true.
  • domain (String, Optional) — بادئة اسم نطاق DNS لتعيينها لعملاء DHCP.

البناء البرمجي للتطوير المحلي

للتطوير أو اختبار تعديلات الموفر المخصصة محليًا، يمكنك بناء الثنائي للموفر من المصدر باستخدام الأمر التالي:

bash
go build -o terraform-provider-cockpit