Skip to content

Commit 70085da

Browse files
feat: create library for embedding kots release (#279)
* feat: create library for embedding kots release created a library so we can use it on airgap project. this library allows for embedding kots releases into an embedded cluster binary. * chore: moving customization package to embed package move the logic from the customization package into the embed package. * chore: generating the binary using the library generate the embedded-cluster binary used during our e2e tests using our library of embedded kots releases into embedded-cluster binaries.
1 parent bfe38e3 commit 70085da

File tree

16 files changed

+279
-29
lines changed

16 files changed

+279
-29
lines changed

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,4 @@ bundle
33
pkg/goods/bins
44
pkg/goods/images
55
*tgz
6-
release.tar.gz
7-
release.o
86
.pre-commit-config.yaml

Makefile

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,13 @@ output/tmp/release.tar.gz:
7373
mkdir -p output/tmp
7474
tar -czf output/tmp/release.tar.gz -C e2e/kots-release .
7575

76+
output/bin/embedded-cluster-release-builder:
77+
mkdir -p output/bin
78+
go build -o output/bin/embedded-cluster-release-builder e2e/embedded-cluster-release-builder/main.go
79+
7680
.PHONY: embedded-release
77-
embedded-release: embedded-cluster-linux-amd64 output/tmp/release.tar.gz
78-
objcopy --input-target binary --output-target binary --rename-section .data=sec_bundle output/tmp/release.tar.gz output/tmp/release.o
79-
@if ! objcopy --update-section sec_bundle=output/tmp/release.o output/bin/embedded-cluster 2>/dev/null; then \
80-
objcopy --add-section sec_bundle=output/tmp/release.o output/bin/embedded-cluster ; \
81-
fi
81+
embedded-release: embedded-cluster-linux-amd64 output/tmp/release.tar.gz output/bin/embedded-cluster-release-builder
82+
./output/bin/embedded-cluster-release-builder output/bin/embedded-cluster output/tmp/release.tar.gz output/bin/embedded-cluster
8283

8384
.PHONY: static
8485
static: pkg/goods/bins/embedded-cluster/kubectl-preflight \

cmd/embedded-cluster/install.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ import (
2525

2626
"github.com/replicatedhq/embedded-cluster/pkg/addons"
2727
"github.com/replicatedhq/embedded-cluster/pkg/config"
28-
"github.com/replicatedhq/embedded-cluster/pkg/customization"
2928
"github.com/replicatedhq/embedded-cluster/pkg/defaults"
29+
"github.com/replicatedhq/embedded-cluster/pkg/embed"
3030
"github.com/replicatedhq/embedded-cluster/pkg/goods"
3131
"github.com/replicatedhq/embedded-cluster/pkg/metrics"
3232
"github.com/replicatedhq/embedded-cluster/pkg/preflights"
@@ -183,7 +183,7 @@ func updateConfig(c *cli.Context) error {
183183
// applyUnsupportedOverrides applies overrides to the k0s configuration. Applies first the
184184
// overrides embedded into the binary and after the ones provided by the user (--overrides).
185185
func applyUnsupportedOverrides(c *cli.Context, cfg *k0sv1beta1.Cluster) error {
186-
if embcfg, err := customization.GetEmbeddedClusterConfig(); err != nil {
186+
if embcfg, err := embed.GetEmbeddedClusterConfig(); err != nil {
187187
return fmt.Errorf("unable to get embedded cluster config: %w", err)
188188
} else if embcfg != nil {
189189
overrides := embcfg.Spec.UnsupportedOverrides.K0s

cmd/embedded-cluster/join_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010

1111
"github.com/k0sproject/dig"
1212
embeddedclusterv1beta1 "github.com/replicatedhq/embedded-cluster-operator/api/v1beta1"
13-
"github.com/replicatedhq/embedded-cluster/pkg/customization"
13+
embedded "github.com/replicatedhq/embedded-cluster/pkg/embed"
1414
"github.com/stretchr/testify/assert"
1515
"github.com/stretchr/testify/require"
1616
"gopkg.in/yaml.v3"
@@ -76,7 +76,7 @@ func Test_patchK0sConfig(t *testing.T) {
7676
req.NoError(err, "unable to unmarshal expected file")
7777

7878
assert.Equal(t, expected, original)
79-
customization.DefaultProvider = &customization.AdminConsole{}
79+
embedded.DefaultProvider = &embedded.AdminConsole{}
8080
})
8181
}
8282
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package main
2+
3+
import (
4+
"io"
5+
"log"
6+
"os"
7+
8+
"github.com/replicatedhq/embedded-cluster/pkg/embed"
9+
)
10+
11+
func main() {
12+
os.Exit(run())
13+
}
14+
15+
func run() int {
16+
if len(os.Args) != 4 {
17+
log.Printf("Usage: %s <binary> <release.tar.gz> <output>", os.Args[0])
18+
return 1
19+
}
20+
builder, err := embed.NewElfBuilder("")
21+
if err != nil {
22+
log.Printf("failed to create builder: %v", err)
23+
return 1
24+
}
25+
defer builder.Close()
26+
src, err := builder.Build(os.Args[1], os.Args[2])
27+
if err != nil {
28+
log.Printf("failed to build: %v", err)
29+
return 1
30+
}
31+
defer src.Close()
32+
dst, err := os.OpenFile(os.Args[3], os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0755)
33+
if err != nil {
34+
log.Printf("failed to open destination: %v", err)
35+
return 1
36+
}
37+
defer dst.Close()
38+
if _, err := io.Copy(dst, src); err != nil {
39+
log.Printf("failed to copy: %v", err)
40+
return 1
41+
}
42+
return 0
43+
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ require (
2222
golang.org/x/crypto v0.18.0
2323
golang.org/x/term v0.16.0
2424
gopkg.in/yaml.v2 v2.4.0
25-
helm.sh/helm/v3 v3.13.3
2625
k8s.io/api v0.29.0
2726
k8s.io/apimachinery v0.29.0
2827
sigs.k8s.io/controller-runtime v0.16.3
@@ -50,6 +49,7 @@ require (
5049
go.uber.org/goleak v1.3.0 // indirect
5150
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect
5251
golang.org/x/mod v0.14.0 // indirect
52+
helm.sh/helm/v3 v3.13.3 // indirect
5353
)
5454

5555
require (

pkg/addons/adminconsole/adminconsole.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ import (
1515
"sigs.k8s.io/controller-runtime/pkg/client"
1616
k8syaml "sigs.k8s.io/yaml"
1717

18-
"github.com/replicatedhq/embedded-cluster/pkg/customization"
1918
"github.com/replicatedhq/embedded-cluster/pkg/defaults"
19+
"github.com/replicatedhq/embedded-cluster/pkg/embed"
2020
"github.com/replicatedhq/embedded-cluster/pkg/kubeutils"
2121
"github.com/replicatedhq/embedded-cluster/pkg/metrics"
2222
pb "github.com/replicatedhq/embedded-cluster/pkg/progressbar"
@@ -107,14 +107,14 @@ func (a *AdminConsole) GetProtectedFields() map[string][]string {
107107
}
108108

109109
// HostPreflights returns the host preflight objects found inside the adminconsole
110-
// or as part of the embedded kots release (customization).
110+
// or as part of the embedded kots release.
111111
func (a *AdminConsole) HostPreflights() (*v1beta2.HostPreflightSpec, error) {
112-
return customization.GetHostPreflights()
112+
return embed.GetHostPreflights()
113113
}
114114

115115
// addLicenseAndVersionToHelmValues adds the embedded license to the helm values.
116116
func (a *AdminConsole) addLicenseAndVersionToHelmValues() error {
117-
license, err := customization.GetLicense()
117+
license, err := embed.GetLicense()
118118
if err != nil {
119119
return fmt.Errorf("unable to get license: %w", err)
120120
}
@@ -126,7 +126,7 @@ func (a *AdminConsole) addLicenseAndVersionToHelmValues() error {
126126
return fmt.Errorf("unable to marshal license: %w", err)
127127
}
128128
var appVersion string
129-
if release, err := customization.GetChannelRelease(); err != nil {
129+
if release, err := embed.GetChannelRelease(); err != nil {
130130
return fmt.Errorf("unable to get channel release: %w", err)
131131
} else if release != nil {
132132
appVersion = release.VersionLabel
@@ -195,7 +195,7 @@ func (a *AdminConsole) addPasswordToHelmValues() error {
195195
// addKotsApplicationToHelmValues extracts the embed application struct found in this binary
196196
// and adds it to the helm values.
197197
func (a *AdminConsole) addKotsApplicationToHelmValues() error {
198-
app, err := customization.GetApplication()
198+
app, err := embed.GetApplication()
199199
if err != nil {
200200
return fmt.Errorf("unable to get application: %w", err)
201201
} else if app == nil {

pkg/addons/embeddedclusteroperator/embeddedclusteroperator.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ import (
1515
"sigs.k8s.io/controller-runtime/pkg/client"
1616

1717
"github.com/replicatedhq/embedded-cluster/pkg/addons/adminconsole"
18-
"github.com/replicatedhq/embedded-cluster/pkg/customization"
1918
"github.com/replicatedhq/embedded-cluster/pkg/defaults"
19+
"github.com/replicatedhq/embedded-cluster/pkg/embed"
2020
"github.com/replicatedhq/embedded-cluster/pkg/kubeutils"
2121
"github.com/replicatedhq/embedded-cluster/pkg/metrics"
2222
pb "github.com/replicatedhq/embedded-cluster/pkg/progressbar"
@@ -93,7 +93,7 @@ func (e *EmbeddedClusterOperator) Outro(ctx context.Context, cli client.Client)
9393
return err
9494
}
9595
loading.Closef("Embedded Cluster Operator is ready!")
96-
cfg, err := customization.GetEmbeddedClusterConfig()
96+
cfg, err := embed.GetEmbeddedClusterConfig()
9797
if err != nil {
9898
return err
9999
}

pkg/config/config.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ import (
2424
k8syaml "sigs.k8s.io/yaml"
2525

2626
"github.com/replicatedhq/embedded-cluster/pkg/addons"
27-
"github.com/replicatedhq/embedded-cluster/pkg/customization"
2827
"github.com/replicatedhq/embedded-cluster/pkg/defaults"
28+
"github.com/replicatedhq/embedded-cluster/pkg/embed"
2929
"github.com/replicatedhq/embedded-cluster/pkg/prompts"
3030
"github.com/replicatedhq/embedded-cluster/pkg/ssh"
3131
)
@@ -365,7 +365,7 @@ func ApplyEmbeddedUnsupportedOverrides(config *v1beta1.Cluster, embconfig string
365365
}
366366

367367
func getControllerRoleName() string {
368-
clusterConfig, err := customization.GetEmbeddedClusterConfig()
368+
clusterConfig, err := embed.GetEmbeddedClusterConfig()
369369

370370
controllerRoleName := "controller"
371371
if err == nil {
@@ -379,7 +379,7 @@ func getControllerRoleName() string {
379379
}
380380

381381
func additionalControllerLabels() map[string]string {
382-
clusterConfig, err := customization.GetEmbeddedClusterConfig()
382+
clusterConfig, err := embed.GetEmbeddedClusterConfig()
383383

384384
if err == nil {
385385
if clusterConfig != nil {

pkg/customization/customization.go renamed to pkg/embed/customization.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package customization
1+
package embed
22

33
import (
44
"archive/tar"

0 commit comments

Comments
 (0)