Skip to content

Commit 2bb652e

Browse files
When Image object is created, uplink the image also. (#11)
* 1) When Image object is created, uplink the image also. 2) Fixed App Instance Schema - Marked, Acl, app_type, deployment_type, vminfo as Computed. * Changed project_id to computed attribute for EdgeAppInstance, NetworkInstance and VolumeInstance. For these, project is taken from device. * Update sample files according to schema files.
1 parent f7e62ee commit 2bb652e

File tree

9 files changed

+59
-69
lines changed

9 files changed

+59
-69
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ require (
1212
github.com/go-test/deep v1.0.7
1313
github.com/hashicorp/terraform-plugin-sdk/v2 v2.7.0
1414
github.com/keybase/go-crypto v0.0.0-20161004153544-93f5b35093ba // indirect
15-
github.com/zededa/zedcloud-api v0.0.3-alpha
15+
github.com/zededa/zedcloud-api v0.0.4-alpha
1616
)
1717

1818
// replace github.com/zededa/zedcloud-api => ../zedcloud-api

go.sum

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
292292
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
293293
github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
294294
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
295+
github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M=
295296
github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8=
296297
github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd h1:hSkbZ9XSyjyBirMeqSqUrK+9HboWrweVlzRNqoBi2d4=
297298
github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
@@ -755,6 +756,8 @@ github.com/zededa/zedcloud-api v0.0.2-alpha h1:073MaS8ufVQT5cnFYwQGjPC4H8SNalM18
755756
github.com/zededa/zedcloud-api v0.0.2-alpha/go.mod h1:7cRGSQt6E0shSY/3yKN42Nka4i1zVm2CMJ/V6B5DNuM=
756757
github.com/zededa/zedcloud-api v0.0.3-alpha h1:IWioxwJDRvukMtOqfx+0cTKI+fH7gLvtCsqv9guIdt4=
757758
github.com/zededa/zedcloud-api v0.0.3-alpha/go.mod h1:XxkHfpQWthD7+11O8GRijym56Jq30pF4VS76sNuU56M=
759+
github.com/zededa/zedcloud-api v0.0.4-alpha h1://Jl0KLeQyXwQLboyrIn+gPYJqMfI3zsFJN7xIlj3zI=
760+
github.com/zededa/zedcloud-api v0.0.4-alpha/go.mod h1:XxkHfpQWthD7+11O8GRijym56Jq30pF4VS76sNuU56M=
758761
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
759762
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
760763
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=

provider/resource_edgenode.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -278,14 +278,10 @@ func deleteEdgeNodeResource(ctx context.Context, d *schema.ResourceData, meta in
278278
client.XRequestIdPrefix = "TF-edgenode-delete"
279279
urlExtension := getEdgeNodeUrl(name, id, "delete")
280280
rspData := &swagger_models.ZsrvResponse{}
281-
resp, err := client.SendReq("delete", urlExtension, nil, rspData)
281+
_, err := client.SendReq("delete", urlExtension, nil, rspData)
282282
if err != nil {
283283
return diag.Errorf("%s. Err: %s", errMsgPrefix, err.Error())
284284
}
285-
if resp.StatusCode == 200 {
286-
log.Printf("[INFO] EdgeNode Delete Successful.")
287-
return diags
288-
}
289-
return diag.Errorf("%s. Status: %s\n resp: %++v", errMsgPrefix, resp.Status,
290-
resp)
285+
log.Printf("[INFO] EdgeNode Delete Successful.")
286+
return diags
291287
}

provider/resource_image.go

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,26 @@ func updateImageCfgFromResourceData(cfg *swagger_models.ImageConfig, d *schema.R
6969
return nil
7070
}
7171

