{
  "repo": "tidbcloud/extension-provider-gcp",
  "binary": "gardener-extension-provider-gcp",
  "binary_path": "cmd/gardener-extension-provider-gcp/main.go",
  "surface_kind": "worker_service",
  "type": "worker_service",
  "services": [
    {
      "name": "BackupBucketController",
      "type": "kubernetes_controller",
      "description": "Manages GCS buckets for etcd backups",
      "methods": [
        {
          "name": "Reconcile",
          "name_key": "BackupBucketController.Reconcile",
          "description": "Reconcile BackupBucket resources"
        },
        {
          "name": "Delete",
          "name_key": "BackupBucketController.Delete",
          "description": "Delete BackupBucket resources"
        }
      ],
      "reconcile_methods": [
        {
          "name": "Reconcile",
          "trigger": "BackupBucket CRD create/update events",
          "input": "extensionsv1alpha1.BackupBucket",
          "output": "error"
        },
        {
          "name": "Delete",
          "trigger": "BackupBucket CRD delete events",
          "input": "extensionsv1alpha1.BackupBucket",
          "output": "error"
        }
      ]
    },
    {
      "name": "BackupEntryController",
      "type": "kubernetes_controller",
      "description": "Manages GCS bucket objects for backup entries",
      "methods": [
        {
          "name": "GetETCDSecretData",
          "name_key": "BackupEntryController.GetETCDSecretData",
          "description": "Read ETCD secret data during BackupEntry reconciliation"
        },
        {
          "name": "Delete",
          "name_key": "BackupEntryController.Delete",
          "description": "Delete BackupEntry resources"
        }
      ],
      "reconcile_methods": [
        {
          "name": "GetETCDSecretData",
          "trigger": "BackupEntry CRD reconcile",
          "input": "extensionsv1alpha1.BackupEntry",
          "output": "map[string][]byte, error"
        },
        {
          "name": "Delete",
          "trigger": "BackupEntry CRD delete events",
          "input": "extensionsv1alpha1.BackupEntry",
          "output": "error"
        }
      ]
    },
    {
      "name": "ControlPlaneController",
      "type": "kubernetes_controller",
      "description": "Manages cloud-controller-manager and CSI driver deployments",
      "methods": [
        {
          "name": "GetConfigChartValues",
          "name_key": "ControlPlaneController.GetConfigChartValues",
          "description": "Build config chart values"
        },
        {
          "name": "GetControlPlaneChartValues",
          "name_key": "ControlPlaneController.GetControlPlaneChartValues",
          "description": "Build control plane chart values"
        },
        {
          "name": "GetControlPlaneShootChartValues",
          "name_key": "ControlPlaneController.GetControlPlaneShootChartValues",
          "description": "Build control plane shoot chart values"
        },
        {
          "name": "GetStorageClassesChartValues",
          "name_key": "ControlPlaneController.GetStorageClassesChartValues",
          "description": "Build storage classes chart values"
        }
      ],
      "reconcile_methods": [
        {
          "name": "GetConfigChartValues",
          "trigger": "ControlPlane CRD reconcile",
          "input": "extensionsv1alpha1.ControlPlane",
          "output": "map[string]interface{}, error"
        },
        {
          "name": "GetControlPlaneChartValues",
          "trigger": "ControlPlane CRD reconcile",
          "input": "extensionsv1alpha1.ControlPlane",
          "output": "map[string]interface{}, error"
        },
        {
          "name": "GetControlPlaneShootChartValues",
          "trigger": "ControlPlane CRD reconcile",
          "input": "extensionsv1alpha1.ControlPlane",
          "output": "map[string]interface{}, error"
        },
        {
          "name": "GetStorageClassesChartValues",
          "trigger": "ControlPlane CRD reconcile",
          "input": "extensionsv1alpha1.ControlPlane",
          "output": "map[string]interface{}, error"
        }
      ]
    },
    {
      "name": "CSIMigrationController",
      "type": "kubernetes_controller",
      "description": "Handles CSI migration from in-tree to CSI driver",
      "methods": [
        {
          "name": "Reconcile",
          "name_key": "CSIMigrationController.Reconcile",
          "description": "Handle CSI migration reconciliation"
        }
      ],
      "reconcile_methods": [
        {
          "name": "Reconcile",
          "trigger": "CSIMigration CRD events",
          "input": "CSIMigration resources",
          "output": "error"
        }
      ]
    },
    {
      "name": "InfrastructureController",
      "type": "kubernetes_controller",
      "description": "Manages GCP infrastructure using Terraform (VPC, Subnets, NAT, etc.)",
      "methods": [
        {
          "name": "Reconcile",
          "name_key": "InfrastructureController.Reconcile",
          "description": "Reconcile infrastructure resources"
        },
        {
          "name": "Delete",
          "name_key": "InfrastructureController.Delete",
          "description": "Delete infrastructure resources"
        }
      ],
      "reconcile_methods": [
        {
          "name": "Reconcile",
          "trigger": "Infrastructure CRD create/update events",
          "input": "extensionsv1alpha1.Infrastructure",
          "output": "error"
        },
        {
          "name": "Delete",
          "trigger": "Infrastructure CRD delete events",
          "input": "extensionsv1alpha1.Infrastructure",
          "output": "error"
        }
      ]
    },
    {
      "name": "WorkerController",
      "type": "kubernetes_controller",
      "description": "Manages machine deployments for GCP worker nodes",
      "methods": [
        {
          "name": "DeployMachineClasses",
          "name_key": "WorkerController.DeployMachineClasses",
          "description": "Deploy machine classes for worker nodes"
        },
        {
          "name": "GenerateMachineDeployments",
          "name_key": "WorkerController.GenerateMachineDeployments",
          "description": "Generate machine deployments for worker nodes"
        },
        {
          "name": "GetMachineControllerManagerChartValues",
          "name_key": "WorkerController.GetMachineControllerManagerChartValues",
          "description": "Build machine controller manager chart values"
        },
        {
          "name": "GetMachineControllerManagerShootChartValues",
          "name_key": "WorkerController.GetMachineControllerManagerShootChartValues",
          "description": "Build shoot-specific machine controller manager chart values"
        },
        {
          "name": "GetMachineImages",
          "name_key": "WorkerController.GetMachineImages",
          "description": "Resolve machine images for worker reconciliation"
        }
      ],
      "reconcile_methods": [
        {
          "name": "DeployMachineClasses",
          "trigger": "Worker CRD reconcile",
          "input": "extensionsv1alpha1.Worker",
          "output": "error"
        },
        {
          "name": "GenerateMachineDeployments",
          "trigger": "Worker CRD reconcile",
          "input": "extensionsv1alpha1.Worker",
          "output": "worker.MachineDeployments, error"
        },
        {
          "name": "GetMachineControllerManagerChartValues",
          "trigger": "Worker CRD reconcile",
          "input": "context.Context",
          "output": "map[string]interface{}, error"
        },
        {
          "name": "GetMachineControllerManagerShootChartValues",
          "trigger": "Worker CRD reconcile",
          "input": "context.Context",
          "output": "map[string]interface{}, error"
        },
        {
          "name": "GetMachineImages",
          "trigger": "Worker CRD reconcile",
          "input": "context.Context",
          "output": "runtime.Object, error"
        }
      ]
    },
    {
      "name": "HealthCheckController",
      "type": "kubernetes_controller",
      "description": "Monitors health of deployed components",
      "methods": [
        {
          "name": "RegisterHealthChecks",
          "name_key": "HealthCheckController.RegisterHealthChecks",
          "description": "Register health checks on startup"
        }
      ],
      "reconcile_methods": [
        {
          "name": "RegisterHealthChecks",
          "trigger": "Health check registration on startup",
          "input": "ControlPlane, Worker CRDs",
          "output": "error"
        }
      ]
    },
    {
      "name": "ControlPlaneWebhook",
      "type": "kubernetes_webhook",
      "description": "Mutating webhook for control plane components",
      "webhook_path": "/webhooks/controlplane",
      "methods": [
        {
          "name": "EnsureKubeAPIServerDeployment",
          "name_key": "ControlPlaneWebhook.EnsureKubeAPIServerDeployment",
          "http_method": "POST",
          "path": "/webhooks/controlplane",
          "input": "admission.Request",
          "output": "admission.Response"
        },
        {
          "name": "EnsureKubeControllerManagerDeployment",
          "name_key": "ControlPlaneWebhook.EnsureKubeControllerManagerDeployment",
          "http_method": "POST",
          "path": "/webhooks/controlplane",
          "input": "admission.Request",
          "output": "admission.Response"
        },
        {
          "name": "EnsureKubeSchedulerDeployment",
          "name_key": "ControlPlaneWebhook.EnsureKubeSchedulerDeployment",
          "http_method": "POST",
          "path": "/webhooks/controlplane",
          "input": "admission.Request",
          "output": "admission.Response"
        },
        {
          "name": "EnsureKubeletServiceUnitOptions",
          "name_key": "ControlPlaneWebhook.EnsureKubeletServiceUnitOptions",
          "http_method": "POST",
          "path": "/webhooks/controlplane",
          "input": "admission.Request",
          "output": "admission.Response"
        },
        {
          "name": "EnsureKubeletConfiguration",
          "name_key": "ControlPlaneWebhook.EnsureKubeletConfiguration",
          "http_method": "POST",
          "path": "/webhooks/controlplane",
          "input": "admission.Request",
          "output": "admission.Response"
        },
        {
          "name": "EnsureKubernetesGeneralConfiguration",
          "name_key": "ControlPlaneWebhook.EnsureKubernetesGeneralConfiguration",
          "http_method": "POST",
          "path": "/webhooks/controlplane",
          "input": "admission.Request",
          "output": "admission.Response"
        }
      ]
    },
    {
      "name": "ControlPlaneExposureWebhook",
      "type": "kubernetes_webhook",
      "description": "Mutating webhook for control plane exposure and etcd configuration",
      "webhook_path": "/webhooks/controlplaneexposure",
      "methods": [
        {
          "name": "EnsureKubeAPIServerDeployment",
          "name_key": "ControlPlaneExposureWebhook.EnsureKubeAPIServerDeployment",
          "http_method": "POST",
          "path": "/webhooks/controlplaneexposure",
          "input": "admission.Request",
          "output": "admission.Response"
        },
        {
          "name": "EnsureETCD",
          "name_key": "ControlPlaneExposureWebhook.EnsureETCD",
          "http_method": "POST",
          "path": "/webhooks/controlplaneexposure",
          "input": "admission.Request",
          "output": "admission.Response"
        }
      ]
    }
  ],
  "extensions": {
    "notes": [
      "Gardener extension provider for GCP and controller manager for managing GCP infrastructure."
    ]
  }
}
