Skip to content

Commit b6380cf

Browse files
committed
Merge remote-tracking branch 'origin/main' into k0s-1-28-9
2 parents 6b4daac + 47a3f1a commit b6380cf

File tree

10 files changed

+180
-28
lines changed

10 files changed

+180
-28
lines changed

.github/actions/e2e/action.yml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,15 @@ runs:
5757
- name: Free up runner disk space
5858
shell: bash
5959
run: |
60+
df -h
61+
sudo docker system prune -af
6062
sudo rm -rf /usr/local/lib/android
6163
sudo rm -rf /opt/hostedtoolcache/CodeQL
6264
sudo rm -rf /opt/hostedtoolcache/Python
65+
sudo rm -rf /usr/share/dotnet
66+
sudo rm -rf /opt/ghc
67+
sudo rm -rf /usr/local/share/boost
68+
df -h
6369
- name: Set AppArmor mode to complain
6470
shell: bash
6571
run: |
@@ -89,6 +95,6 @@ runs:
8995
with:
9096
name: ${{ github.job }}-support-bundle-cluster.tar.gz
9197
path: ./e2e/support-bundle-cluster.tar.gz
92-
# - name: Setup upterm session (ssh)
93-
# uses: lhotari/action-upterm@v1
94-
# if: always()
98+
# - name: Setup upterm session (ssh)
99+
# uses: lhotari/action-upterm@v1
100+
# if: always()

.github/workflows/pull-request.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ jobs:
185185
- TestLocalArtifactMirror
186186
- TestSingleNodeAirgapUpgradeUbuntuJammy
187187
- TestInstallSnapshotFromReplicatedApp
188+
- TestMultiNodeAirgapUpgradeUbuntuJammy
188189
steps:
189190
- name: Checkout
190191
uses: actions/checkout@v4

.github/workflows/release-dev.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ jobs:
138138
- TestLocalArtifactMirror
139139
- TestSingleNodeAirgapUpgradeUbuntuJammy
140140
- TestInstallSnapshotFromReplicatedApp
141+
- TestMultiNodeAirgapUpgradeUbuntuJammy
141142
steps:
142143
- name: Checkout
143144
uses: actions/checkout@v4

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ ARCH := $(shell uname -m)
44
APP_NAME = embedded-cluster
55
ADMIN_CONSOLE_CHART_URL = oci://registry.replicated.com/library
66
ADMIN_CONSOLE_CHART_NAME = admin-console
7-
ADMIN_CONSOLE_CHART_VERSION = 1.108.12
7+
ADMIN_CONSOLE_CHART_VERSION = 1.108.13
88
ADMIN_CONSOLE_IMAGE_OVERRIDE =
99
ADMIN_CONSOLE_MIGRATIONS_IMAGE_OVERRIDE =
1010
EMBEDDED_OPERATOR_CHART_URL = oci://registry.replicated.com/library
1111
EMBEDDED_OPERATOR_CHART_NAME = embedded-cluster-operator
12-
EMBEDDED_OPERATOR_CHART_VERSION = 0.30.0
12+
EMBEDDED_OPERATOR_CHART_VERSION = 0.30.3
1313
EMBEDDED_OPERATOR_UTILS_IMAGE = busybox:1.36.1
1414
EMBEDDED_CLUSTER_OPERATOR_IMAGE_OVERRIDE =
1515
OPENEBS_CHART_URL = https://openebs.github.io/openebs

cmd/embedded-cluster/join.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ var joinCommand = &cli.Command{
181181
if err := airgap.AddInsecureRegistry(jcmd.AirgapRegistryAddress); err != nil {
182182
err := fmt.Errorf("unable to add insecure registry: %w", err)
183183
metrics.ReportJoinFailed(c.Context, jcmd.MetricsBaseURL, jcmd.ClusterID, err)
184+
return err
184185
}
185186
}
186187

e2e/install_test.go

