Skip to content

Commit e45efe7

Browse files
authored
fix: airgap update command fails to push images with wrong kubeconfig (#1437)
* fix: airgap update command fails to push images with wrong kubeconfig * f
1 parent 3cb4725 commit e45efe7

File tree

4 files changed

+63
-47
lines changed

4 files changed

+63
-47
lines changed

cmd/local-artifact-mirror/serve.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"time"
1414

1515
ecv1beta1 "github.com/replicatedhq/embedded-cluster/kinds/apis/v1beta1"
16+
cmdutil "github.com/replicatedhq/embedded-cluster/pkg/cmd/util"
1617
"github.com/replicatedhq/embedded-cluster/pkg/defaults"
1718
"github.com/urfave/cli/v2"
1819
k8snet "k8s.io/utils/net"
@@ -53,7 +54,7 @@ var serveCommand = &cli.Command{
5354
provider = defaults.NewProvider(c.String("data-dir"))
5455
} else {
5556
var err error
56-
provider, err = defaults.NewProviderFromFilesystem()
57+
provider, err = cmdutil.NewProviderFromFilesystem()
5758
if err != nil {
5859
panic(fmt.Errorf("unable to get provider from filesystem: %w", err))
5960
}

pkg/cmd/provider.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"os"
77

88
ecv1beta1 "github.com/replicatedhq/embedded-cluster/kinds/apis/v1beta1"
9+
cmdutil "github.com/replicatedhq/embedded-cluster/pkg/cmd/util"
910
"github.com/replicatedhq/embedded-cluster/pkg/configutils"
1011
"github.com/replicatedhq/embedded-cluster/pkg/defaults"
1112
"github.com/replicatedhq/embedded-cluster/pkg/kubeutils"
@@ -53,7 +54,7 @@ func discoverBestProvider(ctx context.Context) *defaults.Provider {
5354
}
5455

5556
// Otherwise, fall back to the filesystem
56-
provider, err = defaults.NewProviderFromFilesystem()
57+
provider, err = cmdutil.NewProviderFromFilesystem()
5758
if err == nil {
5859
return provider
5960
}
@@ -79,7 +80,7 @@ func getProviderFromCluster(ctx context.Context) (*defaults.Provider, error) {
7980
return nil, fmt.Errorf("unable to create kube client: %w", err)
8081
}
8182

82-
provider, err := defaults.NewProviderFromCluster(ctx, kcli)
83+
provider, err := cmdutil.NewProviderFromCluster(ctx, kcli)
8384
if err != nil {
8485
return nil, fmt.Errorf("unable to get config from cluster: %w", err)
8586
}

pkg/cmd/util/provider.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package cmd
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"os"
7+
"path/filepath"
8+
9+
ecv1beta1 "github.com/replicatedhq/embedded-cluster/kinds/apis/v1beta1"
10+
"github.com/replicatedhq/embedded-cluster/pkg/defaults"
11+
"github.com/replicatedhq/embedded-cluster/pkg/kubeutils"
12+
"github.com/sirupsen/logrus"
13+
"sigs.k8s.io/controller-runtime/pkg/client"
14+
)
15+
16+
// NewProviderFromCluster discovers the provider from the installation object. If there is no
17+
// runtime config, this is probably a prior version of EC so we will have to fall back to the
18+
// filesystem.
19+
func NewProviderFromCluster(ctx context.Context, kcli client.Client) (*defaults.Provider, error) {
20+
in, err := kubeutils.GetLatestInstallation(ctx, kcli)
21+
if err != nil {
22+
return nil, fmt.Errorf("get latest installation: %w", err)
23+
}
24+
25+
if in.Spec.RuntimeConfig == nil || in.Spec.RuntimeConfig.DataDir == "" {
26+
// If there is no runtime config, this is probably a prior version of EC so we will have to
27+
// fall back to the filesystem.
28+
return NewProviderFromFilesystem()
29+
}
30+
provider := defaults.NewProviderFromRuntimeConfig(in.Spec.RuntimeConfig)
31+
logrus.Debugf("Got runtime config from installation with k0s data dir %s", provider.EmbeddedClusterK0sSubDir())
32+
return provider, nil
33+
}
34+
35+
// NewProviderFromFilesystem returns a new provider from the filesystem. It supports older versions
36+
// of EC that used a different directory for k0s and openebs.
37+
func NewProviderFromFilesystem() (*defaults.Provider, error) {
38+
provider := defaults.NewProvider(ecv1beta1.DefaultDataDir)
39+
// ca.crt is available on both control plane and worker nodes
40+
_, err := os.Stat(filepath.Join(provider.EmbeddedClusterK0sSubDir(), "pki/ca.crt"))
41+
if err == nil {
42+
logrus.Debugf("Got runtime config from filesystem with k0s data dir %s", provider.EmbeddedClusterK0sSubDir())
43+
return provider, nil
44+
}
45+
// Handle versions prior to consolidation of data dirs
46+
provider = defaults.NewProviderFromRuntimeConfig(&ecv1beta1.RuntimeConfigSpec{
47+
DataDir: ecv1beta1.DefaultDataDir,
48+
K0sDataDirOverride: "/var/lib/k0s",
49+
OpenEBSDataDirOverride: "/var/openebs",
50+
})
51+
// ca.crt is available on both control plane and worker nodes
52+
_, err = os.Stat(filepath.Join(provider.EmbeddedClusterK0sSubDir(), "pki/ca.crt"))
53+
if err == nil {
54+
logrus.Debugf("Got runtime config from filesystem with k0s data dir %s", provider.EmbeddedClusterK0sSubDir())
55+
return provider, nil
56+
}
57+
return nil, fmt.Errorf("unable to discover provider from filesystem")
58+
}

pkg/defaults/provider.go

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
package defaults
22

33
import (
4-
"context"
5-
"fmt"
64
"os"
75
"path/filepath"
86

97
ecv1beta1 "github.com/replicatedhq/embedded-cluster/kinds/apis/v1beta1"
10-
"github.com/replicatedhq/embedded-cluster/pkg/kubeutils"
118
"github.com/sirupsen/logrus"
12-
"sigs.k8s.io/controller-runtime/pkg/client"
139
)
1410

1511
// NewProvider returns a new Provider using the provided data dir.
@@ -29,46 +25,6 @@ func NewProviderFromRuntimeConfig(runtimeConfig *ecv1beta1.RuntimeConfigSpec) *P
2925
return obj
3026
}
3127

