Skip to content

Commit d2f2d80

Browse files
committed
change zone parsing + add context to requests
1 parent ec5c4df commit d2f2d80

File tree

2 files changed

+47
-29
lines changed

2 files changed

+47
-29
lines changed

internal/services/instance/action_create_snapshot.go

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,25 @@ func (c *CreateSnapshot) Invoke(ctx context.Context, req action.InvokeRequest, r
105105
return
106106
}
107107

108-
actionReq := &instance.CreateSnapshotRequest{
109-
VolumeID: scw.StringPtr(locality.ExpandID(data.VolumeID.ValueString())),
108+
zone, volumeID, _ := locality.ParseLocalizedID(data.VolumeID.ValueString())
109+
if zone == "" {
110+
if !data.Zone.IsNull() {
111+
zone = data.Zone.ValueString()
112+
} else {
113+
resp.Diagnostics.AddError(
114+
"missing zone in config",
115+
fmt.Sprintf("zone could not be extracted from either the action configuration or the resource ID (%s)",
116+
data.VolumeID.ValueString(),
117+
),
118+
)
119+
120+
return
121+
}
110122
}
111-
if !data.Zone.IsNull() {
112-
actionReq.Zone = scw.Zone(data.Zone.ValueString())
123+
124+
actionReq := &instance.CreateSnapshotRequest{
125+
VolumeID: &volumeID,
126+
Zone: scw.Zone(zone),
113127
}
114128

115129
if !data.Name.IsNull() {
@@ -127,7 +141,7 @@ func (c *CreateSnapshot) Invoke(ctx context.Context, req action.InvokeRequest, r
127141
}
128142
}
129143

130-
snapshot, err := c.instanceAPI.CreateSnapshot(actionReq)
144+
snapshot, err := c.instanceAPI.CreateSnapshot(actionReq, scw.WithContext(ctx))
131145
if err != nil {
132146
resp.Diagnostics.AddError(
133147
"error creating snapshot",
@@ -137,16 +151,10 @@ func (c *CreateSnapshot) Invoke(ctx context.Context, req action.InvokeRequest, r
137151
}
138152

139153
if data.Wait.ValueBool() {
140-
waitReq := &instance.WaitForSnapshotRequest{
154+
_, errWait := c.instanceAPI.WaitForSnapshot(&instance.WaitForSnapshotRequest{
141155
SnapshotID: snapshot.Snapshot.ID,
142-
Zone: scw.Zone(data.Zone.ValueString()),
143-
}
144-
145-
if !data.Zone.IsNull() {
146-
waitReq.Zone = scw.Zone(data.Zone.ValueString())
147-
}
148-
149-
_, errWait := c.instanceAPI.WaitForSnapshot(waitReq)
156+
Zone: scw.Zone(zone),
157+
}, scw.WithContext(ctx))
150158
if errWait != nil {
151159
resp.Diagnostics.AddError(
152160
"error waiting for snapshot",

internal/services/instance/action_server_action.go

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -110,32 +110,42 @@ func (a *ServerAction) Invoke(ctx context.Context, req action.InvokeRequest, res
110110
return
111111
}
112112

113+
zone, serverID, _ := locality.ParseLocalizedID(data.ServerID.ValueString())
114+
if zone == "" {
115+
if !data.Zone.IsNull() {
116+
zone = data.Zone.ValueString()
117+
} else {
118+
resp.Diagnostics.AddError(
119+
"missing zone in config",
120+
fmt.Sprintf("zone could not be extracted from either the action configuration or the resource ID (%s)",
121+
data.ServerID.ValueString(),
122+
),
123+
)
124+
125+
return
126+
}
127+
}
128+
113129
actionReq := &instance.ServerActionRequest{
114-
ServerID: locality.ExpandID(data.ServerID.ValueString()),
130+
ServerID: serverID,
131+
Zone: scw.Zone(zone),
115132
Action: instance.ServerAction(data.Action.ValueString()),
116133
}
117-
if !data.Zone.IsNull() {
118-
actionReq.Zone = scw.Zone(data.Zone.ValueString())
119-
}
120134

121-
_, err := a.instanceAPI.ServerAction(actionReq)
135+
_, err := a.instanceAPI.ServerAction(actionReq, scw.WithContext(ctx))
122136
if err != nil {
123137
resp.Diagnostics.AddError(
124138
"error in server action",
125139
fmt.Sprintf("%s", err))
140+
141+
return
126142
}
127143

128144
if data.Wait.ValueBool() {
129-
waitReq := &instance.WaitForServerRequest{
130-
ServerID: locality.ExpandID(data.ServerID.ValueString()),
131-
Zone: scw.Zone(data.Zone.ValueString()),
132-
}
133-
134-
if !data.Zone.IsNull() {
135-
waitReq.Zone = scw.Zone(data.Zone.ValueString())
136-
}
137-
138-
_, errWait := a.instanceAPI.WaitForServer(waitReq)
145+
_, errWait := a.instanceAPI.WaitForServer(&instance.WaitForServerRequest{
146+
ServerID: serverID,
147+
Zone: scw.Zone(zone),
148+
}, scw.WithContext(ctx))
139149
if errWait != nil && data.Action.ValueString() != instance.ServerActionTerminate.String() {
140150
resp.Diagnostics.AddError(
141151
"error in wait server",

0 commit comments

Comments
 (0)