@ -155,6 +155,32 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
}
}
}
}
createReqPPC . Interfaces = make ( [ ] kvmppc . Interface , 0 )
if networks , ok := d . GetOk ( "network" ) ; ok {
if networks . ( * schema . Set ) . Len ( ) > 0 {
ns := networks . ( * schema . Set ) . List ( )
interfaces := make ( [ ] kvmppc . Interface , 0 )
for _ , elem := range ns {
netInterfaceVal := elem . ( map [ string ] interface { } )
reqInterface := kvmppc . Interface {
NetType : netInterfaceVal [ "net_type" ] . ( string ) ,
NetID : uint64 ( netInterfaceVal [ "net_id" ] . ( int ) ) ,
}
ipaddr , ipSet := netInterfaceVal [ "ip_address" ]
if ipSet {
reqInterface . IPAddr = ipaddr . ( string )
}
interfaces = append ( interfaces , reqInterface )
}
createReqPPC . Interfaces = interfaces
}
}
argVal , ok = d . GetOk ( "cloud_init" )
argVal , ok = d . GetOk ( "cloud_init" )
if ok {
if ok {
userdata := argVal . ( string )
userdata := argVal . ( string )
@ -242,33 +268,79 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
}
}
}
}
// Note bene: we created compute in a STOPPED state (this is required to properly attach 1st network interface),
if disks , ok := d . GetOk ( "disks" ) ; ok {
// now we need to start it before we report the sequence complete
log . Debugf ( "resourceComputeCreate: Create disks on ComputeID: %d" , computeId )
if d . Get ( "started" ) . ( bool ) {
addedDisks := disks . ( [ ] interface { } )
req := compute . StartRequest { ComputeID : computeId }
if len ( addedDisks ) > 0 {
log . Debugf ( "resourceComputeCreate: starting Compute ID %d after completing its resource configuration" , computeId )
for _ , disk := range addedDisks {
if _ , err := c . CloudAPI ( ) . Compute ( ) . Start ( ctx , req ) ; err != nil {
diskConv := disk . ( map [ string ] interface { } )
warnings . Add ( err )
req := compute . DiskAddRequest {
ComputeID : computeId ,
DiskName : diskConv [ "disk_name" ] . ( string ) ,
Size : uint64 ( diskConv [ "size" ] . ( int ) ) ,
}
if diskConv [ "sep_id" ] . ( int ) != 0 {
req . SepID = uint64 ( diskConv [ "sep_id" ] . ( int ) )
}
if diskConv [ "disk_type" ] . ( string ) != "" {
req . DiskType = diskConv [ "disk_type" ] . ( string )
}
if diskConv [ "pool" ] . ( string ) != "" {
req . Pool = diskConv [ "pool" ] . ( string )
}
if diskConv [ "desc" ] . ( string ) != "" {
req . Description = diskConv [ "desc" ] . ( string )
}
if diskConv [ "image_id" ] . ( int ) != 0 {
req . ImageID = uint64 ( diskConv [ "image_id" ] . ( int ) )
}
_ , err := c . CloudAPI ( ) . Compute ( ) . DiskAdd ( ctx , req )
if err != nil {
cleanup = true
return diag . FromErr ( err )
}
}
}
}
}
}
if enabled , ok := d . GetOk ( "enabled" ) ; ok {
if ! cleanup {
if enabled . ( bool ) {
if enabled , ok := d . GetOk ( "enabled" ) ; ok {
req := compute . EnableRequest { ComputeID : computeId }
if enabled . ( bool ) {
log . Debugf ( "resourceComputeCreate: enable=%t Compute ID %d after completing its resource configuration" , enabled , computeId )
req := compute . EnableRequest { ComputeID : computeId }
if _ , err := c . CloudAPI ( ) . Compute ( ) . Enable ( ctx , req ) ; err != nil {
log . Debugf ( "resourceComputeCreate: enable=%t Compute ID %d after completing its resource configuration" , enabled , computeId )
warnings . Add ( err )
if _ , err := c . CloudAPI ( ) . Compute ( ) . Enable ( ctx , req ) ; err != nil {
warnings . Add ( err )
}
} else {
req := compute . DisableRequest { ComputeID : computeId }
log . Debugf ( "resourceComputeCreate: enable=%t Compute ID %d after completing its resource configuration" , enabled , computeId )
if _ , err := c . CloudAPI ( ) . Compute ( ) . Disable ( ctx , req ) ; err != nil {
warnings . Add ( err )
}
}
}
} else {
}
req := compute . DisableRequest { ComputeID : computeId }
log . Debugf ( "resourceComputeCreate: enable=%t Compute ID %d after completing its resource configuration" , enabled , computeId )
// Note bene: we created compute in a STOPPED state (this is required to properly attach 1st network interface),
if _ , err := c . CloudAPI ( ) . Compute ( ) . Disable ( ctx , req ) ; err != nil {
// now we need to start it before we report the sequence complete
warnings . Add ( err )
if start , ok := d . GetOk ( "started" ) ; ok {
if start . ( bool ) {
req := compute . StartRequest { ComputeID : computeId }
log . Debugf ( "resourceComputeCreate: starting Compute ID %d after completing its resource configuration" , computeId )
if _ , err := c . CloudAPI ( ) . Compute ( ) . Start ( ctx , req ) ; err != nil {
warnings . Add ( err )
}
}
if ! start . ( bool ) {
req := compute . StopRequest { ComputeID : computeId }
log . Debugf ( "resourceComputeCreate: stoping Compute ID %d after completing its resource configuration" , computeId )
if _ , err := c . CloudAPI ( ) . Compute ( ) . Stop ( ctx , req ) ; err != nil {
warnings . Add ( err )
}
}
}
}
}
}
if ! cleanup {
if affinityLabel , ok := d . GetOk ( "affinity_label" ) ; ok {
if affinityLabel , ok := d . GetOk ( "affinity_label" ) ; ok {
req := compute . AffinityLabelSetRequest {
req := compute . AffinityLabelSetRequest {
ComputeID : computeId ,
ComputeID : computeId ,
@ -281,41 +353,6 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
}
}
}
}
if disks , ok := d . GetOk ( "disks" ) ; ok {
log . Debugf ( "resourceComputeCreate: Create disks on ComputeID: %d" , computeId )
addedDisks := disks . ( [ ] interface { } )
if len ( addedDisks ) > 0 {
for _ , disk := range addedDisks {
diskConv := disk . ( map [ string ] interface { } )
req := compute . DiskAddRequest {
ComputeID : computeId ,
DiskName : diskConv [ "disk_name" ] . ( string ) ,
Size : uint64 ( diskConv [ "size" ] . ( int ) ) ,
SepID : uint64 ( diskConv [ "sep_id" ] . ( int ) ) ,
}
if diskConv [ "disk_type" ] . ( string ) != "" {
req . DiskType = diskConv [ "disk_type" ] . ( string )
}
if diskConv [ "pool" ] . ( string ) != "" {
req . Pool = diskConv [ "pool" ] . ( string )
}
if diskConv [ "desc" ] . ( string ) != "" {
req . Description = diskConv [ "desc" ] . ( string )
}
if diskConv [ "image_id" ] . ( int ) != 0 {
req . ImageID = uint64 ( diskConv [ "image_id" ] . ( int ) )
}
_ , err := c . CloudAPI ( ) . Compute ( ) . DiskAdd ( ctx , req )
if err != nil {
cleanup = true
return diag . FromErr ( err )
}
}
}
}
if ars , ok := d . GetOk ( "affinity_rules" ) ; ok {
if ars , ok := d . GetOk ( "affinity_rules" ) ; ok {
log . Debugf ( "resourceComputeCreate: Create affinity rules on ComputeID: %d" , computeId )
log . Debugf ( "resourceComputeCreate: Create affinity rules on ComputeID: %d" , computeId )
addedAR := ars . ( [ ] interface { } )
addedAR := ars . ( [ ] interface { } )
@ -361,133 +398,134 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
}
}
}
}
}
}
}
if tags , ok := d . GetOk ( "tags" ) ; ok {
if tags , ok := d . GetOk ( "tags" ) ; ok {
log . Debugf ( "resourceComputeCreate: Create tags on ComputeID: %d" , computeId )
log . Debugf ( "resourceComputeCreate: Create tags on ComputeID: %d" , computeId )
addedTags := tags . ( * schema . Set ) . List ( )
addedTags := tags . ( * schema . Set ) . List ( )
if len ( addedTags ) > 0 {
if len ( addedTags ) > 0 {
for _ , tagInterface := range addedTags {
for _ , tagInterface := range addedTags {
tagItem := tagInterface . ( map [ string ] interface { } )
tagItem := tagInterface . ( map [ string ] interface { } )
req := compute . TagAddRequest {
req := compute . TagAddRequest {
ComputeID : computeId ,
ComputeID : computeId ,
Key : tagItem [ "key" ] . ( string ) ,
Key : tagItem [ "key" ] . ( string ) ,
Value : tagItem [ "value" ] . ( string ) ,
Value : tagItem [ "value" ] . ( string ) ,
}
}
_ , err := c . CloudAPI ( ) . Compute ( ) . TagAdd ( ctx , req )
_ , err := c . CloudAPI ( ) . Compute ( ) . TagAdd ( ctx , req )
if err != nil {
if err != nil {
warnings . Add ( err )
warnings . Add ( err )
}
}
}
}
}
}
}
}
if pfws , ok := d . GetOk ( "port_forwarding" ) ; ok {
if pfws , ok := d . GetOk ( "port_forwarding" ) ; ok {
log . Debugf ( "resourceComputeCreate: Create port farwarding on ComputeID: %d" , computeId )
log . Debugf ( "resourceComputeCreate: Create port farwarding on ComputeID: %d" , computeId )
addedPfws := pfws . ( * schema . Set ) . List ( )
addedPfws := pfws . ( * schema . Set ) . List ( )
if len ( addedPfws ) > 0 {
if len ( addedPfws ) > 0 {
for _ , pfwInterface := range addedPfws {
for _ , pfwInterface := range addedPfws {
pfwItem := pfwInterface . ( map [ string ] interface { } )
pfwItem := pfwInterface . ( map [ string ] interface { } )
req := compute . PFWAddRequest {
req := compute . PFWAddRequest {
ComputeID : computeId ,
ComputeID : computeId ,
PublicPortStart : uint64 ( pfwItem [ "public_port_start" ] . ( int ) ) ,
PublicPortStart : uint64 ( pfwItem [ "public_port_start" ] . ( int ) ) ,
PublicPortEnd : int64 ( pfwItem [ "public_port_end" ] . ( int ) ) ,
LocalBasePort : uint64 ( pfwItem [ "local_port" ] . ( int ) ) ,
LocalBasePort : uint64 ( pfwItem [ "local_port" ] . ( int ) ) ,
Proto : pfwItem [ "proto" ] . ( string ) ,
Proto : pfwItem [ "proto" ] . ( string ) ,
}
}
if pfwItem [ "public_port_end" ] . ( int ) != 0 {
req . PublicPortEnd = int64 ( pfwItem [ "public_port_end" ] . ( int ) )
}
_ , err := c . CloudAPI ( ) . Compute ( ) . PFWAdd ( ctx , req )
_ , err := c . CloudAPI ( ) . Compute ( ) . PFWAdd ( ctx , req )
if err != nil {
if err != nil {
warnings . Add ( err )
warnings . Add ( err )
}
}
}
}
}
}
}
}
if userAcess , ok := d . GetOk ( "user_access" ) ; ok {
if userAcess , ok := d . GetOk ( "user_access" ) ; ok {
log . Debugf ( "resourceComputeCreate: Create user access on ComputeID: %d" , computeId )
log . Debugf ( "resourceComputeCreate: Create user access on ComputeID: %d" , computeId )
usersAcess := userAcess . ( * schema . Set ) . List ( )
usersAcess := userAcess . ( * schema . Set ) . List ( )
if len ( usersAcess ) > 0 {
if len ( usersAcess ) > 0 {
for _ , userAcessInterface := range usersAcess {
for _ , userAcessInterface := range usersAcess {
userAccessItem := userAcessInterface . ( map [ string ] interface { } )
userAccessItem := userAcessInterface . ( map [ string ] interface { } )
req := compute . UserGrantRequest {
req := compute . UserGrantRequest {
ComputeID : computeId ,
ComputeID : computeId ,
Username : userAccessItem [ "username" ] . ( string ) ,
Username : userAccessItem [ "username" ] . ( string ) ,
AccessType : userAccessItem [ "access_type" ] . ( string ) ,
AccessType : userAccessItem [ "access_type" ] . ( string ) ,
}
_ , err := c . CloudAPI ( ) . Compute ( ) . UserGrant ( ctx , req )
if err != nil {
warnings . Add ( err )
}
}
}
}
}
_ , err := c . CloudAPI ( ) . Compute ( ) . UserGrant ( ctx , req )
if snapshotList , ok := d . GetOk ( "snapshot" ) ; ok {
if err != nil {
log . Debugf ( "resourceComputeCreate: Create snapshot on ComputeID: %d" , computeId )
warnings . Add ( err )
snapshots := snapshotList . ( * schema . Set ) . List ( )
if len ( snapshots ) > 0 {
for _ , snapshotInterface := range snapshots {
snapshotItem := snapshotInterface . ( map [ string ] interface { } )
req := compute . SnapshotCreateRequest {
ComputeID : computeId ,
Label : snapshotItem [ "label" ] . ( string ) ,
}
_ , err := c . CloudAPI ( ) . Compute ( ) . SnapshotCreate ( ctx , req )
if err != nil {
warnings . Add ( err )
}
}
}
}
}
}
}
}
if snapshotList , ok := d . GetOk ( "snapshot" ) ; ok {
if cdtList , ok := d . GetOk ( "cd" ) ; ok {
log . Debugf ( "resourceComputeCreate: Create snapshot on ComputeID: %d" , computeId )
log . Debugf ( "resourceComputeCreate: Create cd on ComputeID: %d" , computeId )
snapshots := snapshotList . ( * schema . Set ) . List ( )
cds := cdtList . ( * schema . Set ) . List ( )
if len ( snapshots ) > 0 {
if len ( cds ) > 0 {
for _ , snapshotInterface := range snapshots {
snapshotItem := cds [ 0 ] . ( map [ string ] interface { } )
snapshotItem := snapshotInterface . ( map [ string ] interface { } )
req := compute . CDInsertRequest {
req := compute . SnapshotCreateRequest {
ComputeID : computeId ,
ComputeID : computeId ,
Label: snapshotItem [ "label" ] . ( string ) ,
CDROMID: uint64 ( snapshotItem [ "cdrom_id" ] . ( int ) ) ,
}
}
_ , err := c . CloudAPI ( ) . Compute ( ) . SnapshotCreate ( ctx , req )
_ , err := c . CloudAPI ( ) . Compute ( ) . CDInsert ( ctx , req )
if err != nil {
if err != nil {
warnings . Add ( err )
warnings . Add ( err )
}
}
}
}
}
}
}
if cdtList , ok := d . GetOk ( "cd" ) ; ok {
if d . Get ( "pin_to_stack" ) . ( bool ) {
log . Debugf ( "resourceComputeCreate: Create cd on ComputeID: %d" , computeId )
req := compute . PinToStackRequest {
cds := cdtList . ( * schema . Set ) . List ( )
if len ( cds ) > 0 {
snapshotItem := cds [ 0 ] . ( map [ string ] interface { } )
req := compute . CDInsertRequest {
ComputeID : computeId ,
ComputeID : computeId ,
CDROMID : uint64 ( snapshotItem [ "cdrom_id" ] . ( int ) ) ,
}
}
_ , err := c . CloudAPI ( ) . Compute ( ) . PinToStack ( ctx , req )
_ , err := c . CloudAPI ( ) . Compute ( ) . CDInsert ( ctx , req )
if err != nil {
if err != nil {
warnings . Add ( err )
warnings . Add ( err )
}
}
}
}
}
if d . Get ( "pin_to_stack" ) . ( bool ) == true {
req := compute . PinToStackRequest {
ComputeID : computeId ,
}
_ , err := c . CloudAPI ( ) . Compute ( ) . PinToStack ( ctx , req )
if err != nil {
warnings . Add ( err )
}
}
if d . Get ( "pause" ) . ( bool ) == true {
if d . Get ( "pause" ) . ( bool ) {
req := compute . PauseRequest {
req := compute . PauseRequest {
ComputeID : computeId ,
ComputeID : computeId ,
}
}
_ , err := c . CloudAPI ( ) . Compute ( ) . Pause ( ctx , req )
_ , err := c . CloudAPI ( ) . Compute ( ) . Pause ( ctx , req )
if err != nil {
if err != nil {
warnings . Add ( err )
warnings . Add ( err )
}
}
}
}
}
log . Debugf ( "resourceComputeCreate: new Compute ID %d, name %s creation sequence complete" , computeId , d . Get ( "name" ) . ( string ) )
log . Debugf ( "resourceComputeCreate: new Compute ID %d, name %s creation sequence complete" , computeId , d . Get ( "name" ) . ( string ) )
// We may reuse dataSourceComputeRead here as we maintain similarity
// We may reuse dataSourceComputeRead here as we maintain similarity
// between Compute resource and Compute data source schemas
// between Compute resource and Compute data source schemas
// Compute read function will also update resource ID on success, so that Terraform
// Compute read function will also update resource ID on success, so that Terraform
// will know the resource exists
// will know the resource exists
defer resourceComputeRead ( ctx , d , m )
return append ( warnings . Get ( ) , resourceComputeRead ( ctx , d , m ) ... )
return warnings . Get ( )
}
}
func resourceComputeRead ( ctx context . Context , d * schema . ResourceData , m interface { } ) diag . Diagnostics {
func resourceComputeRead ( ctx context . Context , d * schema . ResourceData , m interface { } ) diag . Diagnostics {
@ -498,6 +536,7 @@ func resourceComputeRead(ctx context.Context, d *schema.ResourceData, m interfac
computeRec , err := utilityComputeCheckPresence ( ctx , d , m )
computeRec , err := utilityComputeCheckPresence ( ctx , d , m )
if err != nil {
if err != nil {
d . SetId ( "" )
return diag . FromErr ( err )
return diag . FromErr ( err )
}
}
@ -601,6 +640,76 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
return diag . FromErr ( err )
return diag . FromErr ( err )
}
}
hasChanged := false
// check compute statuses
switch computeRec . Status {
case status . Deleted :
if restore , ok := d . GetOk ( "restore" ) ; ok && restore . ( bool ) {
restoreReq := compute . RestoreRequest { ComputeID : computeRec . ID }
_ , err := c . CloudAPI ( ) . Compute ( ) . Restore ( ctx , restoreReq )
if err != nil {
d . SetId ( "" )
return diag . FromErr ( err )
}
}
if enabled , ok := d . GetOk ( "enabled" ) ; ok {
if enabled . ( bool ) {
enableReq := compute . EnableRequest { ComputeID : computeRec . ID }
_ , err = c . CloudAPI ( ) . Compute ( ) . Enable ( ctx , enableReq )
if err != nil {
return diag . FromErr ( err )
}
}
if ! enabled . ( bool ) {
enableReq := compute . DisableRequest { ComputeID : computeRec . ID }
_ , err = c . CloudAPI ( ) . Compute ( ) . Disable ( ctx , enableReq )
if err != nil {
return diag . FromErr ( err )
}
}
}
if start , ok := d . GetOk ( "started" ) ; ok {
if start . ( bool ) {
req := compute . StartRequest { ComputeID : computeRec . ID }
if _ , err := c . CloudAPI ( ) . Compute ( ) . Start ( ctx , req ) ; err != nil {
return diag . FromErr ( err )
}
}
if ! start . ( bool ) {
req := compute . StopRequest { ComputeID : computeRec . ID }
if _ , err := c . CloudAPI ( ) . Compute ( ) . Stop ( ctx , req ) ; err != nil {
return diag . FromErr ( err )
}
}
}
hasChanged = true
case status . Destroyed :
d . SetId ( "" )
return diag . Errorf ( "The resource cannot be updated because it has been destroyed" )
// return resourceComputeCreate(ctx, d, m)
case status . Disabled :
log . Debugf ( "The compute is in status: %s, may troubles can be occured with update. Please, enable compute first." , computeRec . Status )
case status . Redeploying :
case status . Deleting :
case status . Destroying :
return diag . Errorf ( "The compute is in progress with status: %s" , computeRec . Status )
case status . Modeled :
return diag . Errorf ( "The compute is in status: %s, please, contant the support for more information" , computeRec . Status )
}
if hasChanged {
computeRec , err = utilityComputeCheckPresence ( ctx , d , m )
if err != nil {
return diag . FromErr ( err )
}
}
if d . HasChange ( "enabled" ) {
if d . HasChange ( "enabled" ) {
enabled := d . Get ( "enabled" ) . ( bool )
enabled := d . Get ( "enabled" ) . ( bool )
if enabled {
if enabled {
@ -623,34 +732,22 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
log . Debugf ( "resourceComputeUpdate: enable=%s Compute ID %v after completing its resource configuration" , d . Id ( ) , enabled )
log . Debugf ( "resourceComputeUpdate: enable=%s Compute ID %v after completing its resource configuration" , d . Id ( ) , enabled )
}
}
// check compute statuses
if d . HasChange ( "started" ) {
switch computeRec . Status {
start := d . Get ( "started" ) . ( bool )
case status . Deleted :
if start {
restoreReq := compute . RestoreRequest { ComputeID : computeRec . ID }
req := compute . StartRequest { ComputeID : computeRec . ID }
enableReq := compute . EnableRequest { ComputeID : computeRec . ID }
_ , err := c . CloudAPI ( ) . Compute ( ) . Restore( ctx , restoreReq )
if _ , err := c . CloudAPI ( ) . Compute ( ) . Start( ctx , req ) ; err != nil {
if err != nil {
return diag . FromErr ( err )
return diag . FromErr ( err )
}
}
}
if ! start {
req := compute . StopRequest { ComputeID : computeRec . ID }
_ , err = c . CloudAPI ( ) . Compute ( ) . Enable ( ctx , enableReq )
if _ , err : = c . CloudAPI ( ) . Compute ( ) . Stop( ctx , req ) ; err != nil {
if err != nil {
return diag . FromErr ( err )
return diag . FromErr ( err )
}
}
}
case status . Destroyed :
d . SetId ( "" )
return diag . Errorf ( "The resource cannot be updated because it has been destroyed" )
// return resourceComputeCreate(ctx, d, m)
case status . Disabled :
log . Debugf ( "The compute is in status: %s, may troubles can be occured with update. Please, enable compute first." , computeRec . Status )
case status . Redeploying :
case status . Deleting :
case status . Destroying :
return diag . Errorf ( "The compute is in progress with status: %s" , computeRec . Status )
case status . Modeled :
return diag . Errorf ( "The compute is in status: %s, please, contant the support for more information" , computeRec . Status )
}
}
doUpdate := false
doUpdate := false
@ -729,14 +826,16 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
}
}
}
}
if d . HasChange ( "description" ) || d . HasChange ( "name" ) {
if d . HasChange s( "description" , "name" ) {
req := compute . UpdateRequest {
req := compute . UpdateRequest {
ComputeID : computeRec . ID ,
ComputeID : computeRec . ID ,
Name : d . Get ( "name" ) . ( string ) ,
}
}
if desc , ok := d . GetOk ( "description" ) ; ok {
if d . HasChange ( "name" ) {
req . Description = desc . ( string )
req . Name = d . Get ( "name" ) . ( string )
}
if d . HasChange ( "description" ) {
req . Description = d . Get ( "description" ) . ( string )
}
}
if _ , err := c . CloudAPI ( ) . Compute ( ) . Update ( ctx , req ) ; err != nil {
if _ , err := c . CloudAPI ( ) . Compute ( ) . Update ( ctx , req ) ; err != nil {
@ -835,9 +934,11 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
ComputeID : computeRec . ID ,
ComputeID : computeRec . ID ,
DiskName : diskConv [ "disk_name" ] . ( string ) ,
DiskName : diskConv [ "disk_name" ] . ( string ) ,
Size : uint64 ( diskConv [ "size" ] . ( int ) ) ,
Size : uint64 ( diskConv [ "size" ] . ( int ) ) ,
SepID : uint64 ( diskConv [ "sep_id" ] . ( int ) ) ,
}
}
if diskConv [ "sep_id" ] . ( int ) != 0 {
req . SepID = uint64 ( diskConv [ "sep_id" ] . ( int ) )
}
if diskConv [ "disk_type" ] . ( string ) != "" {
if diskConv [ "disk_type" ] . ( string ) != "" {
req . DiskType = diskConv [ "disk_type" ] . ( string )
req . DiskType = diskConv [ "disk_type" ] . ( string )
}
}
@ -1267,7 +1368,7 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
if d . HasChange ( "pin_to_stack" ) {
if d . HasChange ( "pin_to_stack" ) {
oldPin , newPin := d . GetChange ( "pin_to_stack" )
oldPin , newPin := d . GetChange ( "pin_to_stack" )
if oldPin . ( bool ) == true && newPin . ( bool ) == false {
if ! newPin . ( bool ) {
req := compute . UnpinFromStackRequest {
req := compute . UnpinFromStackRequest {
ComputeID : computeRec . ID ,
ComputeID : computeRec . ID ,
}
}
@ -1277,7 +1378,7 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
return diag . FromErr ( err )
return diag . FromErr ( err )
}
}
}
}
if oldPin . ( bool ) == false && newPin . ( bool ) == true {
if ! oldPin . ( bool ) {
req := compute . PinToStackRequest {
req := compute . PinToStackRequest {
ComputeID : computeRec . ID ,
ComputeID : computeRec . ID ,
}
}
@ -1291,7 +1392,7 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
if d . HasChange ( "pause" ) {
if d . HasChange ( "pause" ) {
oldPause , newPause := d . GetChange ( "pause" )
oldPause , newPause := d . GetChange ( "pause" )
if oldPause . ( bool ) == true && newPause . ( bool ) == false {
if ! newPause . ( bool ) {
req := compute . ResumeRequest {
req := compute . ResumeRequest {
ComputeID : computeRec . ID ,
ComputeID : computeRec . ID ,
}
}
@ -1300,7 +1401,7 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
return diag . FromErr ( err )
return diag . FromErr ( err )
}
}
}
}
if oldPause . ( bool ) == false && newPause . ( bool ) == true {
if ! oldPause . ( bool ) {
req := compute . PauseRequest {
req := compute . PauseRequest {
ComputeID : computeRec . ID ,
ComputeID : computeRec . ID ,
}
}
@ -1313,8 +1414,8 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
}
}
if d . HasChange ( "reset" ) {
if d . HasChange ( "reset" ) {
oldReset , newReset := d . GetChange ( "reset" )
_ , newReset := d . GetChange ( "reset" )
if oldReset. ( bool ) == false && newReset. ( bool ) == true {
if newReset. ( bool ) {
req := compute . ResetRequest {
req := compute . ResetRequest {
ComputeID : computeRec . ID ,
ComputeID : computeRec . ID ,
}
}
@ -1394,8 +1495,8 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
// we may reuse dataSourceComputeRead here as we maintain similarity
// we may reuse dataSourceComputeRead here as we maintain similarity
// between Compute resource and Compute data source schemas
// between Compute resource and Compute data source schemas
defer resourceComputeRead ( ctx , d , m )
return warnings . Get ( )
return append ( warnings . Get ( ) , resourceComputeRead ( ctx , d , m ) ... )
}
}
func isChangeDisk ( els [ ] interface { } , el interface { } ) bool {
func isChangeDisk ( els [ ] interface { } , el interface { } ) bool {
@ -1456,6 +1557,8 @@ func resourceComputeDelete(ctx context.Context, d *schema.ResourceData, m interf
return diag . FromErr ( err )
return diag . FromErr ( err )
}
}
d . SetId ( "" )
return nil
return nil
}
}
@ -1504,7 +1607,6 @@ func disksSubresourceSchemaMake() map[string]*schema.Schema {
} ,
} ,
"permanently" : {
"permanently" : {
Type : schema . TypeBool ,
Type : schema . TypeBool ,
Computed : true ,
Optional : true ,
Optional : true ,
Description : "Disk deletion status" ,
Description : "Disk deletion status" ,
} ,
} ,
@ -1877,6 +1979,12 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema {
Default : false ,
Default : false ,
} ,
} ,
"restore" : {
Type : schema . TypeBool ,
Optional : true ,
Default : false ,
} ,
"auto_start" : {
"auto_start" : {
Type : schema . TypeBool ,
Type : schema . TypeBool ,
Optional : true ,
Optional : true ,