Skip to content

Commit 4613692

Browse files
authored
Merge pull request #60 from IBM/additional-checks
Additional checks and fixes
2 parents 312f454 + cf0b323 commit 4613692

13 files changed

+70
-15
lines changed

builder/ibmcloud/vpc/client.go

+26
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ func (client IBMCloudClient) isResourceReady(resourceID string, resourceType str
9696
if resourceType == "instances" {
9797
options := vpcService.NewGetInstanceOptions(resourceID)
9898
instance, _, err := vpcService.GetInstance(options)
99+
if err != nil {
100+
err := fmt.Errorf("[ERROR] Error occurred while getting instance information. Error: %s", err)
101+
return false, fmt.Errorf(err.Error())
102+
}
99103
status := *instance.Status
100104
if status == "failed" {
101105
err := fmt.Errorf("[ERROR] Instance return with failed status. Status Reason - %s: %s", status, *instance.StatusReasons[0].Message)
@@ -106,20 +110,35 @@ func (client IBMCloudClient) isResourceReady(resourceID string, resourceType str
106110
} else if resourceType == "floating_ips" {
107111
options := vpcService.NewGetFloatingIPOptions(resourceID)
108112
floatingIP, _, err := vpcService.GetFloatingIP(options)
113+
if err != nil {
114+
err := fmt.Errorf("[ERROR] Error occurred while getting floating ip information. Error: %s", err)
115+
return false, fmt.Errorf(err.Error())
116+
}
109117
status := *floatingIP.Status
110118
ready = status == "available"
111119
return ready, err
112120
} else if resourceType == "subnets" {
113121
options := vpcService.NewGetSubnetOptions(resourceID)
114122
subnet, _, err := vpcService.GetSubnet(options)
123+
if err != nil {
124+
err := fmt.Errorf("[ERROR] Error occurred while getting subnet information. Error: %s", err)
125+
return false, fmt.Errorf(err.Error())
126+
}
115127
status := *subnet.Status
116128
ready = status == "available"
117129
return ready, err
118130
} else if resourceType == "images" {
119131
options := vpcService.NewGetImageOptions(resourceID)
120132
image, _, err := vpcService.GetImage(options)
133+
if err != nil {
134+
err := fmt.Errorf("[ERROR] Error occurred while getting image information. Error: %s", err)
135+
return false, fmt.Errorf(err.Error())
136+
}
121137
status := *image.Status
122138
ready = status == "available"
139+
if status == "failed" {
140+
err = fmt.Errorf("[ERROR] Image went into failed state")
141+
}
123142
return ready, err
124143
}
125144
return ready, nil
@@ -181,6 +200,7 @@ func (client IBMCloudClient) waitForResourceDown(resourceID string, resourceType
181200
func (client IBMCloudClient) isResourceDown(resourceID string, resourceType string, state multistep.StateBag) (bool, error) {
182201
var down bool
183202

203+
ui := state.Get("ui").(packer.Ui)
184204
var vpcService *vpcv1.VpcV1
185205
if state.Get("vpcService") != nil {
186206
vpcService = state.Get("vpcService").(*vpcv1.VpcV1)
@@ -189,6 +209,12 @@ func (client IBMCloudClient) isResourceDown(resourceID string, resourceType stri
189209
options := &vpcv1.GetInstanceOptions{}
190210
options.SetID(resourceID)
191211
instance, _, err := vpcService.GetInstance(options)
212+
if err != nil {
213+
err := fmt.Errorf("[ERROR] Failed retrieving resource information. Error: %s", err)
214+
ui.Error(err.Error())
215+
log.Println(err.Error())
216+
return false, err
217+
}
192218
status := *instance.Status
193219
down = status == "stopped"
194220
return down, err

builder/ibmcloud/vpc/step_create_instance.go

+25-4
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ func (step *stepCreateInstance) Run(_ context.Context, state multistep.StateBag)
6161
ui.Error(err.Error())
6262
return multistep.ActionHalt
6363
}
64+
if image != nil && len(image.Images) == 0 {
65+
err := fmt.Errorf("[ERROR] Image %s not found", vsiBaseImageName)
66+
state.Put("error", err)
67+
ui.Error(err.Error())
68+
return multistep.ActionHalt
69+
}
6470
vsiBaseImageID = *image.Images[0].ID
6571
ui.Say(fmt.Sprintf("ImageID fetched: %s", string(vsiBaseImageName)))
6672
}
@@ -169,7 +175,7 @@ func (step *stepCreateInstance) Cleanup(state multistep.StateBag) {
169175

170176
options := &vpcv1.DeleteInstanceOptions{}
171177
options.SetID(instanceID)
172-
result, err := vpcService.DeleteInstance(options)
178+
_, err := vpcService.DeleteInstance(options)
173179

174180
if err != nil {
175181
err := fmt.Errorf("[ERROR] Error deleting the instance. Please delete it manually: %s", err)
@@ -178,9 +184,24 @@ func (step *stepCreateInstance) Cleanup(state multistep.StateBag) {
178184
// log.Fatalf(err.Error())
179185
return
180186
}
181-
182-
if result.StatusCode == 204 {
183-
ui.Say("The instance was successfully deleted!")
187+
instanceDeleted := false
188+
for !instanceDeleted {
189+
options := &vpcv1.GetInstanceOptions{}
190+
options.SetID(instanceID)
191+
instance, response, err := vpcService.GetInstance(options)
192+
if err != nil {
193+
if response != nil && response.StatusCode == 404 {
194+
ui.Say("Instance deleted Succesfully")
195+
instanceDeleted = true
196+
break
197+
}
198+
err := fmt.Errorf("[ERROR] Error getting the instance to check delete status. %s", err)
199+
state.Put("error", err)
200+
ui.Error(err.Error())
201+
} else if instance != nil {
202+
ui.Say(fmt.Sprintf("Instance status :- %s", *instance.Status))
203+
}
204+
time.Sleep(10 * time.Second)
184205
}
185206

186207
// Deleting Security Group's rule

builder/ibmcloud/vpc/step_get_base_image_id.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,21 @@ func (step *stepGetBaseImageID) Run(_ context.Context, state multistep.StateBag)
2727
Name: &config.VSIBaseImageName,
2828
}
2929
imageList, _, err := vpcService.ListImages(options)
30-
imageId := *imageList.Images[0].ID
30+
3131
if err != nil {
3232
err := fmt.Errorf("[ERROR] Error getting base-image ID: %s", err)
3333
state.Put("error", err)
3434
ui.Error(err.Error())
3535
return multistep.ActionHalt
3636
}
37+
if imageList != nil && len(imageList.Images) == 0 {
38+
err := fmt.Errorf("[ERROR] Error getting base-image, Image %s not found", config.VSIBaseImageName)
39+
state.Put("error", err)
40+
ui.Error(err.Error())
41+
return multistep.ActionHalt
42+
}
43+
imageId := *imageList.Images[0].ID
44+
3745
state.Put("baseImageID", imageId)
3846
ui.Say(fmt.Sprintf("Base Image ID fetched: %s", imageId))
3947
}

developer/examples/build.classic.centos-ansible.pkr.hcl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// packer {
22
// required_plugins {
33
// ibmcloud = {
4-
// version = ">=v3.0.0"
4+
// version = ">=v3.0.3"
55
// source = "github.com/IBM/ibmcloud"
66
// }
77
// }

developer/examples/build.classic.centos.pkr.hcl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// packer {
22
// required_plugins {
33
// ibmcloud = {
4-
// version = ">=v3.0.0"
4+
// version = ">=v3.0.3"
55
// source = "github.com/IBM/ibmcloud"
66
// }
77
// }

developer/examples/build.classic.windows.pkr.hcl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// packer {
22
// required_plugins {
33
// ibmcloud = {
4-
// version = ">=v3.0.0"
4+
// version = ">=v3.0.3"
55
// source = "github.com/IBM/ibmcloud"
66
// }
77
// }

developer/examples/build.vpc.centos-ansible.pkr.hcl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// packer {
22
// required_plugins {
33
// ibmcloud = {
4-
// version = ">=v3.0.0"
4+
// version = ">=v3.0.3"
55
// source = "github.com/IBM/ibmcloud"
66
// }
77
// }

developer/examples/build.vpc.centos-encrypted.pkr.hcl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// packer {
22
// required_plugins {
33
// ibmcloud = {
4-
// version = ">=v3.0.0"
4+
// version = ">=v3.0.3"
55
// source = "github.com/IBM/ibmcloud"
66
// }
77
// }

developer/examples/build.vpc.centos-parallel.pkr copy.hcl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// packer {
22
// required_plugins {
33
// ibmcloud = {
4-
// version = ">=v3.0.0"
4+
// version = ">=v3.0.3"
55
// source = "github.com/IBM/ibmcloud"
66
// }
77
// }

developer/examples/build.vpc.centos-parallel.pkr.hcl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// packer {
22
// required_plugins {
33
// ibmcloud = {
4-
// version = ">=v3.0.0"
4+
// version = ">=v3.0.3"
55
// source = "github.com/IBM/ibmcloud"
66
// }
77
// }

developer/examples/build.vpc.centos.pkr.hcl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// packer {
22
// required_plugins {
33
// ibmcloud = {
4-
// version = ">=v3.0.0"
4+
// version = ">=v3.0.3"
55
// source = "github.com/IBM/ibmcloud"
66
// }
77
// }

developer/examples/build.vpc.rhel.pkr.hcl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// packer {
22
// required_plugins {
33
// ibmcloud = {
4-
// version = ">=v3.0.0"
4+
// version = ">=v3.0.3"
55
// source = "github.com/IBM/ibmcloud"
66
// }
77
// }

developer/examples/build.vpc.windows.pkr.hcl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// packer {
22
// required_plugins {
33
// ibmcloud = {
4-
// version = ">=v3.0.0"
4+
// version = ">=v3.0.3"
55
// source = "github.com/IBM/ibmcloud"
66
// }
77
// }

0 commit comments

Comments
 (0)