Skip to content

Commit f40c0d8

Browse files
support waiting for components
1 parent 3bb2d55 commit f40c0d8

File tree

3 files changed

+60
-15
lines changed

3 files changed

+60
-15
lines changed

minikube/resource_cluster.go

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ func resourceClusterUpdate(ctx context.Context, d *schema.ResourceData, m interf
7575
if d.HasChange("addons") {
7676
config := client.GetConfig()
7777
oldAddons, newAddons := d.GetChange("addons")
78-
oldAddonStrings := getAddons(oldAddons.(*schema.Set))
79-
newAddonStrings := getAddons(newAddons.(*schema.Set))
78+
oldAddonStrings := state_utils.SetToSlice(oldAddons.(*schema.Set))
79+
newAddonStrings := state_utils.SetToSlice(newAddons.(*schema.Set))
8080

8181
client.SetConfig(lib.MinikubeClientConfig{
8282
ClusterConfig: config.ClusterConfig,
@@ -248,7 +248,7 @@ func initialiseMinikubeClient(d *schema.ResourceData, m interface{}) (lib.Cluste
248248
addons = &schema.Set{}
249249
}
250250

251-
addonStrings := getAddons(addons.(*schema.Set))
251+
addonStrings := state_utils.SetToSlice(addons.(*schema.Set))
252252

253253
defaultIsos, ok := d.GetOk("iso_url")
254254
if !ok {
@@ -357,6 +357,12 @@ func initialiseMinikubeClient(d *schema.ResourceData, m interface{}) (lib.Cluste
357357
return nil, errors.New("at least 3 nodes is required for high availability")
358358
}
359359

360+
vcs := state_utils.SetToSlice(d.Get("wait").(*schema.Set))
361+
vc := make(map[string]bool)
362+
for _, c := range vcs {
363+
vc[c] = true
364+
}
365+
360366
cc := config.ClusterConfig{
361367
Addons: addonConfig,
362368
APIServerPort: d.Get("apiserver_port").(int),
@@ -422,6 +428,7 @@ func initialiseMinikubeClient(d *schema.ResourceData, m interface{}) (lib.Cluste
422428
GPUs: d.Get("gpus").(string),
423429
SocketVMnetPath: d.Get("socket_vmnet_path").(string),
424430
SocketVMnetClientPath: d.Get("socket_vmnet_client_path").(string),
431+
VerifyComponents: vc,
425432
}
426433

427434
clusterClient.SetConfig(lib.MinikubeClientConfig{
@@ -441,15 +448,3 @@ func initialiseMinikubeClient(d *schema.ResourceData, m interface{}) (lib.Cluste
441448

442449
return clusterClient, nil
443450
}
444-
445-
func getAddons(addons *schema.Set) []string {
446-
addonStrings := make([]string, addons.Len())
447-
addonObjects := addons.List()
448-
for i, v := range addonObjects {
449-
addonStrings[i] = v.(string)
450-
}
451-
452-
sort.Strings(addonStrings) //to ensure consistency with TF state
453-
454-
return addonStrings
455-
}

minikube/state_utils/slice.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,15 @@ func ReadSliceState(slice interface{}) []string {
3838

3939
return stringSlice
4040
}
41+
42+
func SetToSlice(s *schema.Set) []string {
43+
ss := make([]string, s.Len())
44+
so := s.List()
45+
for i, v := range so {
46+
ss[i] = v.(string)
47+
}
48+
49+
sort.Strings(ss) //to ensure consistency with TF state
50+
51+
return ss
52+
}

minikube/state_utils/slice_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,3 +86,41 @@ func TestReadSliceState(t *testing.T) {
8686
})
8787
}
8888
}
89+
90+
func TestSetToSlice(t *testing.T) {
91+
tests := []struct {
92+
name string
93+
input *schema.Set
94+
expected []string
95+
}{
96+
{
97+
name: "Empty set",
98+
input: schema.NewSet(schema.HashString, []interface{}{}),
99+
expected: []string{},
100+
},
101+
{
102+
name: "Set with single item",
103+
input: schema.NewSet(schema.HashString, []interface{}{"apple"}),
104+
expected: []string{"apple"},
105+
},
106+
{
107+
name: "Set with multiple items",
108+
input: schema.NewSet(schema.HashString, []interface{}{"banana", "apple", "cherry"}),
109+
expected: []string{"apple", "banana", "cherry"},
110+
},
111+
{
112+
name: "Set with duplicate items",
113+
input: schema.NewSet(schema.HashString, []interface{}{"apple", "banana", "apple", "cherry"}),
114+
expected: []string{"apple", "banana", "cherry"},
115+
},
116+
}
117+
118+
for _, tt := range tests {
119+
t.Run(tt.name, func(t *testing.T) {
120+
result := SetToSlice(tt.input)
121+
if !reflect.DeepEqual(result, tt.expected) {
122+
t.Errorf("SetToSlice() = %v, want %v", result, tt.expected)
123+
}
124+
})
125+
}
126+
}

0 commit comments

Comments
 (0)