Skip to content

Commit

Permalink
Fix dryrun tests (#1800)
Browse files Browse the repository at this point in the history
  • Loading branch information
sgalsaleh authored Feb 4, 2025
1 parent ee9e9ac commit 701d703
Show file tree
Hide file tree
Showing 34 changed files with 262 additions and 138 deletions.
4 changes: 2 additions & 2 deletions cmd/buildtools/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func readMetadataFromFile(path string) (*types.ReleaseMetadata, error) {
}

func extractImagesFromHelmExtensions(repos []k0sv1beta1.Repository, charts []embeddedclusterv1beta1.Chart, k8sVersion string) ([]string, error) {
hcli, err := helm.NewHelm(helm.HelmOptions{
hcli, err := helm.NewClient(helm.HelmOptions{
K0sVersion: k8sVersion,
})
if err != nil {
Expand Down Expand Up @@ -116,7 +116,7 @@ func extractImagesFromHelmExtensions(repos []k0sv1beta1.Repository, charts []emb
return images, nil
}

func extractImagesFromChart(hcli *helm.Helm, chart embeddedclusterv1beta1.Chart) ([]string, error) {
func extractImagesFromChart(hcli helm.Client, chart embeddedclusterv1beta1.Chart) ([]string, error) {
values := map[string]interface{}{}
if chart.Values != "" {
err := yaml.Unmarshal([]byte(chart.Values), &values)
Expand Down
4 changes: 2 additions & 2 deletions cmd/buildtools/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -521,12 +521,12 @@ func RunCommand(cmd *exec.Cmd) error {
return cmd.Run()
}

func NewHelm() (*helm.Helm, error) {
func NewHelm() (helm.Client, error) {
sv, err := getK0sVersion()
if err != nil {
return nil, fmt.Errorf("get k0s version: %w", err)
}
return helm.NewHelm(helm.HelmOptions{
return helm.NewClient(helm.HelmOptions{
Writer: logrus.New().Writer(),
K0sVersion: sv.Original(),
})
Expand Down
16 changes: 1 addition & 15 deletions cmd/installer/cli/install2.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ import (
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/wait"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/yaml"
)
Expand Down Expand Up @@ -716,20 +715,7 @@ func createInstallationCRD(ctx context.Context, kcli client.Client) error {
}

// wait for the CRD to be ready
backoff := wait.Backoff{Steps: 600, Duration: 100 * time.Millisecond, Factor: 1.0, Jitter: 0.1}
if err := wait.ExponentialBackoffWithContext(ctx, backoff, func(ctx context.Context) (bool, error) {
newCrd := apiextensionsv1.CustomResourceDefinition{}
err := kcli.Get(ctx, client.ObjectKey{Name: crd.Name}, &newCrd)
if err != nil {
return false, nil // not ready yet
}
for _, cond := range newCrd.Status.Conditions {
if cond.Type == apiextensionsv1.Established && cond.Status == apiextensionsv1.ConditionTrue {
return true, nil
}
}
return false, nil
}); err != nil {
if err := kubeutils.WaitForCRDToBeReady(ctx, kcli, crd.Name); err != nil {
return fmt.Errorf("wait for installation CRD to be ready: %w", err)
}
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/installer/cli/restore2.go
Original file line number Diff line number Diff line change
Expand Up @@ -530,7 +530,7 @@ func runRestoreEnableAdminConsoleHA(ctx context.Context, flags Install2CmdFlags,
airgapChartsPath = runtimeconfig.EmbeddedClusterChartsSubDir()
}

hcli, err := helm.NewHelm(helm.HelmOptions{
hcli, err := helm.NewClient(helm.HelmOptions{
KubeConfig: runtimeconfig.PathToKubeConfig(),
K0sVersion: versions.K0sVersion,
AirgapPath: airgapChartsPath,
Expand Down
2 changes: 1 addition & 1 deletion pkg/addons2/adminconsole/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

func (a *AdminConsole) Install(ctx context.Context, kcli client.Client, hcli *helm.Helm, overrides []string, writer *spinner.MessageWriter) error {
func (a *AdminConsole) Install(ctx context.Context, kcli client.Client, hcli helm.Client, overrides []string, writer *spinner.MessageWriter) error {
// some resources are not part of the helm chart and need to be created before the chart is installed
// TODO: move this to the helm chart

Expand Down
2 changes: 1 addition & 1 deletion pkg/addons2/adminconsole/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

func (a *AdminConsole) Upgrade(ctx context.Context, kcli client.Client, hcli *helm.Helm, overrides []string) error {
func (a *AdminConsole) Upgrade(ctx context.Context, kcli client.Client, hcli helm.Client, overrides []string) error {
exists, err := hcli.ReleaseExists(ctx, namespace, releaseName)
if err != nil {
return errors.Wrap(err, "check if release exists")
Expand Down
2 changes: 1 addition & 1 deletion pkg/addons2/embeddedclusteroperator/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

func (e *EmbeddedClusterOperator) Install(ctx context.Context, kcli client.Client, hcli *helm.Helm, overrides []string, writer *spinner.MessageWriter) error {
func (e *EmbeddedClusterOperator) Install(ctx context.Context, kcli client.Client, hcli helm.Client, overrides []string, writer *spinner.MessageWriter) error {
values, err := e.GenerateHelmValues(ctx, kcli, overrides)
if err != nil {
return errors.Wrap(err, "generate helm values")
Expand Down
2 changes: 1 addition & 1 deletion pkg/addons2/embeddedclusteroperator/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

func (e *EmbeddedClusterOperator) Upgrade(ctx context.Context, kcli client.Client, hcli *helm.Helm, overrides []string) error {
func (e *EmbeddedClusterOperator) Upgrade(ctx context.Context, kcli client.Client, hcli helm.Client, overrides []string) error {
exists, err := hcli.ReleaseExists(ctx, namespace, releaseName)
if err != nil {
return errors.Wrap(err, "check if release exists")
Expand Down
4 changes: 2 additions & 2 deletions pkg/addons2/highavailability.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func EnableHA(ctx context.Context, kcli client.Client, isAirgap bool, serviceCID
airgapChartsPath = runtimeconfig.EmbeddedClusterChartsSubDir()
}

hcli, err := helm.NewHelm(helm.HelmOptions{
hcli, err := helm.NewClient(helm.HelmOptions{
KubeConfig: runtimeconfig.PathToKubeConfig(),
K0sVersion: versions.K0sVersion,
AirgapPath: airgapChartsPath,
Expand Down Expand Up @@ -115,7 +115,7 @@ func EnableHA(ctx context.Context, kcli client.Client, isAirgap bool, serviceCID
}

// EnableAdminConsoleHA enables high availability for the admin console.
func EnableAdminConsoleHA(ctx context.Context, kcli client.Client, hcli *helm.Helm, isAirgap bool, serviceCIDR string, proxy *ecv1beta1.ProxySpec, cfgspec *ecv1beta1.ConfigSpec) error {
func EnableAdminConsoleHA(ctx context.Context, kcli client.Client, hcli helm.Client, isAirgap bool, serviceCIDR string, proxy *ecv1beta1.ProxySpec, cfgspec *ecv1beta1.ConfigSpec) error {
// TODO (@salah): add support for end user overrides
ac := &adminconsole.AdminConsole{
IsAirgap: isAirgap,
Expand Down
2 changes: 1 addition & 1 deletion pkg/addons2/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func Install(ctx context.Context, opts InstallOptions) error {
airgapChartsPath = runtimeconfig.EmbeddedClusterChartsSubDir()
}

hcli, err := helm.NewHelm(helm.HelmOptions{
hcli, err := helm.NewClient(helm.HelmOptions{
KubeConfig: runtimeconfig.PathToKubeConfig(),
K0sVersion: versions.K0sVersion,
AirgapPath: airgapChartsPath,
Expand Down
2 changes: 1 addition & 1 deletion pkg/addons2/openebs/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

func (o *OpenEBS) Install(ctx context.Context, kcli client.Client, hcli *helm.Helm, overrides []string, writer *spinner.MessageWriter) error {
func (o *OpenEBS) Install(ctx context.Context, kcli client.Client, hcli helm.Client, overrides []string, writer *spinner.MessageWriter) error {
values, err := o.GenerateHelmValues(ctx, kcli, overrides)
if err != nil {
return errors.Wrap(err, "generate helm values")
Expand Down
2 changes: 1 addition & 1 deletion pkg/addons2/openebs/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

func (o *OpenEBS) Upgrade(ctx context.Context, kcli client.Client, hcli *helm.Helm, overrides []string) error {
func (o *OpenEBS) Upgrade(ctx context.Context, kcli client.Client, hcli helm.Client, overrides []string) error {
exists, err := hcli.ReleaseExists(ctx, namespace, releaseName)
if err != nil {
return errors.Wrap(err, "check if release exists")
Expand Down
2 changes: 1 addition & 1 deletion pkg/addons2/registry/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

func (r *Registry) Install(ctx context.Context, kcli client.Client, hcli *helm.Helm, overrides []string, writer *spinner.MessageWriter) error {
func (r *Registry) Install(ctx context.Context, kcli client.Client, hcli helm.Client, overrides []string, writer *spinner.MessageWriter) error {
registryIP, err := GetRegistryClusterIP(r.ServiceCIDR)
if err != nil {
return errors.Wrap(err, "get registry cluster IP")
Expand Down
2 changes: 1 addition & 1 deletion pkg/addons2/registry/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const (
s3SecretName = "seaweedfs-s3-rw"
)

func (r *Registry) Upgrade(ctx context.Context, kcli client.Client, hcli *helm.Helm, overrides []string) error {
func (r *Registry) Upgrade(ctx context.Context, kcli client.Client, hcli helm.Client, overrides []string) error {
exists, err := hcli.ReleaseExists(ctx, namespace, releaseName)
if err != nil {
return errors.Wrap(err, "check if release exists")
Expand Down
2 changes: 1 addition & 1 deletion pkg/addons2/seaweedfs/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

func (s *SeaweedFS) Install(ctx context.Context, kcli client.Client, hcli *helm.Helm, overrides []string, writer *spinner.MessageWriter) error {
func (s *SeaweedFS) Install(ctx context.Context, kcli client.Client, hcli helm.Client, overrides []string, writer *spinner.MessageWriter) error {
if err := s.createPreRequisites(ctx, kcli); err != nil {
return errors.Wrap(err, "create prerequisites")
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/addons2/seaweedfs/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

func (s *SeaweedFS) Upgrade(ctx context.Context, kcli client.Client, hcli *helm.Helm, overrides []string) error {
func (s *SeaweedFS) Upgrade(ctx context.Context, kcli client.Client, hcli helm.Client, overrides []string) error {
exists, err := hcli.ReleaseExists(ctx, namespace, releaseName)
if err != nil {
return errors.Wrap(err, "check if release exists")
Expand Down
4 changes: 2 additions & 2 deletions pkg/addons2/types/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ type AddOn interface {
ReleaseName() string
Namespace() string
GenerateHelmValues(ctx context.Context, kcli client.Client, overrides []string) (map[string]interface{}, error)
Install(ctx context.Context, kcli client.Client, hcli *helm.Helm, overrides []string, writer *spinner.MessageWriter) error
Upgrade(ctx context.Context, kcli client.Client, hcli *helm.Helm, overrides []string) error
Install(ctx context.Context, kcli client.Client, hcli helm.Client, overrides []string, writer *spinner.MessageWriter) error
Upgrade(ctx context.Context, kcli client.Client, hcli helm.Client, overrides []string) error
}

var _ AddOn = (*adminconsole.AdminConsole)(nil)
Expand Down
4 changes: 2 additions & 2 deletions pkg/addons2/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func Upgrade(ctx context.Context, in *ecv1beta1.Installation, meta *ectypes.Rele
airgapChartsPath = runtimeconfig.EmbeddedClusterChartsSubDir()
}

hcli, err := helm.NewHelm(helm.HelmOptions{
hcli, err := helm.NewClient(helm.HelmOptions{
K0sVersion: versions.K0sVersion,
AirgapPath: airgapChartsPath,
})
Expand Down Expand Up @@ -120,7 +120,7 @@ func getAddOnsForUpgrade(in *ecv1beta1.Installation, meta *ectypes.ReleaseMetada
return addOns, nil
}

func upgradeAddOn(ctx context.Context, hcli *helm.Helm, kcli client.Client, in *ecv1beta1.Installation, addon types.AddOn) (finalErr error) {
func upgradeAddOn(ctx context.Context, hcli helm.Client, kcli client.Client, in *ecv1beta1.Installation, addon types.AddOn) (finalErr error) {
// check if we already processed this addon
conditionStatus, err := k8sutil.GetConditionStatus(ctx, kcli, in.Name, conditionName(addon))
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion pkg/addons2/velero/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

func (v *Velero) Install(ctx context.Context, kcli client.Client, hcli *helm.Helm, overrides []string, writer *spinner.MessageWriter) error {
func (v *Velero) Install(ctx context.Context, kcli client.Client, hcli helm.Client, overrides []string, writer *spinner.MessageWriter) error {
if err := v.createPreRequisites(ctx, kcli); err != nil {
return errors.Wrap(err, "create prerequisites")
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/addons2/velero/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

func (v *Velero) Upgrade(ctx context.Context, kcli client.Client, hcli *helm.Helm, overrides []string) error {
func (v *Velero) Upgrade(ctx context.Context, kcli client.Client, hcli helm.Client, overrides []string) error {
exists, err := hcli.ReleaseExists(ctx, namespace, releaseName)
if err != nil {
return errors.Wrap(err, "check if release exists")
Expand Down
17 changes: 11 additions & 6 deletions pkg/dryrun/dryrun.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"sync"

"github.com/replicatedhq/embedded-cluster/pkg/dryrun/types"
"github.com/replicatedhq/embedded-cluster/pkg/helm"
"github.com/replicatedhq/embedded-cluster/pkg/helpers"
"github.com/replicatedhq/embedded-cluster/pkg/helpers/systemd"
"github.com/replicatedhq/embedded-cluster/pkg/k0s"
Expand All @@ -26,12 +27,13 @@ var (
)

type Client struct {
KubeUtils *KubeUtils
Helpers *Helpers
Systemd *Systemd
Metrics *Sender
K0sClient *K0sClient
Kotsadm *Kotsadm
KubeUtils *KubeUtils
Helpers *Helpers
Systemd *Systemd
Metrics *Sender
K0sClient *K0sClient
HelmClient helm.Client
Kotsadm *Kotsadm
}

func Init(outputFile string, client *Client) {
Expand Down Expand Up @@ -60,6 +62,9 @@ func Init(outputFile string, client *Client) {
if client.Kotsadm == nil {
client.Kotsadm = NewKotsadm()
}
if client.HelmClient != nil {
helm.SetClient(client.HelmClient)
}
kubeutils.Set(client.KubeUtils)
helpers.Set(client.Helpers)
systemd.Set(client.Systemd)
Expand Down
4 changes: 4 additions & 0 deletions pkg/dryrun/kubeutils.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ func (k *KubeUtils) WaitForKubernetes(ctx context.Context, cli client.Client) <-
return errCh
}

func (k *KubeUtils) WaitForCRDToBeReady(ctx context.Context, cli client.Client, name string) error {
return nil
}

func (k *KubeUtils) KubeClient() (client.Client, error) {
return KubeClient()
}
5 changes: 5 additions & 0 deletions pkg/dryrun/types/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
rbacv1 "k8s.io/api/rbac/v1"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
k8scheme "k8s.io/client-go/kubernetes/scheme"
Expand Down Expand Up @@ -193,6 +194,9 @@ func (d *DryRun) KubeClient() (client.Client, error) {
if err := k8scheme.AddToScheme(scheme); err != nil {
return nil, fmt.Errorf("add k8s scheme: %w", err)
}
if err := apiextensionsv1.AddToScheme(scheme); err != nil {
return nil, fmt.Errorf("add apiextensions v1 scheme: %w", err)
}
if err := ecv1beta1.AddToScheme(scheme); err != nil {
return nil, fmt.Errorf("add ec v1beta1 scheme: %w", err)
}
Expand All @@ -207,6 +211,7 @@ func (d *DryRun) KubeClient() (client.Client, error) {
d.kcli = fake.NewClientBuilder().
WithScheme(scheme).
WithObjects(clientObjs...).
WithStatusSubresource(&ecv1beta1.Installation{}).
Build()
}
return d.kcli, nil
Expand Down
2 changes: 1 addition & 1 deletion pkg/extensions/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func Install(ctx context.Context, isAirgap bool) error {
airgapChartsPath = runtimeconfig.EmbeddedClusterChartsSubDir()
}

hcli, err := helm.NewHelm(helm.HelmOptions{
hcli, err := helm.NewClient(helm.HelmOptions{
KubeConfig: runtimeconfig.PathToKubeConfig(),
K0sVersion: versions.K0sVersion,
AirgapPath: airgapChartsPath,
Expand Down
4 changes: 2 additions & 2 deletions pkg/extensions/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ func Upgrade(ctx context.Context, kcli client.Client, prev *ecv1beta1.Installati
airgapChartsPath = runtimeconfig.EmbeddedClusterChartsSubDir()
}

hcli, err := helm.NewHelm(helm.HelmOptions{
hcli, err := helm.NewClient(helm.HelmOptions{
K0sVersion: versions.K0sVersion,
AirgapPath: airgapChartsPath,
})
Expand Down Expand Up @@ -71,7 +71,7 @@ func Upgrade(ctx context.Context, kcli client.Client, prev *ecv1beta1.Installati
return nil
}

func handleExtension(ctx context.Context, hcli *helm.Helm, kcli client.Client, in *ecv1beta1.Installation, ext ecv1beta1.Chart, action string) (finalErr error) {
func handleExtension(ctx context.Context, hcli helm.Client, kcli client.Client, in *ecv1beta1.Installation, ext ecv1beta1.Chart, action string) (finalErr error) {
// check if we already processed this extension
conditionStatus, err := k8sutil.GetConditionStatus(ctx, kcli, in.Name, conditionName(ext))
if err != nil {
Expand Down
8 changes: 4 additions & 4 deletions pkg/extensions/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import (
helmrepo "helm.sh/helm/v3/pkg/repo"
)

func addRepos(hcli *helm.Helm, repos []k0sv1beta1.Repository) error {
func addRepos(hcli helm.Client, repos []k0sv1beta1.Repository) error {
for _, r := range repos {
logrus.Debugf("Adding helm repository %s", r.Name)

Expand All @@ -39,7 +39,7 @@ func addRepos(hcli *helm.Helm, repos []k0sv1beta1.Repository) error {
return nil
}

func install(ctx context.Context, hcli *helm.Helm, ext ecv1beta1.Chart) error {
func install(ctx context.Context, hcli helm.Client, ext ecv1beta1.Chart) error {
var values map[string]interface{}
if err := yaml.Unmarshal([]byte(ext.Values), &values); err != nil {
return errors.Wrap(err, "unmarshal values")
Expand All @@ -60,7 +60,7 @@ func install(ctx context.Context, hcli *helm.Helm, ext ecv1beta1.Chart) error {
return nil
}

func upgrade(ctx context.Context, hcli *helm.Helm, ext ecv1beta1.Chart) error {
func upgrade(ctx context.Context, hcli helm.Client, ext ecv1beta1.Chart) error {
var values map[string]interface{}
if err := yaml.Unmarshal([]byte(ext.Values), &values); err != nil {
return errors.Wrap(err, "unmarshal values")
Expand All @@ -82,7 +82,7 @@ func upgrade(ctx context.Context, hcli *helm.Helm, ext ecv1beta1.Chart) error {
return nil
}

func uninstall(ctx context.Context, hcli *helm.Helm, ext ecv1beta1.Chart) error {
func uninstall(ctx context.Context, hcli helm.Client, ext ecv1beta1.Chart) error {
err := hcli.Uninstall(ctx, helm.UninstallOptions{
ReleaseName: ext.Name,
Namespace: ext.TargetNS,
Expand Down
Loading

0 comments on commit 701d703

Please sign in to comment.