Files
open-cluster-management/test/framework/hub.go
xuezhao 6c4292b1bc Refactor tester to e2e framework. (#565)
Signed-off-by: xuezhaojun <zxue@redhat.com>
2024-07-24 01:31:58 +00:00

96 lines
3.2 KiB
Go

package framework
import (
"context"
"fmt"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/rest"
clientcmd "k8s.io/client-go/tools/clientcmd"
ocmfeature "open-cluster-management.io/api/feature"
"open-cluster-management.io/ocm/pkg/operator/helpers"
)
// Hub represents a hub cluster, it holds:
// * the clients to interact with the hub cluster
// * the metadata of the hub
// * the runtime data of the hub
type Hub struct {
*OCMClients
ClusterManagerName string
ClusterManagerNamespace string
ClusterCfg *rest.Config
}
func NewHub(kubeconfig string) (*Hub, error) {
clusterCfg, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
return nil, err
}
clients, err := NewOCMClients(clusterCfg)
if err != nil {
return nil, err
}
return &Hub{
OCMClients: clients,
// the name of the ClusterManager object is constantly "cluster-manager" at the moment; The same name as deploy/cluster-manager/config/samples
ClusterManagerName: "cluster-manager",
ClusterManagerNamespace: helpers.ClusterManagerDefaultNamespace,
ClusterCfg: clusterCfg,
}, nil
}
func (hub *Hub) CheckHubReady() error {
ctx := context.TODO()
cm, err := hub.GetCluserManager()
if err != nil {
return fmt.Errorf("failed to get cluster manager: %w", err)
}
err = CheckClusterManagerStatus(cm)
if err != nil {
return fmt.Errorf("failed to check cluster manager status: %w", err)
}
// make sure open-cluster-management-hub namespace is created
if _, err := hub.KubeClient.CoreV1().Namespaces().
Get(context.TODO(), hub.ClusterManagerNamespace, metav1.GetOptions{}); err != nil {
return err
}
// make sure deployments are ready
deployments := []string{
fmt.Sprintf("%s-registration-controller", hub.ClusterManagerName),
fmt.Sprintf("%s-registration-webhook", hub.ClusterManagerName),
fmt.Sprintf("%s-work-webhook", hub.ClusterManagerName),
fmt.Sprintf("%s-placement-controller", hub.ClusterManagerName),
}
for _, deployment := range deployments {
if err = CheckDeploymentReady(ctx, hub.KubeClient, hub.ClusterManagerNamespace, deployment); err != nil {
return fmt.Errorf("failed to check deployment %s: %w", deployment, err)
}
}
// if manifestworkreplicaset feature is enabled, check the work controller
if cm.Spec.WorkConfiguration != nil &&
helpers.FeatureGateEnabled(cm.Spec.WorkConfiguration.FeatureGates, ocmfeature.DefaultHubWorkFeatureGates, ocmfeature.ManifestWorkReplicaSet) {
if err = CheckDeploymentReady(ctx, hub.KubeClient, hub.ClusterManagerNamespace, fmt.Sprintf("%s-work-controller", hub.ClusterManagerName)); err != nil {
return fmt.Errorf("failed to check work controller: %w", err)
}
}
// if addonManager feature is enabled, check the addonManager controller
if cm.Spec.AddOnManagerConfiguration != nil &&
helpers.FeatureGateEnabled(cm.Spec.AddOnManagerConfiguration.FeatureGates, ocmfeature.DefaultHubAddonManagerFeatureGates, ocmfeature.AddonManagement) {
if err = CheckDeploymentReady(ctx, hub.KubeClient, hub.ClusterManagerNamespace,
fmt.Sprintf("%s-addon-manager-controller", hub.ClusterManagerName)); err != nil {
return fmt.Errorf("failed to check addon manager controller: %w", err)
}
}
return nil
}