1
1
package opennebula
2
2
3
3
import (
4
- "log"
5
-
6
4
"github.com/hashicorp/terraform/helper/schema"
7
5
"github.com/megamsys/opennebula-go/api"
8
6
"github.com/megamsys/opennebula-go/template"
9
7
"errors"
10
8
"strconv"
9
+ "log"
11
10
)
12
11
13
12
func resourceTemplate () * schema.Resource {
@@ -251,7 +250,7 @@ func resourceTemplate() *schema.Resource {
251
250
Optional : true ,
252
251
},
253
252
"nic" : {
254
- Type : schema .TypeList ,
253
+ Type : schema .TypeSet ,
255
254
Optional : true ,
256
255
Elem : & schema.Resource {
257
256
Schema : map [string ]* schema.Schema {
@@ -300,28 +299,12 @@ func getNestedSet(d *schema.ResourceData, k string) map[string]interface{} {
300
299
}
301
300
302
301
func resourceTemplateCreate (d * schema.ResourceData , meta interface {}) error {
303
- permissions := getNestedSet (d , "permissions" )
304
- context := getNestedSet (d , "context" )
305
- graphics := getNestedSet (d , "graphics" )
306
- disk := getNestedSet (d , "disk" )
307
- os := getNestedSet (d , "os" )
308
-
309
- nic := d .Get ("nic" ).([]interface {})
310
- nics := make ([]* template.NIC , len (nic ))
311
- for i , n := range nic {
312
- mapN := n .(* schema.Set ).List ()[0 ].(map [string ]interface {})
313
- nics [i ] = & template.NIC {
314
- Network : mapN ["network" ].(string ),
315
- Network_uname : mapN ["network_uname" ].(string ),
316
- }
317
- }
302
+ log .Println ("jason says: creating..." )
318
303
319
304
userTemplate := & template.UserTemplate {
320
305
T : meta .(* api.Rpc ),
321
306
Template : & template.Template {
322
307
Name : d .Get ("name" ).(string ),
323
-
324
- /*
325
308
Cpu : d .Get ("cpu" ).(string ),
326
309
Cpu_cost : d .Get ("cpu_cost" ).(string ),
327
310
Description : d .Get ("description" ).(string ),
@@ -336,11 +319,11 @@ func resourceTemplateCreate(d *schema.ResourceData, meta interface{}) error {
336
319
From_app_name : d .Get ("from_app_name" ).(string ),
337
320
Sched_requirments : d .Get ("sched_requirements" ).(string ),
338
321
Sched_ds_requirments : d .Get ("sched_ds_requirements" ).(string ),
339
- Nic: nics,
340
- */
341
322
},
342
323
}
343
324
325
+ // TODO: Clean up a bit
326
+ permissions := getNestedSet (d , "permissions" )
344
327
if permissions != nil {
345
328
userTemplate .Permissions = & template.Permissions {
346
329
Owner_U : permissions ["owner_u" ].(int ),
@@ -355,23 +338,23 @@ func resourceTemplateCreate(d *schema.ResourceData, meta interface{}) error {
355
338
}
356
339
}
357
340
341
+ context := getNestedSet (d , "context" )
358
342
if context != nil {
359
343
userTemplate .Template .Context = & template.Context {
360
344
Network : context ["network" ].(string ),
361
345
SSH_Public_key : context ["ssh_public_key" ].(string ),
362
- /*
363
346
Files : context ["files" ].(string ),
364
347
Set_Hostname : context ["set_hostname" ].(string ),
365
348
Node_Name : context ["node_name" ].(string ),
366
349
Accounts_id : context ["accounts_id" ].(string ),
367
350
Platform_id : context ["platform_id" ].(string ),
368
351
Assembly_id : context ["assembly_id" ].(string ),
369
- Assemblies_id: context["assembles_id "].(string),
352
+ Assemblies_id : context ["assemblies_id " ].(string ),
370
353
Org_id : context ["org_id" ].(string ),
371
- */
372
354
}
373
355
}
374
356
357
+ graphics := getNestedSet (d , "graphics" )
375
358
if graphics != nil {
376
359
userTemplate .Template .Graphics = & template.Graphics {
377
360
Listen : graphics ["listen" ].(string ),
@@ -381,6 +364,8 @@ func resourceTemplateCreate(d *schema.ResourceData, meta interface{}) error {
381
364
}
382
365
}
383
366
367
+
368
+ disk := getNestedSet (d , "disk" )
384
369
if disk != nil {
385
370
userTemplate .Template .Disk = & template.Disk {
386
371
Driver : disk ["driver" ].(string ),
@@ -390,21 +375,33 @@ func resourceTemplateCreate(d *schema.ResourceData, meta interface{}) error {
390
375
}
391
376
}
392
377
378
+
379
+ os := getNestedSet (d , "os" )
393
380
if os != nil {
394
381
userTemplate .Template .Os = & template.OS {
395
382
Arch : os ["arch" ].(string ),
396
383
}
397
384
}
398
385
386
+ nicList := d .Get ("nic" ).(* schema.Set ).List ()
387
+ nics := make ([]* template.NIC , len (nicList ))
388
+ for i , nic := range nicList {
389
+ mapN := nic .(map [string ]interface {})
390
+ nics [i ] = & template.NIC {
391
+ Network : mapN ["network" ].(string ),
392
+ Network_uname : mapN ["network_uname" ].(string ),
393
+ }
394
+ }
395
+ userTemplate .Template .Nic = nics
399
396
400
- xml , err := userTemplate .AllocateTemplate ()
397
+ xmlRpc , err := userTemplate .AllocateTemplate ()
401
398
if err != nil {
402
399
log .Println ("[FATAL] Could not allocate template" , err )
403
400
return err
404
401
}
405
402
406
- log .Println ("[INFO] Creating a template returned response" , xml )
407
- d .SetId (xml .(string ))
403
+ log .Println ("[INFO] Creating a template returned response" , xmlRpc )
404
+ d .SetId (xmlRpc .(string ))
408
405
409
406
return resourceTemplateRead (d , meta )
410
407
}
@@ -428,6 +425,7 @@ func resourceTemplateRead(d *schema.ResourceData, meta interface{}) error {
428
425
return errors .New ("No template with such name" )
429
426
}
430
427
428
+ // TODO: PK (user_id, name)
431
429
if len (userTemplates ) != 1 {
432
430
log .Printf ("[WARN] Reading template %s returned %d different templates\n " , name , len (userTemplates ))
433
431
}
@@ -442,31 +440,6 @@ func resourceTemplateRead(d *schema.ResourceData, meta interface{}) error {
442
440
d .Set ("reg_time" , t .RegTime )
443
441
d .Set ("name" , t .Name )
444
442
445
- /*
446
- d.Set("permissions", map[string]interface{}{
447
- "owner_u": t.Permissions.Owner_U,
448
- "owner_m": t.Permissions.Owner_M,
449
- "owner_a": t.Permissions.Owner_A,
450
- "group_u": t.Permissions.Group_U,
451
- "group_m": t.Permissions.Group_M,
452
- "group_a": t.Permissions.Group_A,
453
- "other_u": t.Permissions.Other_U,
454
- "other_m": t.Permissions.Other_M,
455
- "other_a": t.Permissions.Other_A,
456
- })
457
-
458
- d.Set("context", map[string]interface{}{
459
- "network": t.Template.Context.Network,
460
- "files": t.Template.Context.Files,
461
- "ssh_public_key": t.Template.Context.SSH_Public_key,
462
- "set_hostname": t.Template.Context.Set_Hostname,
463
- "node_name": t.Template.Context.Node_Name,
464
- "accounts_id": t.Template.Context.Accounts_id,
465
- "platform_id": t.Template.Context.Platform_id,
466
- "assembly_id": t.Template.Context.Assembly_id,
467
- "assemblies_id": t.Template.Context.Assemblies_id,
468
- "org_id": t.Template.Context.Org_id,
469
- })
470
443
d .Set ("cpu" , t .Template .Cpu )
471
444
d .Set ("cpu_cost" , t .Template .Cpu_cost )
472
445
d .Set ("description" , t .Template .Description )
@@ -477,38 +450,84 @@ func resourceTemplateRead(d *schema.ResourceData, meta interface{}) error {
477
450
d .Set ("sunstone_capacity_select" , t .Template .Sunstone_capacity_select )
478
451
d .Set ("sunstone_network_select" , t .Template .Sunstone_Network_select )
479
452
d .Set ("vcpu" , t .Template .VCpu )
480
- d.Set("graphics", map[string]interface{}{
481
- "listen": t.Template.Graphics.Listen,
482
- "port": t.Template.Graphics.Port,
483
- "type": t.Template.Graphics.Type,
484
- "random_passwd": t.Template.Graphics.RandomPassWD,
485
- })
486
- d.Set("disk", map[string]interface{}{
487
- "driver": t.Template.Disk.Driver,
488
- "image": t.Template.Disk.Image,
489
- "image_uname": t.Template.Disk.Image_Uname,
490
- "size": t.Template.Disk.Size,
491
- })
453
+ d .Set ("sched_requirements" , t .Template .Sched_requirments )
454
+ d .Set ("sched_ds_requirements" , t .Template .Sched_ds_requirments )
492
455
d .Set ("disk_cost" , t .Template .Disk_cost )
493
456
d .Set ("from_app" , t .Template .From_app )
494
457
d .Set ("from_app_name" , t .Template .From_app_name )
495
458
459
+ if t .Permissions != nil {
460
+ d .Set ("permissions" , []map [string ]interface {}{
461
+ {
462
+ "owner_u" : t .Permissions .Owner_U ,
463
+ "owner_m" : t .Permissions .Owner_M ,
464
+ "owner_a" : t .Permissions .Owner_A ,
465
+ "group_u" : t .Permissions .Group_U ,
466
+ "group_m" : t .Permissions .Group_M ,
467
+ "group_a" : t .Permissions .Group_A ,
468
+ "other_u" : t .Permissions .Other_U ,
469
+ "other_m" : t .Permissions .Other_M ,
470
+ "other_a" : t .Permissions .Other_A ,
471
+ },
472
+ })
473
+ }
474
+
475
+ if t .Template .Context != nil {
476
+ d .Set ("context" , []map [string ]interface {}{
477
+ {
478
+ "network" : t .Template .Context .Network ,
479
+ "files" : t .Template .Context .Files ,
480
+ "ssh_public_key" : t .Template .Context .SSH_Public_key ,
481
+ "set_hostname" : t .Template .Context .Set_Hostname ,
482
+ "node_name" : t .Template .Context .Node_Name ,
483
+ "accounts_id" : t .Template .Context .Accounts_id ,
484
+ "platform_id" : t .Template .Context .Platform_id ,
485
+ "assembly_id" : t .Template .Context .Assembly_id ,
486
+ "assemblies_id" : t .Template .Context .Assemblies_id ,
487
+ "org_id" : t .Template .Context .Org_id ,
488
+ },
489
+ })
490
+ }
491
+
492
+
493
+ if t .Template .Graphics != nil {
494
+ d .Set ("graphics" , []map [string ]interface {}{
495
+ {
496
+ "listen" : t .Template .Graphics .Listen ,
497
+ "port" : t .Template .Graphics .Port ,
498
+ "type" : t .Template .Graphics .Type ,
499
+ "random_passwd" : t .Template .Graphics .RandomPassWD ,
500
+ },
501
+ })
502
+ }
503
+
504
+ if t .Template .Disk != nil {
505
+ d .Set ("disk" , []map [string ]interface {}{
506
+ {
507
+ "driver" : t .Template .Disk .Driver ,
508
+ "image" : t .Template .Disk .Image ,
509
+ "image_uname" : t .Template .Disk .Image_Uname ,
510
+ "size" : t .Template .Disk .Size ,
511
+ },
512
+ })
513
+ }
514
+
496
515
nics := make ([]map [string ]interface {}, len (t .Template .Nic ))
497
516
for i , n := range t .Template .Nic {
498
517
nics [i ] = map [string ]interface {}{
499
518
"network" : n .Network ,
500
519
"network_uname" : n .Network_uname ,
501
520
}
502
521
}
503
- d.Set("nic", []interface{}{
522
+ d .Set ("nic" , nics )
504
523
505
- })
506
- d.Set("os", map[string]interface{}{
507
- "arch": t.Template.Os.Arch,
508
- })
509
- d.Set("sched_requirements", t.Template.Sched_requirments)
510
- d.Set("sched_ds_requirements", t.Template.Sched_ds_requirments )
511
- */
524
+ if t . Template . Os != nil {
525
+ d .Set ("os" , [] map [string ]interface {}{
526
+ {
527
+ "arch" : t . Template . Os . Arch ,
528
+ },
529
+ } )
530
+ }
512
531
513
532
return nil
514
533
}
@@ -521,7 +540,7 @@ func resourceTemplateDelete(d *schema.ResourceData, meta interface{}) error {
521
540
client := meta .(* api.Rpc )
522
541
err := resourceTemplateRead (d , meta )
523
542
if err != nil {
524
- return err
543
+ return nil
525
544
}
526
545
527
546
intId , err := strconv .Atoi (d .Id ())
0 commit comments