Skip to content

Commit

Permalink
Merge pull request #408 from Fedosin/plugin_upgrade_plan
Browse files Browse the repository at this point in the history
✨ Implement "upgrade plan" support
  • Loading branch information
k8s-ci-robot committed May 6, 2024
2 parents c57f03f + 7e6e7eb commit 22b3a28
Show file tree
Hide file tree
Showing 6 changed files with 519 additions and 150 deletions.
3 changes: 0 additions & 3 deletions cmd/plugin/cmd/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,6 @@ type initOptions struct {

const (
capiOperatorProviderName = "capi-operator"
// We have to specify a version here, because if we set "latest", clusterctl libs will try to fetch metadata.yaml file for the latest
// release and fail since CAPI operator doesn't provide this file.
capiOperatorManifestsURL = "https://github.com/kubernetes-sigs/cluster-api-operator/releases/v0.1.0/operator-components.yaml"
)

var initOpts = &initOptions{}
Expand Down
97 changes: 0 additions & 97 deletions cmd/plugin/cmd/init_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ package cmd
import (
"context"
"fmt"
"os"
"testing"

. "github.com/onsi/gomega"
Expand All @@ -29,9 +28,7 @@ import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
clusterctlv1 "sigs.k8s.io/cluster-api/cmd/clusterctl/api/v1alpha3"
"sigs.k8s.io/cluster-api/util/kubeconfig"

operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
"sigs.k8s.io/cluster-api-operator/internal/controller/genericprovider"
Expand Down Expand Up @@ -374,100 +371,6 @@ func generateCAPIOperatorDeployment(name, namespace string) *appsv1.Deployment {
}
}

func TestDeployCAPIOperator(t *testing.T) {
g := NewWithT(t)

envCluster := &clusterv1.Cluster{}
envCluster.Name = "test-cluster"

kubeconfigRaw := kubeconfig.FromEnvTestConfig(env.GetConfig(), envCluster)

tempDir := os.TempDir()

kubeconfigFile, err := os.CreateTemp(tempDir, "kubeconfig")
g.Expect(err).NotTo(HaveOccurred())

defer func() {
if err := os.Remove(kubeconfigFile.Name()); err != nil {
t.Error(err)
}
}()

_, err = kubeconfigFile.Write(kubeconfigRaw)
g.Expect(err).NotTo(HaveOccurred())

tests := []struct {
name string
opts *initOptions
wantedVersion string
wantErr bool
}{
{
name: "with version",
wantedVersion: "v0.7.0",
wantErr: false,
opts: &initOptions{
kubeconfig: kubeconfigFile.Name(),
kubeconfigContext: "@test-cluster",
operatorVersion: "v0.7.0",
},
},
{
name: "incorrect version",
wantErr: true,
opts: &initOptions{
kubeconfig: kubeconfigFile.Name(),
kubeconfigContext: "@test-cluster",
operatorVersion: "v1000000",
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
g := NewWithT(t)

ctx, cancel := context.WithTimeout(context.Background(), waitLong)

defer cancel()

resources := []ctrlclient.Object{}

deployment := generateCAPIOperatorDeployment("capi-operator-controller-manager", "capi-operator-system")

err := deployCAPIOperator(ctx, tt.opts)

if tt.wantErr {
g.Expect(err).To(HaveOccurred())

return
} else {
g.Expect(err).NotTo(HaveOccurred())
}

resources = append(resources, deployment)

g.Eventually(func() (bool, error) {
err := env.Get(ctx, ctrlclient.ObjectKeyFromObject(deployment), deployment)
if err != nil {
return false, err
}

return deployment != nil, nil
}, waitShort).Should(BeTrue())

g.Expect(deployment.Spec.Template.Spec.Containers).NotTo(BeEmpty())

if tt.wantedVersion != "" {
g.Expect(deployment.Spec.Template.Spec.Containers[0].Image).To(HaveSuffix(tt.wantedVersion))
} else {
g.Expect(deployment.Spec.Template.Spec.Containers[0].Image).To(HaveSuffix(tt.opts.operatorVersion))
}

g.Expect(env.CleanupAndWait(ctx, resources...)).To(Succeed())
})
}
}

func generateGenericProvider(providerType clusterctlv1.ProviderType, name, namespace, version, configSecretName, configSecretNamespace string) genericprovider.GenericProvider {
genericProvider := NewGenericProvider(providerType)

Expand Down
12 changes: 3 additions & 9 deletions cmd/plugin/cmd/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,9 @@ func init() {

func sortUpgradeItems(plan upgradePlan) {
sort.Slice(plan.Providers, func(i, j int) bool {
return plan.Providers[i].GetType() < plan.Providers[j].GetType() ||
(plan.Providers[i].GetType() == plan.Providers[j].GetType() && plan.Providers[i].GetName() < plan.Providers[j].GetName()) ||
(plan.Providers[i].GetType() == plan.Providers[j].GetType() && plan.Providers[i].GetName() == plan.Providers[j].GetName() && plan.Providers[i].GetNamespace() < plan.Providers[j].GetNamespace())
})
}

func sortUpgradePlans(upgradePlans []upgradePlan) {
sort.Slice(upgradePlans, func(i, j int) bool {
return upgradePlans[i].Contract < upgradePlans[j].Contract
return plan.Providers[i].Type < plan.Providers[j].Type ||
(plan.Providers[i].Type == plan.Providers[j].Type && plan.Providers[i].Name < plan.Providers[j].Name) ||
(plan.Providers[i].Type == plan.Providers[j].Type && plan.Providers[i].Name == plan.Providers[j].Name && plan.Providers[i].Namespace < plan.Providers[j].Namespace)
})
}

Expand Down
Loading

0 comments on commit 22b3a28

Please sign in to comment.