mirror of
https://github.com/open-cluster-management-io/ocm.git
synced 2026-05-17 06:37:48 +00:00
158 lines
4.1 KiB
Go
158 lines
4.1 KiB
Go
package util
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/onsi/ginkgo"
|
|
|
|
"github.com/openshift/library-go/pkg/operator/events"
|
|
corev1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"k8s.io/client-go/rest"
|
|
"k8s.io/client-go/tools/clientcmd"
|
|
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
|
|
|
|
workapiv1 "github.com/open-cluster-management/api/work/v1"
|
|
)
|
|
|
|
func HaveCondition(conditions []workapiv1.StatusCondition, expectedType string, expectedStatus metav1.ConditionStatus) bool {
|
|
found := false
|
|
for _, condition := range conditions {
|
|
if condition.Type != expectedType {
|
|
continue
|
|
}
|
|
found = true
|
|
|
|
if condition.Status != expectedStatus {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
return found
|
|
}
|
|
|
|
func HaveManifestCondition(conditions []workapiv1.ManifestCondition, expectedType string, expectedStatuses []metav1.ConditionStatus) bool {
|
|
if len(conditions) != len(expectedStatuses) {
|
|
return false
|
|
}
|
|
|
|
for index, condition := range conditions {
|
|
expectedStatus := expectedStatuses[index]
|
|
if expectedStatus == "" {
|
|
continue
|
|
}
|
|
|
|
if ok := HaveCondition(condition.Conditions, expectedType, expectedStatus); !ok {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
func NewManifestWork(namespace, name string, manifests []workapiv1.Manifest) *workapiv1.ManifestWork {
|
|
work := &workapiv1.ManifestWork{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Namespace: namespace,
|
|
},
|
|
Spec: workapiv1.ManifestWorkSpec{
|
|
Workload: workapiv1.ManifestsTemplate{
|
|
Manifests: manifests,
|
|
},
|
|
},
|
|
}
|
|
|
|
if name != "" {
|
|
work.Name = name
|
|
} else {
|
|
work.GenerateName = "work-"
|
|
}
|
|
|
|
return work
|
|
}
|
|
|
|
func NewConfigmap(namespace, name string, data map[string]string) *corev1.ConfigMap {
|
|
cm := &corev1.ConfigMap{
|
|
TypeMeta: metav1.TypeMeta{
|
|
Kind: "ConfigMap",
|
|
APIVersion: "v1",
|
|
},
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Namespace: namespace,
|
|
Name: name,
|
|
},
|
|
Data: data,
|
|
}
|
|
|
|
return cm
|
|
}
|
|
|
|
func ToManifest(object runtime.Object) workapiv1.Manifest {
|
|
manifest := workapiv1.Manifest{}
|
|
manifest.Object = object
|
|
return manifest
|
|
}
|
|
|
|
func CreateKubeconfigFile(clientConfig *rest.Config, filename string) error {
|
|
// Build kubeconfig.
|
|
kubeconfig := clientcmdapi.Config{
|
|
Clusters: map[string]*clientcmdapi.Cluster{"default-cluster": {
|
|
Server: clientConfig.Host,
|
|
InsecureSkipTLSVerify: clientConfig.Insecure,
|
|
CertificateAuthorityData: clientConfig.CAData,
|
|
}},
|
|
AuthInfos: map[string]*clientcmdapi.AuthInfo{"default-auth": {
|
|
ClientCertificate: clientConfig.CertFile,
|
|
ClientCertificateData: clientConfig.CertData,
|
|
ClientKey: clientConfig.KeyFile,
|
|
ClientKeyData: clientConfig.KeyData,
|
|
}},
|
|
Contexts: map[string]*clientcmdapi.Context{"default-context": {
|
|
Cluster: "default-cluster",
|
|
AuthInfo: "default-auth",
|
|
Namespace: "configuration",
|
|
}},
|
|
CurrentContext: "default-context",
|
|
}
|
|
|
|
return clientcmd.WriteToFile(kubeconfig, filename)
|
|
}
|
|
|
|
func NewIntegrationTestEventRecorder(componet string) events.Recorder {
|
|
return &IntegrationTestEventRecorder{component: componet}
|
|
}
|
|
|
|
type IntegrationTestEventRecorder struct {
|
|
component string
|
|
}
|
|
|
|
func (r *IntegrationTestEventRecorder) ComponentName() string {
|
|
return r.component
|
|
}
|
|
|
|
func (r *IntegrationTestEventRecorder) ForComponent(c string) events.Recorder {
|
|
return &IntegrationTestEventRecorder{component: c}
|
|
}
|
|
|
|
func (r *IntegrationTestEventRecorder) WithComponentSuffix(suffix string) events.Recorder {
|
|
return r.ForComponent(fmt.Sprintf("%s-%s", r.ComponentName(), suffix))
|
|
}
|
|
|
|
func (r *IntegrationTestEventRecorder) Event(reason, message string) {
|
|
fmt.Fprintf(ginkgo.GinkgoWriter, "Event: [%s] %v: %v \n", r.component, reason, message)
|
|
}
|
|
|
|
func (r *IntegrationTestEventRecorder) Eventf(reason, messageFmt string, args ...interface{}) {
|
|
r.Event(reason, fmt.Sprintf(messageFmt, args...))
|
|
}
|
|
|
|
func (r *IntegrationTestEventRecorder) Warning(reason, message string) {
|
|
fmt.Fprintf(ginkgo.GinkgoWriter, "Warning: [%s] %v: %v \n", r.component, reason, message)
|
|
}
|
|
|
|
func (r *IntegrationTestEventRecorder) Warningf(reason, messageFmt string, args ...interface{}) {
|
|
r.Warning(reason, fmt.Sprintf(messageFmt, args...))
|
|
}
|