4.9.1
This commit is contained in:
@@ -7,7 +7,6 @@ import (
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/image"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/flattens"
|
||||
)
|
||||
|
||||
func flattenImage(d *schema.ResourceData, img *image.RecordImage) {
|
||||
@@ -163,8 +162,8 @@ func flattenImageListStacks(stack *image.ListStacks) []map[string]interface{} {
|
||||
temp := make([]map[string]interface{}, 0, len(stack.Data))
|
||||
for _, item := range stack.Data {
|
||||
t := map[string]interface{}{
|
||||
"ckey": item.CKey,
|
||||
"meta": flattens.FlattenMeta(item.Meta),
|
||||
"ckey": item.CKey,
|
||||
//"meta": flattens.FlattenMeta(item.Meta),
|
||||
"api_url": item.APIURL,
|
||||
"api_key": item.APIKey,
|
||||
"app_id": item.AppID,
|
||||
|
||||
@@ -34,6 +34,7 @@ package image
|
||||
import (
|
||||
"context"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
@@ -96,8 +97,8 @@ func resourceImageCreate(ctx context.Context, d *schema.ResourceData, m interfac
|
||||
|
||||
var w dc.Warnings
|
||||
|
||||
if _, ok := d.GetOk("accounts"); ok {
|
||||
if err := resourceImageSetAccess(ctx, d, m); err != nil {
|
||||
if _, ok := d.GetOk("shared_with"); ok {
|
||||
if err := resourceImageShare(ctx, d, m); err != nil {
|
||||
w.Add(err)
|
||||
}
|
||||
}
|
||||
@@ -203,13 +204,6 @@ func resourceImageUpdate(ctx context.Context, d *schema.ResourceData, m interfac
|
||||
}
|
||||
}
|
||||
|
||||
if d.HasChange("accounts") {
|
||||
err := resourceImageChangeAccess(ctx, d, m)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -243,15 +237,44 @@ func resourceImageChangeEnabled(ctx context.Context, d *schema.ResourceData, m i
|
||||
func resourceImageShare(ctx context.Context, d *schema.ResourceData, m interface{}) error {
|
||||
log.Debugf("resourceImageShare: called for %s, id: %s", d.Get("name").(string), d.Id())
|
||||
c := m.(*controller.ControllerCfg)
|
||||
|
||||
imageID, _ := strconv.ParseUint(d.Id(), 10, 64)
|
||||
|
||||
sharedWith := d.Get("shared_with").([]interface{})
|
||||
if len(sharedWith) == 0 {
|
||||
req := image.RevokeAccessRequest{
|
||||
ImageID: imageID,
|
||||
AccountIDs: []int64{-1},
|
||||
}
|
||||
_, err := c.CloudBroker().Image().RevokeAccess(ctx, req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
req := image.ShareRequest{
|
||||
ImageId: uint64(d.Get("image_id").(int)),
|
||||
ImageId: imageID,
|
||||
}
|
||||
accIds := []uint64{}
|
||||
for _, accId := range d.Get("shared_with").([]interface{}) {
|
||||
for _, accId := range sharedWith {
|
||||
accIds = append(accIds, uint64(accId.(int)))
|
||||
}
|
||||
req.AccountIDs = accIds
|
||||
|
||||
getReq := image.GetRequest{ImageID: imageID}
|
||||
|
||||
for {
|
||||
image, err := c.CloudBroker().Image().Get(ctx, getReq)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if image.Status != "CREATING" {
|
||||
break
|
||||
}
|
||||
time.Sleep(time.Second * 10)
|
||||
}
|
||||
|
||||
_, err := c.CloudBroker().Image().Share(ctx, req)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -345,84 +368,6 @@ func resourceImageEdit(ctx context.Context, d *schema.ResourceData, m interface{
|
||||
return nil
|
||||
}
|
||||
|
||||
func resourceImageChangeAccess(ctx context.Context, d *schema.ResourceData, m interface{}) error {
|
||||
log.Debugf("resourceImageChangeAccess: called for %s, id: %s", d.Get("name").(string), d.Id())
|
||||
c := m.(*controller.ControllerCfg)
|
||||
|
||||
imageId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
||||
|
||||
oldSet, newSet := d.GetChange("accounts")
|
||||
|
||||
revokeAccess := (oldSet.(*schema.Set).Difference(newSet.(*schema.Set))).List()
|
||||
revokeAccounts := make([]int64, 0, len(revokeAccess))
|
||||
if newSet.(*schema.Set).Len() == 0 {
|
||||
revokeAccounts = append(revokeAccounts, -1)
|
||||
} else if len(revokeAccess) > 0 {
|
||||
for _, accountId := range revokeAccess {
|
||||
revokeAccounts = append(revokeAccounts, accountId.(int64))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
req := image.RevokeAccessRequest{
|
||||
ImageID: imageId,
|
||||
AccountIDs: revokeAccounts,
|
||||
}
|
||||
|
||||
_, err := c.CloudBroker().Image().RevokeAccess(ctx, req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
addedAccess := (newSet.(*schema.Set).Difference(oldSet.(*schema.Set))).List()
|
||||
grantAccounts := make([]int64, 0, len(addedAccess))
|
||||
if newSet.(*schema.Set).Len() == 0 {
|
||||
grantAccounts = append(grantAccounts, -1)
|
||||
} else if len(addedAccess) > 0 {
|
||||
for _, accountId := range addedAccess {
|
||||
grantAccounts = append(grantAccounts, accountId.(int64))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// req := image.GrantAccessRequest{
|
||||
// ImageID: imageId,
|
||||
// AccountIDs: grantAccounts,
|
||||
// }
|
||||
|
||||
// _, err := c.CloudBroker().Image().GrantAccess(ctx, req)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func resourceImageSetAccess(ctx context.Context, d *schema.ResourceData, m interface{}) error {
|
||||
log.Debugf("resourceImageSetAccess: called for %s, id: %s", d.Get("name").(string), d.Id())
|
||||
c := m.(*controller.ControllerCfg)
|
||||
|
||||
imageId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
||||
|
||||
accounts := d.Get("accounts").([]interface{})
|
||||
accountIDs := make([]int64, 0, len(accounts))
|
||||
for _, accountId := range accounts {
|
||||
accountIDs = append(accountIDs, accountId.(int64))
|
||||
}
|
||||
|
||||
req := image.GrantAccessRequest{
|
||||
ImageID: imageId,
|
||||
AccountIDs: accountIDs,
|
||||
}
|
||||
|
||||
_, err := c.CloudBroker().Image().GrantAccess(ctx, req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func ResourceImage() *schema.Resource {
|
||||
return &schema.Resource{
|
||||
SchemaVersion: 1,
|
||||
|
||||
@@ -131,8 +131,8 @@ func resourceImageFromBlankComputeCreate(ctx context.Context, d *schema.Resource
|
||||
|
||||
var w dc.Warnings
|
||||
|
||||
if _, ok := d.GetOk("accounts"); ok {
|
||||
if err := resourceImageSetAccess(ctx, d, m); err != nil {
|
||||
if _, ok := d.GetOk("shared_with"); ok {
|
||||
if err := resourceImageShare(ctx, d, m); err != nil {
|
||||
w.Add(err)
|
||||
}
|
||||
}
|
||||
@@ -249,8 +249,8 @@ func resourceImageFromBlankComputeUpdate(ctx context.Context, d *schema.Resource
|
||||
}
|
||||
}
|
||||
|
||||
if d.HasChange("accounts") {
|
||||
err := resourceImageChangeAccess(ctx, d, m)
|
||||
if d.HasChange("shared_with") {
|
||||
err := resourceImageShare(ctx, d, m)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
|
||||
@@ -138,8 +138,8 @@ func resourceImageFromPlatformDiskCreate(ctx context.Context, d *schema.Resource
|
||||
|
||||
var w dc.Warnings
|
||||
|
||||
if _, ok := d.GetOk("accounts"); ok {
|
||||
if err := resourceImageSetAccess(ctx, d, m); err != nil {
|
||||
if _, ok := d.GetOk("shared_with"); ok {
|
||||
if err := resourceImageShare(ctx, d, m); err != nil {
|
||||
w.Add(err)
|
||||
}
|
||||
}
|
||||
@@ -256,8 +256,8 @@ func resourceImageFromPlatformDiskUpdate(ctx context.Context, d *schema.Resource
|
||||
}
|
||||
}
|
||||
|
||||
if d.HasChange("accounts") {
|
||||
err := resourceImageChangeAccess(ctx, d, m)
|
||||
if d.HasChange("shared_with") {
|
||||
err := resourceImageShare(ctx, d, m)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
|
||||
@@ -83,14 +83,6 @@ func dataSourceImageListStacksSchemaMake() map[string]*schema.Schema {
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
},
|
||||
"meta": {
|
||||
Type: schema.TypeList,
|
||||
Computed: true,
|
||||
Elem: &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
},
|
||||
Description: "meta",
|
||||
},
|
||||
"api_url": {
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
@@ -1020,14 +1012,6 @@ func resourceCDROMImageSchemaMake() map[string]*schema.Schema {
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
},
|
||||
"meta": {
|
||||
Type: schema.TypeList,
|
||||
Computed: true,
|
||||
Elem: &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
},
|
||||
Description: "meta",
|
||||
},
|
||||
"acl": {
|
||||
Type: schema.TypeList,
|
||||
Computed: true,
|
||||
@@ -1316,14 +1300,6 @@ func resourceImageSchemaMake() map[string]*schema.Schema {
|
||||
Type: schema.TypeInt,
|
||||
},
|
||||
},
|
||||
|
||||
"accounts": {
|
||||
Type: schema.TypeList,
|
||||
Optional: true,
|
||||
Elem: &schema.Schema{
|
||||
Type: schema.TypeInt,
|
||||
},
|
||||
},
|
||||
"unc_path": {
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
@@ -1553,14 +1529,6 @@ func resourceVirtualImageSchemaMake() map[string]*schema.Schema {
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
},
|
||||
"meta": {
|
||||
Type: schema.TypeList,
|
||||
Computed: true,
|
||||
Elem: &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
},
|
||||
Description: "meta",
|
||||
},
|
||||
"acl": {
|
||||
Type: schema.TypeList,
|
||||
Computed: true,
|
||||
@@ -1837,14 +1805,6 @@ func resourceImageFromBlankComputeSchemaMake() map[string]*schema.Schema {
|
||||
Type: schema.TypeInt,
|
||||
},
|
||||
},
|
||||
|
||||
"accounts": {
|
||||
Type: schema.TypeList,
|
||||
Optional: true,
|
||||
Elem: &schema.Schema{
|
||||
Type: schema.TypeInt,
|
||||
},
|
||||
},
|
||||
"network_interface_naming": {
|
||||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
@@ -2126,14 +2086,6 @@ func resourceImageFromPlatformDiskSchemaMake() map[string]*schema.Schema {
|
||||
Type: schema.TypeInt,
|
||||
},
|
||||
},
|
||||
|
||||
"accounts": {
|
||||
Type: schema.TypeList,
|
||||
Optional: true,
|
||||
Elem: &schema.Schema{
|
||||
Type: schema.TypeInt,
|
||||
},
|
||||
},
|
||||
"network_interface_naming": {
|
||||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
|
||||
Reference in New Issue
Block a user