Skip to content

Commit 7a99351

Browse files
Fixes #3629 (#3924)
Signed-off-by: appiepollo14 <[email protected]> Co-authored-by: appiepollo14 <[email protected]>
1 parent 2347262 commit 7a99351

File tree

8 files changed

+82
-12
lines changed

8 files changed

+82
-12
lines changed

pkg/addons/ensure.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ func EnsureUserAddons(s *state.State) error {
206206
}
207207
}
208208

209-
for _, embeddedAddon := range s.Cluster.Addons.OnlyAddons() {
209+
for _, embeddedAddon := range s.Cluster.Addons.DeclaredAddonsOnly() {
210210
if _, ok := embeddedAddons[embeddedAddon.Name]; ok {
211211
continue
212212
}

pkg/addons/helpers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ func EmbeddedAddonsOnly(addons *kubeoneapi.Addons) (bool, error) {
359359
}
360360

361361
// Iterate over addons specified in the KubeOneCluster object
362-
for _, addon := range addons.OnlyAddons() {
362+
for _, addon := range addons.DeclaredAddonsOnly() {
363363
embedded := false
364364
// Iterate over embedded addons directory to check if the addon exists
365365
for _, embeddedAddon := range embeddedAddons {

pkg/addons/list.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func List(s *state.State, outputFormat string) error {
107107
}
108108
}
109109

110-
for _, embeddedAddon := range s.Cluster.Addons.OnlyAddons() {
110+
for _, embeddedAddon := range s.Cluster.Addons.DeclaredAddonsOnly() {
111111
combinedAddons[embeddedAddon.Name] = addonItem{
112112
Name: embeddedAddon.Name,
113113
Status: addonStatusInstall,

pkg/addons/manifest.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func (a *applier) getManifestsFromDirectory(st *state.State, fsys fs.FS, addonNa
6161
disableTemplating = false
6262
)
6363
if st.Cluster.Addons.Enabled() {
64-
for _, addon := range st.Cluster.Addons.OnlyAddons() {
64+
for _, addon := range st.Cluster.Addons.DeclaredAddonsOnly() {
6565
if addon.Name == addonName {
6666
addonParams = addon.Params
6767
disableTemplating = addon.DisableTemplating

pkg/apis/kubeone/helpers.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,11 +395,15 @@ func (r *RegistryConfiguration) InsecureRegistryAddress() string {
395395
return insecureRegistry
396396
}
397397

398+
// Enabled returns whether addons are enabled.
399+
// this is true when either an addonsPath is provided or the addonsRef are provided
398400
func (ads *Addons) Enabled() bool {
399-
return ads != nil && len(ads.Addons) > 0
401+
return ads != nil && (ads.Path != "" || len(ads.Addons) > 0)
400402
}
401403

402-
func (ads *Addons) OnlyAddons() []Addon {
404+
// DeclaredAddonsOnly returns a slice of Addons which are declared in the kubeone config manifest
405+
// it does not return any addons which might exist in the addons' path.
406+
func (ads *Addons) DeclaredAddonsOnly() []Addon {
403407
if ads == nil {
404408
return nil
405409
}

pkg/apis/kubeone/helpers_test.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,3 +271,69 @@ func TestDefaultAssetConfiguration(t *testing.T) {
271271
})
272272
}
273273
}
274+
275+
func TestAddons_Enabled(t *testing.T) {
276+
t.Parallel()
277+
278+
tests := []struct {
279+
name string
280+
addons *Addons
281+
want bool
282+
}{
283+
{
284+
name: "nil addons",
285+
addons: nil,
286+
want: false,
287+
},
288+
{
289+
name: "empty addons struct",
290+
addons: &Addons{},
291+
want: false,
292+
},
293+
{
294+
name: "only path set",
295+
addons: &Addons{
296+
Path: "addons/",
297+
},
298+
want: true,
299+
},
300+
{
301+
name: "one addon reference (Addon)",
302+
addons: &Addons{
303+
Addons: []AddonRef{
304+
{Addon: &Addon{}},
305+
},
306+
},
307+
want: true,
308+
},
309+
{
310+
name: "one addon reference (HelmRelease)",
311+
addons: &Addons{
312+
Addons: []AddonRef{
313+
{HelmRelease: &HelmRelease{}},
314+
},
315+
},
316+
want: true,
317+
},
318+
{
319+
name: "path + addon ref",
320+
addons: &Addons{
321+
Path: "addons/",
322+
Addons: []AddonRef{
323+
{Addon: &Addon{Name: "addon1"}},
324+
},
325+
},
326+
want: true,
327+
},
328+
}
329+
330+
for _, tc := range tests {
331+
t.Run(tc.name, func(t *testing.T) {
332+
t.Parallel()
333+
got := tc.addons.Enabled()
334+
if got != tc.want {
335+
t.Errorf("Enabled() = %v, want %v", got, tc.want)
336+
}
337+
})
338+
}
339+
}

pkg/cmd/local.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,13 @@ func (opts *localOpts) BuildState() (*state.State, error) {
9292
}
9393

9494
// Check if only embedded addons are being used; path is not required for embedded addons and no validation is required
95-
embeddedAddonsOnly, err := addons.EmbeddedAddonsOnly(s.Cluster.Addons)
95+
_, err = addons.EmbeddedAddonsOnly(s.Cluster.Addons)
9696
if err != nil {
9797
return nil, err
9898
}
9999

100-
// If custom addons are being used then addons path is required and should be a valid directory
101-
if !embeddedAddonsOnly {
100+
// If an addons path is provided, that should be a valid directory
101+
if addonsPath != "" {
102102
if _, err := os.Stat(addonsPath); os.IsNotExist(err) {
103103
return nil, fail.Runtime(err, "checking addons directory")
104104
}

pkg/cmd/shared.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,13 @@ func (opts *globalOptions) BuildState() (*state.State, error) {
8686
}
8787

8888
// Check if only embedded addons are being used; path is not required for embedded addons and no validation is required
89-
embeddedAddonsOnly, err := addons.EmbeddedAddonsOnly(s.Cluster.Addons)
89+
_, err = addons.EmbeddedAddonsOnly(s.Cluster.Addons)
9090
if err != nil {
9191
return nil, err
9292
}
9393

94-
// If custom addons are being used then addons path is required and should be a valid directory
95-
if !embeddedAddonsOnly {
94+
// If an addons path is provided, that should be a valid directory
95+
if addonsPath != "" {
9696
if _, err := os.Stat(addonsPath); os.IsNotExist(err) {
9797
return nil, fail.Runtime(err, "checking addons directory")
9898
}

0 commit comments

Comments
 (0)