72+
func uplinkImageResource(client *zedcloudapi.Client, name, id string) error {
73+
errMsgPrefix := getErrMsgPrefix(name, id, "Image", "Uplink")
74+
cfg, err := getImage(client, "", id)
75+
if err != nil {
76+
return fmt.Errorf("%s err: %s", errMsgPrefix, err.Error())
77+
}
78+
log.Printf("[INFO] Uplinking Image: %s", name)
79+
urlExtension := getImageUrl(name, id, "uplink")
80+
client.XRequestIdPrefix = "TF-image-uplink"
81+
rspData := &swagger_models.ZsrvResponse{}
82+
_, err = client.SendReq("PUT", urlExtension, cfg, rspData)
83+
if err != nil {
84+
deleteImageById(client, name, id)
85+
return fmt.Errorf("%s Err: %s", errMsgPrefix, err.Error())
86+
}
87+
log.Printf("Image %s (ID: %s) Successfully Uplinked\n",
88+
rspData.ObjectName, rspData.ObjectID)
89+
return nil
90+
}
91+
7292
// Create the Resource Group
7393
func createImageResource(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
7494
// Warning or errors can be collected in a slice type
@@ -77,8 +97,7 @@ func createImageResource(ctx context.Context, d *schema.ResourceData, meta inter
7797
client := (meta.(Client)).Client
7898
name := rdEntryStr(d, "name")
7999
id := rdEntryStr(d, "id")
80-
errMsgPrefix := fmt.Sprintf("[ERROR] Image %s (id: %s) Create Failed.",
81-
name, id)
100+
errMsgPrefix := getErrMsgPrefix(name, id, "Image", "Create")
82101
if client == nil {
83102
return diag.Errorf("%s nil Client", errMsgPrefix)
84103
}
@@ -98,6 +117,10 @@ func createImageResource(ctx context.Context, d *schema.ResourceData, meta inter
98117
}
99118
log.Printf("Image %s (ID: %s) Successfully created\n",
100119
rspData.ObjectName, rspData.ObjectID)
120+
// Uplink the image
121+
if err = uplinkImageResource(client, name, rspData.ObjectID); err != nil {
122+
return diag.Errorf("%s. ", err.Error())
123+
}
101124
d.SetId(rspData.ObjectID)
102125
return diags
103126
}
@@ -137,6 +160,18 @@ func updateImageResource(ctx context.Context, d *schema.ResourceData, meta inter
137160
return diags
138161
}
139162

163+
func deleteImageById(client *zedcloudapi.Client, name, id string) error {
164+
client.XRequestIdPrefix = "TF-image-delete"
165+
urlExtension := getImageUrl("", id, "delete")
166+
rspData := &swagger_models.ZsrvResponse{}
167+
_, err := client.SendReq("DELETE", urlExtension, nil, rspData)
168+
if err != nil {
169+
return err
170+
}
171+
log.Printf("[INFO] Image %s(id:%s) Delete Successful.", name, id)
172+
return nil
173+
}
174+
140175
// Delete the Resource Group
141176
func deleteImageResource(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
142177
// Warning or errors can be collected in a slice type
@@ -153,13 +188,9 @@ func deleteImageResource(ctx context.Context, d *schema.ResourceData, meta inter
153188
log.Printf("%s Unexpected Error. nil config", errMsgPrefix)
154189
return diags
155190
}
156-
client.XRequestIdPrefix = "TF-image-delete"
157-
urlExtension := getImageUrl(name, id, "delete")
158-
rspData := &swagger_models.ZsrvResponse{}
159-
_, err = client.SendReq("DELETE", urlExtension, nil, rspData)
191+
err = deleteImageById(client, name, id)
160192
if err != nil {
161193
return diag.Errorf("%s. Request Failed. err: %s", errMsgPrefix, err.Error())
162194
}
163-
log.Printf("[INFO] Image %s(id:%s) Delete Successful.", name, cfg.ID)
164195
return diags
165196
}

samples/onedevice_oneappinst.tf

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -291,50 +291,9 @@ resource "zedcloud_edgeapp_instance" "Sample-EdgeAppInstance" {
291291
interface {
292292
intfname = "indirect"
293293
netinstname = zedcloud_network_instance.default-nwinst.name
294-
acl {
295-
match {
296-
type = "ip"
297-
value = "0.0.0.0/0"
298-
}
299-
id = "1"
300-
name = ""
301-
}
302-
acl {
303-
match {
304-
type = "protocol"
305-
value = "tcp"
306-
}
307-
match {
308-
type = "lport"
309-
value = "8022"
310-
}
311-
match {
312-
type = "ip"
313-
value = "0.0.0.0/0"
314-
}
315-
action {
316-
drop = false
317-
limit = false
318-
limitrate = 0
319-
limitunit = ""
320-
limitburst = 0
321-
portmap = true
322-
mapparams {
323-
port = 22
324-
}
325-
}
326-
id = 2
327-
name = ""
328-
}
329294
}
330295
title = "TerraForm Sample App Instance"
331296
remote_console = true
332-
vminfo {
333-
cpus = 1
334-
memory = 512
335-
mode = "HV_HVM"
336-
vnc = true
337-
}
338297
depends_on = [
339298
zedcloud_edgeapp.ubuntu-all-ip,
340299
zedcloud_edgenode.Sample-Device,
@@ -349,7 +308,6 @@ resource "zedcloud_volume_instance" "TF-sample-vol-inst-RO-content-tree" {
349308
image = "alpine-base"
350309
multiattach = false
351310
name = "sample-volinst-1"
352-
project_id = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
353311
size_bytes = "140443648"
354312
title = "Sample Title"
355313
type = "VOLUME_INSTANCE_TYPE_CONTENT_TREE"

schemas/common.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ var projectIdSchema = &schema.Schema{
4747
},
4848
}
4949

50+
var projectIdComputedSchema = &schema.Schema{
51+
Type: schema.TypeString,
52+
Computed: true,
53+
Description: "ID of the project to which the Object belongs",
54+
}
55+
5056
var tagsSchema = &schema.Schema{
5157
Type: schema.TypeMap,
5258
Optional: true,

schemas/edgeapp_instance.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ var appInterfaceResourceSchema = &schema.Resource{
407407
},
408408
"acl": {
409409
Type: schema.TypeList,
410-
Optional: true,
410+
Computed: true,
411411
Description: "App Access Control Lists on the Interface",
412412
Elem: appACEResourceSchema,
413413
},
@@ -491,7 +491,7 @@ var AppInstSchema = map[string]*schema.Schema{
491491
},
492492
"app_type": {
493493
Type: schema.TypeString,
494-
Optional: true,
494+
Computed: true,
495495
Description: "Type of Edge App - VM / Container etc. The following are valid values: " +
496496
"APP_TYPE_UNSPECIFIED, APP_TYPE_VM, APP_TYPE_VM_RUNTIME, APP_TYPE_CONTAINER, " +
497497
"APP_TYPE_MODULE",
@@ -527,12 +527,9 @@ var AppInstSchema = map[string]*schema.Schema{
527527
},
528528
"deployment_type": {
529529
Type: schema.TypeString,
530-
Optional: true,
530+
Computed: true,
531531
Description: "Type of deployment for the app, eg: azure, k3s, standalone. " +
532-
"The following are valid values: " +
533-
"DEPLOYMENT_TYPE_UNSPECIFIED, DEPLOYMENT_TYPE_STAND_ALONE, DEPLOYMENT_TYPE_AZURE, " +
534-
"DEPLOYMENT_TYPE_K3S, DEPLOYMENT_TYPE_AWS, DEPLOYMENT_TYPE_K3S_AZURE, " +
535-
"DEPLOYMENT_TYPE_K3S_AWS",
532+
"This comes from the App Manifest.",
536533
},
537534
"device_id": {
538535
Type: schema.TypeString,
@@ -573,7 +570,7 @@ var AppInstSchema = map[string]*schema.Schema{
573570
MaxItems: 1,
574571
Description: "App Instance Logs related Configuration.",
575572
},
576-
"project_id": projectIdSchema,
573+
"project_id": projectIdComputedSchema,
577574
"purge": {
578575
Type: schema.TypeList,
579576
Computed: true,
@@ -606,9 +603,8 @@ var AppInstSchema = map[string]*schema.Schema{
606603
},
607604
"vminfo": {
608605
Type: schema.TypeList,
609-
Optional: true,
606+
Computed: true,
610607
Description: "Virtual machine info",
611608
Elem: appInstVMResourceSchema,
612-
MaxItems: 1,
613609
},
614610
}

schemas/network_instance.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ var NetworkInstanceSchema = map[string]*schema.Schema{
171171
Type: schema.TypeString,
172172
},
173173
},
174-
"project_id": projectIdSchema,
174+
"project_id": projectIdComputedSchema,
175175
"revision": revisionSchema,
176176
"tags": tagsSchema,
177177
"type": {

schemas/volume_instance.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ var VolumeInstanceSchema = map[string]*schema.Schema{
8383
Optional: true,
8484
Description: "Flag to enable the volume to be attached to multiple app instances",
8585
},
86-
"project_id": projectIdSchema,
86+
"project_id": projectIdComputedSchema,
8787
"purge": {
8888
Type: schema.TypeList,
8989
Computed: true,

0 commit comments

Comments
 (0)