Skip to content

Commit 22b3a28

Browse files
authored
Merge pull request #408 from Fedosin/plugin_upgrade_plan
✨ Implement "upgrade plan" support
2 parents c57f03f + 7e6e7eb commit 22b3a28

File tree

6 files changed

+519
-150
lines changed

6 files changed

+519
-150
lines changed

cmd/plugin/cmd/init.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,6 @@ type initOptions struct {
5959

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

6764
var initOpts = &initOptions{}

cmd/plugin/cmd/init_test.go

Lines changed: 0 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package cmd
1919
import (
2020
"context"
2121
"fmt"
22-
"os"
2322
"testing"
2423

2524
. "github.com/onsi/gomega"
@@ -29,9 +28,7 @@ import (
2928
corev1 "k8s.io/api/core/v1"
3029
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3130
"k8s.io/apimachinery/pkg/types"
32-
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
3331
clusterctlv1 "sigs.k8s.io/cluster-api/cmd/clusterctl/api/v1alpha3"
34-
"sigs.k8s.io/cluster-api/util/kubeconfig"
3532

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

377-
func TestDeployCAPIOperator(t *testing.T) {
378-
g := NewWithT(t)
379-
380-
envCluster := &clusterv1.Cluster{}
381-
envCluster.Name = "test-cluster"
382-
383-
kubeconfigRaw := kubeconfig.FromEnvTestConfig(env.GetConfig(), envCluster)
384-
385-
tempDir := os.TempDir()
386-
387-
kubeconfigFile, err := os.CreateTemp(tempDir, "kubeconfig")
388-
g.Expect(err).NotTo(HaveOccurred())
389-
390-
defer func() {
391-
if err := os.Remove(kubeconfigFile.Name()); err != nil {
392-
t.Error(err)
393-
}
394-
}()
395-
396-
_, err = kubeconfigFile.Write(kubeconfigRaw)
397-
g.Expect(err).NotTo(HaveOccurred())
398-
399-
tests := []struct {
400-
name string
401-
opts *initOptions
402-
wantedVersion string
403-
wantErr bool
404-
}{
405-
{
406-
name: "with version",
407-
wantedVersion: "v0.7.0",
408-
wantErr: false,
409-
opts: &initOptions{
410-
kubeconfig: kubeconfigFile.Name(),
411-
kubeconfigContext: "@test-cluster",
412-
operatorVersion: "v0.7.0",
413-
},
414-
},
415-
{
416-
name: "incorrect version",
417-
wantErr: true,
418-
opts: &initOptions{
419-
kubeconfig: kubeconfigFile.Name(),
420-
kubeconfigContext: "@test-cluster",
421-
operatorVersion: "v1000000",
422-
},
423-
},
424-
}
425-
for _, tt := range tests {
426-
t.Run(tt.name, func(t *testing.T) {
427-
g := NewWithT(t)
428-
429-
ctx, cancel := context.WithTimeout(context.Background(), waitLong)
430-
431-
defer cancel()
432-
433-
resources := []ctrlclient.Object{}
434-
435-
deployment := generateCAPIOperatorDeployment("capi-operator-controller-manager", "capi-operator-system")
436-
437-
err := deployCAPIOperator(ctx, tt.opts)
438-
439-
if tt.wantErr {
440-
g.Expect(err).To(HaveOccurred())
441-
442-
return
443-
} else {
444-
g.Expect(err).NotTo(HaveOccurred())
445-
}
446-
447-
resources = append(resources, deployment)
448-
449-
g.Eventually(func() (bool, error) {
450-
err := env.Get(ctx, ctrlclient.ObjectKeyFromObject(deployment), deployment)
451-
if err != nil {
452-
return false, err
453-
}
454-
455-
return deployment != nil, nil
456-
}, waitShort).Should(BeTrue())
457-
458-
g.Expect(deployment.Spec.Template.Spec.Containers).NotTo(BeEmpty())
459-
460-
if tt.wantedVersion != "" {
461-
g.Expect(deployment.Spec.Template.Spec.Containers[0].Image).To(HaveSuffix(tt.wantedVersion))
462-
} else {
463-
g.Expect(deployment.Spec.Template.Spec.Containers[0].Image).To(HaveSuffix(tt.opts.operatorVersion))
464-
}
465-
466-
g.Expect(env.CleanupAndWait(ctx, resources...)).To(Succeed())
467-
})
468-
}
469-
}
470-
471374
func generateGenericProvider(providerType clusterctlv1.ProviderType, name, namespace, version, configSecretName, configSecretNamespace string) genericprovider.GenericProvider {
472375
genericProvider := NewGenericProvider(providerType)
473376

cmd/plugin/cmd/upgrade.go

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,9 @@ func init() {
4040

4141
func sortUpgradeItems(plan upgradePlan) {
4242
sort.Slice(plan.Providers, func(i, j int) bool {
43-
return plan.Providers[i].GetType() < plan.Providers[j].GetType() ||
44-
(plan.Providers[i].GetType() == plan.Providers[j].GetType() && plan.Providers[i].GetName() < plan.Providers[j].GetName()) ||
45-
(plan.Providers[i].GetType() == plan.Providers[j].GetType() && plan.Providers[i].GetName() == plan.Providers[j].GetName() && plan.Providers[i].GetNamespace() < plan.Providers[j].GetNamespace())
46-
})
47-
}
48-
49-
func sortUpgradePlans(upgradePlans []upgradePlan) {
50-
sort.Slice(upgradePlans, func(i, j int) bool {
51-
return upgradePlans[i].Contract < upgradePlans[j].Contract
43+
return plan.Providers[i].Type < plan.Providers[j].Type ||
44+
(plan.Providers[i].Type == plan.Providers[j].Type && plan.Providers[i].Name < plan.Providers[j].Name) ||
45+
(plan.Providers[i].Type == plan.Providers[j].Type && plan.Providers[i].Name == plan.Providers[j].Name && plan.Providers[i].Namespace < plan.Providers[j].Namespace)
5246
})
5347
}
5448

0 commit comments

Comments
 (0)