This commit is contained in:
asteam
2025-06-16 14:17:01 +03:00
parent 9e68edb2b9
commit e04dab77cb
4880 changed files with 97 additions and 535839 deletions

View File

@@ -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,

View File

@@ -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,

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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,