32-
// NewProviderFromCluster discovers the provider from the installation object. If there is no
33-
// runtime config, this is probably a prior version of EC so we will have to fall back to the
34-
// filesystem.
35-
func NewProviderFromCluster(ctx context.Context, cli client.Client) (*Provider, error) {
36-
in, err := kubeutils.GetLatestInstallation(ctx, cli)
37-
if err != nil {
38-
return nil, fmt.Errorf("get latest installation: %w", err)
39-
}
40-
41-
if in.Spec.RuntimeConfig == nil {
42-
// If there is no runtime config, this is probably a prior version of EC so we will have to
43-
// fall back to the filesystem.
44-
return NewProviderFromFilesystem()
45-
}
46-
return NewProviderFromRuntimeConfig(in.Spec.RuntimeConfig), nil
47-
}
48-
49-
// NewProviderFromFilesystem returns a new provider from the filesystem. It supports older versions
50-
// of EC that used a different directory for k0s and openebs.
51-
func NewProviderFromFilesystem() (*Provider, error) {
52-
provider := NewProvider(ecv1beta1.DefaultDataDir)
53-
// ca.crt is available on both control plane and worker nodes
54-
_, err := os.Stat(filepath.Join(provider.EmbeddedClusterK0sSubDir(), "pki/ca.crt"))
55-
if err == nil {
56-
return provider, nil
57-
}
58-
// Handle versions prior to consolidation of data dirs
59-
provider = NewProviderFromRuntimeConfig(&ecv1beta1.RuntimeConfigSpec{
60-
DataDir: ecv1beta1.DefaultDataDir,
61-
K0sDataDirOverride: "/var/lib/k0s",
62-
OpenEBSDataDirOverride: "/var/openebs",
63-
})
64-
// ca.crt is available on both control plane and worker nodes
65-
_, err = os.Stat(filepath.Join(provider.EmbeddedClusterK0sSubDir(), "pki/ca.crt"))
66-
if err == nil {
67-
return provider, nil
68-
}
69-
return nil, fmt.Errorf("unable to discover provider from filesystem")
70-
}
71-
7228
// Provider is an entity that provides default values used during
7329
// EmbeddedCluster installation.
7430
type Provider struct {

0 commit comments

Comments
 (0)