Lines changed: 138 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,144 @@ func TestSingleNodeAirgapUpgradeUbuntuJammy(t *testing.T) {
644644
t.Logf("%s: running airgap update", time.Now().Format(time.RFC3339))
645645
line = []string{"airgap-update.sh"}
646646
if _, _, err := RunCommandOnNode(t, tc, 0, line); err != nil {
647-
t.Fatalf("fail to run kots upstream upgrade: %v", err)
647+
t.Fatalf("fail to run airgap update: %v", err)
648+
}
649+
// remove the airgap bundle after upgrade
650+
line = []string{"rm", "/tmp/upgrade/release.airgap"}
651+
if _, _, err := RunCommandOnNode(t, tc, 0, line); err != nil {
652+
t.Fatalf("fail to remove airgap bundle on node %s: %v", tc.Nodes[0], err)
653+
}
654+
655+
if _, _, err := runTestimTest(t, tc, "deploy-airgap-upgrade"); err != nil {
656+
t.Fatalf("fail to run testim test deploy-airgap-upgrade: %v", err)
657+
}
658+
659+
t.Logf("%s: checking installation state after upgrade", time.Now().Format(time.RFC3339))
660+
line = []string{"check-postupgrade-state.sh"}
661+
if _, _, err := RunCommandOnNode(t, tc, 0, line); err != nil {
662+
t.Fatalf("fail to check postupgrade state: %v", err)
663+
}
664+
665+
t.Logf("%s: test complete", time.Now().Format(time.RFC3339))
666+
}
667+
668+
func TestMultiNodeAirgapUpgradeUbuntuJammy(t *testing.T) {
669+
t.Parallel()
670+
671+
t.Logf("%s: downloading airgap files", time.Now().Format(time.RFC3339))
672+
airgapInstallBundlePath := "/tmp/airgap-install-bundle.tar.gz"
673+
airgapUpgradeBundlePath := "/tmp/airgap-upgrade-bundle.tar.gz"
674+
wg := sync.WaitGroup{}
675+
wg.Add(2)
676+
go func() {
677+
downloadAirgapBundle(t, fmt.Sprintf("appver-%s", os.Getenv("SHORT_SHA")), airgapInstallBundlePath)
678+
wg.Done()
679+
}()
680+
go func() {
681+
downloadAirgapBundle(t, fmt.Sprintf("appver-%s-upgrade", os.Getenv("SHORT_SHA")), airgapUpgradeBundlePath)
682+
wg.Done()
683+
}()
684+
wg.Wait()
685+
686+
tc := cluster.NewTestCluster(&cluster.Input{
687+
T: t,
688+
Nodes: 2,
689+
Image: "ubuntu/jammy",
690+
WithProxy: true,
691+
AirgapInstallBundlePath: airgapInstallBundlePath,
692+
AirgapUpgradeBundlePath: airgapUpgradeBundlePath,
693+
})
694+
defer func() {
695+
if t.Failed() {
696+
generateAndCopySupportBundle(t, tc)
697+
}
698+
tc.Destroy()
699+
}()
700+
701+
// delete airgap bundles once they've been copied to the nodes
702+
if err := os.Remove(airgapInstallBundlePath); err != nil {
703+
t.Logf("failed to remove airgap install bundle: %v", err)
704+
}
705+
if err := os.Remove(airgapUpgradeBundlePath); err != nil {
706+
t.Logf("failed to remove airgap upgrade bundle: %v", err)
707+
}
708+
709+
// upgrade airgap bundle is only needed on the first node
710+
line := []string{"rm", "/tmp/ec-release-upgrade.tgz"}
711+
if _, _, err := RunCommandOnNode(t, tc, 1, line); err != nil {
712+
t.Fatalf("fail to remove upgrade airgap bundle on node %s: %v", tc.Nodes[1], err)
713+
}
714+
715+
t.Logf("%s: preparing embedded cluster airgap files on node 0", time.Now().Format(time.RFC3339))
716+
line = []string{"airgap-prepare.sh"}
717+
if _, _, err := RunCommandOnNode(t, tc, 0, line); err != nil {
718+
t.Fatalf("fail to prepare airgap files on node %s: %v", tc.Nodes[0], err)
719+
}
720+
721+
t.Logf("%s: installing embedded-cluster on node 0", time.Now().Format(time.RFC3339))
722+
line = []string{"single-node-airgap-install.sh"}
723+
if _, _, err := RunCommandOnNode(t, tc, 0, line); err != nil {
724+
t.Fatalf("fail to install embedded-cluster on node %s: %v", tc.Nodes[0], err)
725+
}
726+
// remove the airgap bundle after installation
727+
line = []string{"rm", "/tmp/release.airgap"}
728+
if _, _, err := RunCommandOnNode(t, tc, 0, line); err != nil {
729+
t.Fatalf("fail to remove airgap bundle on node %s: %v", tc.Nodes[0], err)
730+
}
731+
732+
if err := setupTestim(t, tc); err != nil {
733+
t.Fatalf("fail to setup testim: %v", err)
734+
}
735+
if _, _, err := runTestimTest(t, tc, "deploy-kots-application"); err != nil {
736+
t.Fatalf("fail to run testim test deploy-kots-application: %v", err)
737+
}
738+
739+
// generate worker node join command.
740+
t.Logf("%s: generating a new worker token command", time.Now().Format(time.RFC3339))
741+
stdout, stderr, err := runTestimTest(t, tc, "get-join-worker-command")
742+
if err != nil {
743+
t.Fatalf("fail to generate worker join token:\nstdout: %s\nstderr: %s", stdout, stderr)
744+
}
745+
workerCommand, err := findJoinCommandInOutput(stdout)
746+
if err != nil {
747+
t.Fatalf("fail to find the join command in the output: %v", err)
748+
}
749+
t.Log("worker join token command:", workerCommand)
750+
751+
// join the worker node
752+
t.Logf("%s: preparing embedded cluster airgap files on worker node", time.Now().Format(time.RFC3339))
753+
line = []string{"airgap-prepare.sh"}
754+
if _, _, err := RunCommandOnNode(t, tc, 1, line); err != nil {
755+
t.Fatalf("fail to prepare airgap files on worker node: %v", err)
756+
}
757+
t.Logf("%s: joining worker node to the cluster", time.Now().Format(time.RFC3339))
758+
if _, _, err := RunCommandOnNode(t, tc, 1, strings.Split(workerCommand, " ")); err != nil {
759+
t.Fatalf("fail to join worker node to the cluster: %v", err)
760+
}
761+
// remove the airgap bundle after joining
762+
line = []string{"rm", "/tmp/release.airgap"}
763+
if _, _, err := RunCommandOnNode(t, tc, 1, line); err != nil {
764+
t.Fatalf("fail to remove airgap bundle on worker node: %v", err)
765+
}
766+
767+
// wait for the nodes to report as ready.
768+
t.Logf("%s: all nodes joined, waiting for them to be ready", time.Now().Format(time.RFC3339))
769+
stdout, _, err = RunCommandOnNode(t, tc, 0, []string{"wait-for-ready-nodes.sh", "2"})
770+
if err != nil {
771+
t.Fatalf("fail to wait for ready nodes: %v", err)
772+
}
773+
t.Log(stdout)
774+
775+
t.Logf("%s: checking installation state after app deployment", time.Now().Format(time.RFC3339))
776+
line = []string{"check-airgap-installation-state.sh", os.Getenv("SHORT_SHA")}
777+
if _, _, err := RunCommandOnNode(t, tc, 0, line); err != nil {
778+
t.Fatalf("fail to check installation state: %v", err)
779+
}
780+
781+
t.Logf("%s: running airgap update", time.Now().Format(time.RFC3339))
782+
line = []string{"airgap-update.sh"}
783+
if _, _, err := RunCommandOnNode(t, tc, 0, line); err != nil {
784+
t.Fatalf("fail to run airgap update: %v", err)
648785
}
649786
// remove the airgap bundle after upgrade
650787
line = []string{"rm", "/tmp/upgrade/release.airgap"}

e2e/utils.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,5 +123,7 @@ func findJoinCommandInOutput(stdout string) (string, error) {
123123
// trim down the "./" and the "sudo" command as those are not needed. we run as
124124
// root and the embedded-cluster binary is on the PATH.
125125
command := strings.TrimPrefix(r.Command, "sudo ./")
126+
// replace the airgap bundle path (if any) with the local path.
127+
command = strings.ReplaceAll(command, "embedded-cluster.airgap", "/tmp/release.airgap")
126128
return command, nil
127129
}

go.mod

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ require (
1313
github.com/jedib0t/go-pretty v4.3.0+incompatible
1414
github.com/k0sproject/dig v0.2.0
1515
github.com/k0sproject/k0s v1.28.10-0.20240418084644-c99e4b437507
16-
github.com/replicatedhq/embedded-cluster-kinds v1.1.6
17-
github.com/replicatedhq/embedded-cluster-operator v0.27.0
16+
github.com/replicatedhq/embedded-cluster-kinds v1.1.9
17+
github.com/replicatedhq/embedded-cluster-operator v0.30.3
1818
github.com/replicatedhq/embedded-cluster-utils v1.0.0
1919
github.com/replicatedhq/kotskinds v0.0.0-20230724164735-f83482cc9cfe
2020
github.com/replicatedhq/troubleshoot v0.90.0
@@ -28,7 +28,7 @@ require (
2828
k8s.io/api v0.30.0
2929
k8s.io/apimachinery v0.30.0
3030
oras.land/oras-go/v2 v2.5.0
31-
sigs.k8s.io/controller-runtime v0.18.0
31+
sigs.k8s.io/controller-runtime v0.18.1
3232
sigs.k8s.io/yaml v1.4.0
3333
)
3434

@@ -43,9 +43,8 @@ require (
4343
github.com/godbus/dbus/v5 v5.1.0 // indirect
4444
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
4545
github.com/google/go-cmp v0.6.0 // indirect
46-
github.com/google/pprof v0.0.0-20230323073829-e72429f035bd // indirect
4746
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
48-
github.com/ohler55/ojg v1.21.4 // indirect
47+
github.com/ohler55/ojg v1.22.0 // indirect
4948
github.com/opencontainers/go-digest v1.0.0 // indirect
5049
github.com/opencontainers/image-spec v1.1.0 // indirect
5150
github.com/prometheus/client_golang v1.18.0 // indirect

go.sum

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+
7575
github.com/go-openapi/swag v0.22.10 h1:4y86NVn7Z2yYd6pfS4Z+Nyh3aAUL3Nul+LMbhFKy0gA=
7676
github.com/go-openapi/swag v0.22.10/go.mod h1:Cnn8BYtRlx6BNE3DPN86f/xkapGIcLWzh3CLEb4C1jI=
7777
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
78-
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
78+
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
79+
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
7980
github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg=
8081
github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
8182
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
@@ -117,8 +118,8 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
117118
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
118119
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
119120
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
120-
github.com/google/pprof v0.0.0-20230323073829-e72429f035bd h1:r8yyd+DJDmsUhGrRBxH5Pj7KeFK5l+Y3FsgT8keqKtk=
121-
github.com/google/pprof v0.0.0-20230323073829-e72429f035bd/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk=
121+
github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 h1:k7nVchz72niMH6YLQNvHSdIE7iqsQxK1P41mySCvssg=
122+
github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw=
122123
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
123124
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
124125
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -210,14 +211,14 @@ github.com/muhlemmer/gu v0.3.1/go.mod h1:YHtHR+gxM+bKEIIs7Hmi9sPT3ZDUvTN/i88wQpZ
210211
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
211212
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
212213
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
213-
github.com/ohler55/ojg v1.21.4 h1:2iWyz/xExx0XySVIxR9kWFxIdsLNrpWLrKuAcs5aOZU=
214-
github.com/ohler55/ojg v1.21.4/go.mod h1:gQhDVpQLqrmnd2eqGAvJtn+NfKoYJbe/A4Sj3/Vro4o=
214+
github.com/ohler55/ojg v1.22.0 h1:McZObj3cD/Zz/ojzk5Pi5VvgQcagxmT1bVKNzhE5ihI=
215+
github.com/ohler55/ojg v1.22.0/go.mod h1:gQhDVpQLqrmnd2eqGAvJtn+NfKoYJbe/A4Sj3/Vro4o=
215216
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
216217
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
217-
github.com/onsi/ginkgo/v2 v2.17.1 h1:V++EzdbhI4ZV4ev0UTIj0PzhzOcReJFyJaLjtSF55M8=
218-
github.com/onsi/ginkgo/v2 v2.17.1/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs=
219-
github.com/onsi/gomega v1.32.0 h1:JRYU78fJ1LPxlckP6Txi/EYqJvjtMrDC04/MM5XRHPk=
220-
github.com/onsi/gomega v1.32.0/go.mod h1:a4x4gW6Pz2yK1MAmvluYme5lvYTn61afQ2ETw/8n4Lg=
218+
github.com/onsi/ginkgo/v2 v2.17.2 h1:7eMhcy3GimbsA3hEnVKdw/PQM9XN9krpKVXsZdph0/g=
219+
github.com/onsi/ginkgo/v2 v2.17.2/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc=
220+
github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
221+
github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
221222
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
222223
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
223224
github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
@@ -243,10 +244,10 @@ github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lne
243244
github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
244245
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
245246
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
246-
github.com/replicatedhq/embedded-cluster-kinds v1.1.6 h1:eJgXyo981RiNM2thKhXKxs/pq9rD0yqQY6zEZ12WPWM=
247-
github.com/replicatedhq/embedded-cluster-kinds v1.1.6/go.mod h1:tj418fVUIy1xzxKacfoMx0SG4Oy5HF7RYC6Sy1mXgcU=
248-
github.com/replicatedhq/embedded-cluster-operator v0.27.0 h1:Y/Ps7zNu+lLYbkvdHf/AKoexoH1L295OZ8DLI3CXGxI=
249-
github.com/replicatedhq/embedded-cluster-operator v0.27.0/go.mod h1:fia5+2ba2P7pBnEqVRkXpWnlJj8TrXmvjN6hr1equpQ=
247+
github.com/replicatedhq/embedded-cluster-kinds v1.1.9 h1:e0vjOKyEqo0Z3C5LoVNZATw+5AgrLln7IDt6lQ4x+pU=
248+
github.com/replicatedhq/embedded-cluster-kinds v1.1.9/go.mod h1:wVal4dS9YGPKrrsuP3j4AwzG4qtyHCgHip+I+sG5U/s=
249+
github.com/replicatedhq/embedded-cluster-operator v0.30.3 h1:SDnxG/LtAbXmC6Xmz97KXvRkSXv4YKh4OJYb2OPzmeE=
250+
github.com/replicatedhq/embedded-cluster-operator v0.30.3/go.mod h1:6WKT7tDwVUvBTW6eSM4b1xyqk2ZWyi91WSulGO5qzNs=
250251
github.com/replicatedhq/embedded-cluster-utils v1.0.0 h1:Axdni1nYfl5zeOP9g5U79yvN8cRdClyU6hz0wV1Hmdc=
251252
github.com/replicatedhq/embedded-cluster-utils v1.0.0/go.mod h1:4JmMC2CwMCLxq05GEW3XSPPVotqyamAF/omrbB3pH+c=
252253
github.com/replicatedhq/kotskinds v0.0.0-20230724164735-f83482cc9cfe h1:3AJInd06UxzqHmgy8+24CPsT2tYSE0zToJZyuX9q+MA=
@@ -406,8 +407,8 @@ golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roY
406407
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
407408
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
408409
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
409-
golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ=
410-
golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg=
410+
golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY=
411+
golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg=
411412
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
412413
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
413414
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -491,8 +492,8 @@ k8s.io/utils v0.0.0-20231121161247-cf03d44ff3cf h1:iTzha1p7Fi83476ypNSz8nV9iR993
491492
k8s.io/utils v0.0.0-20231121161247-cf03d44ff3cf/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
492493
oras.land/oras-go/v2 v2.5.0 h1:o8Me9kLY74Vp5uw07QXPiitjsw7qNXi8Twd+19Zf02c=
493494
oras.land/oras-go/v2 v2.5.0/go.mod h1:z4eisnLP530vwIOUOJeBIj0aGI0L1C3d53atvCBqZHg=
494-
sigs.k8s.io/controller-runtime v0.18.0 h1:Z7jKuX784TQSUL1TIyeuF7j8KXZ4RtSX0YgtjKcSTME=
495-
sigs.k8s.io/controller-runtime v0.18.0/go.mod h1:tuAt1+wbVsXIT8lPtk5RURxqAnq7xkpv2Mhttslg7Hw=
495+
sigs.k8s.io/controller-runtime v0.18.1 h1:RpWbigmuiylbxOCLy0tGnq1cU1qWPwNIQzoJk+QeJx4=
496+
sigs.k8s.io/controller-runtime v0.18.1/go.mod h1:tuAt1+wbVsXIT8lPtk5RURxqAnq7xkpv2Mhttslg7Hw=
496497
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
497498
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
498499
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=

pkg/airgap/containerd.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ func AddInsecureRegistry(registry string) error {
2424
parentDir := defaults.PathToK0sContainerdConfig()
2525
contents := fmt.Sprintf(registryConfigTemplate, registry, registry, registry)
2626

27+
if err := os.MkdirAll(parentDir, 0755); err != nil {
28+
return fmt.Errorf("failed to ensure containerd directory exists: %w", err)
29+
}
30+
2731
err := os.WriteFile(filepath.Join(parentDir, "embedded-registry.toml"), []byte(contents), 0644)
2832
if err != nil {
2933
return fmt.Errorf("failed to write embedded-registry.toml: %w", err)

0 commit comments

Comments
 (0)