gos_tech_4.4.3 3.5.2
KasimBaybikov 2 years ago
parent f2f31b939e
commit b112c5ee22

@ -1,5 +1,10 @@
### Version 3.5.1
## Version 3.5.2
## Bug Fix
### Features
- Add new datasource decort_kvmvm_snapshot_usage
- Add the ability to change the size in the 'disks' block in the decort_kvmvm resource. Now when you change 'size' field in the block, the disk size on the platform will also be changed
- Authentication via jwt token does not work
## Bug Fix
- rule "release" in Makefile don't create the necessary archives
- field "register_computes" in resource decort_resgroup is not used when creating the resource
- removed unused optional fields in datasources

@ -8,7 +8,7 @@ ZIPDIR = ./zip
BINARY=${NAME}.exe
WORKPATH= ./examples/terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAMESPACE}/${VERSION}/${OS_ARCH}
MAINPATH = ./cmd/decort/
VERSION=3.5.1
VERSION=3.5.2
#OS_ARCH=darwin_amd64
OS_ARCH=windows_amd64
#OS_ARCH=linux_amd64

@ -48,6 +48,7 @@ func NewDataSourcesMap() map[string]*schema.Resource {
"decort_kvmvm_get_log": kvmvm.DataSourceComputeGetLog(),
"decort_kvmvm_pfw_list": kvmvm.DataSourceComputePfwList(),
"decort_kvmvm_user_list": kvmvm.DataSourceComputeUserList(),
"decort_kvmvm_snapshot_usage": kvmvm.DataSourceComputeSnapshotUsage(),
"decort_k8s": k8s.DataSourceK8s(),
"decort_k8s_list": k8s.DataSourceK8sList(),
"decort_k8s_list_deleted": k8s.DataSourceK8sListDeleted(),

@ -77,6 +77,7 @@ const (
ComputeUserRevokeAPI = "/restmachine/cloudapi/compute/userRevoke"
ComputeSnapshotCreateAPI = "/restmachine/cloudapi/compute/snapshotCreate"
ComputeSnapshotDeleteAPI = "/restmachine/cloudapi/compute/snapshotCreate"
ComputeSnapshotUsageAPI = "/restmachine/cloudapi/compute/snapshotUsage"
ComputeSnapshotRollbackAPI = "/restmachine/cloudapi/compute/snapshotRollback"
ComputePauseAPI = "/restmachine/cloudapi/compute/pause"
ComputeResumeAPI = "/restmachine/cloudapi/compute/resume"

@ -0,0 +1,73 @@
package kvmvm
import (
"context"
"github.com/google/uuid"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
)
func dataSourceComputeSnapshotUsageRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
computeSnapshotUsage, err := utilityComputeSnapshotUasgeCheckPresence(ctx, d, m)
if err != nil {
return diag.FromErr(err)
}
id := uuid.New()
d.SetId(id.String())
d.Set("items", flattenSnapshotUsage(computeSnapshotUsage))
return nil
}
func dataSourceComputeSnapshotUsagSchemaMake() map[string]*schema.Schema {
return map[string]*schema.Schema{
"compute_id": {
Type: schema.TypeInt,
Required: true,
},
"label": {
Type: schema.TypeString,
Optional: true,
},
"items": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"count": {
Type: schema.TypeInt,
Computed: true,
},
"stored": {
Type: schema.TypeFloat,
Computed: true,
},
"label": {
Type: schema.TypeString,
Computed: true,
},
"timestamp": {
Type: schema.TypeInt,
Computed: true,
},
},
},
},
}
}
func DataSourceComputeSnapshotUsage() *schema.Resource {
return &schema.Resource{
SchemaVersion: 1,
ReadContext: dataSourceComputeSnapshotUsageRead,
Timeouts: &schema.ResourceTimeout{
Read: &constants.Timeout30s,
Default: &constants.Timeout60s,
},
Schema: dataSourceComputeSnapshotUsagSchemaMake(),
}
}

@ -660,3 +660,17 @@ func flattenComputeGetAudits(computeAudits ListShortAudits) []map[string]interfa
}
return res
}
func flattenSnapshotUsage(computeSnapshotUasges ListUsageSnapshots) []map[string]interface{} {
res := make([]map[string]interface{}, 0)
for _, computeUsage := range computeSnapshotUasges {
temp := map[string]interface{}{
"count": computeUsage.Count,
"stored": computeUsage.Stored,
"label": computeUsage.Label,
"timestamp": computeUsage.Timestamp,
}
res = append(res, temp)
}
return res
}

@ -38,12 +38,10 @@ import (
"net/url"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
log "github.com/sirupsen/logrus"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
)
func existRgID(ctx context.Context, d *schema.ResourceData, m interface{}) bool {
log.Debugf("resourceComputeCreate: check access for RG ID: %v", d.Get("rg_id").(int))
c := m.(*controller.ControllerCfg)
urlValues := &url.Values{}
rgList := []struct {
@ -70,7 +68,6 @@ func existRgID(ctx context.Context, d *schema.ResourceData, m interface{}) bool
}
func existImageId(ctx context.Context, d *schema.ResourceData, m interface{}) bool {
log.Debugf("resourceComputeCreate: check access for image ID: %v", d.Get("image_id").(int))
c := m.(*controller.ControllerCfg)
urlValues := &url.Values{}
imageList := []struct {
@ -106,7 +103,6 @@ func existVinsIdInList(vinsId int, vinsList []struct {
}
func existVinsId(ctx context.Context, d *schema.ResourceData, m interface{}) (int, bool) {
log.Debugf("resourceComputeCreate: check access for vinses IDs")
c := m.(*controller.ControllerCfg)
urlValues := &url.Values{}

@ -38,12 +38,12 @@ import (
"net/url"
"strconv"
log "github.com/sirupsen/logrus"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/dc"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/statefuncs"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/status"
log "github.com/sirupsen/logrus"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@ -645,6 +645,7 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
if d.HasChange("disks") {
deletedDisks := make([]interface{}, 0)
addedDisks := make([]interface{}, 0)
updatedDisks := make([]interface{}, 0)
oldDisks, newDisks := d.GetChange("disks")
oldConv := oldDisks.([]interface{})
@ -659,6 +660,10 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
for _, el := range newConv {
if !isContainsDisk(oldConv, el) {
addedDisks = append(addedDisks, el)
} else {
if isChangeDisk(oldConv, el) {
updatedDisks = append(updatedDisks, el)
}
}
}
@ -727,6 +732,22 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
urlValues = &url.Values{}
}
}
if len(updatedDisks) > 0 {
for _, disk := range updatedDisks {
diskConv := disk.(map[string]interface{})
if diskConv["disk_name"].(string) == "bootdisk" {
continue
}
urlValues = &url.Values{}
urlValues.Add("diskId", strconv.Itoa(diskConv["disk_id"].(int)))
urlValues.Add("size", strconv.Itoa(diskConv["size"].(int)))
_, err := c.DecortAPICall(ctx, "POST", DisksResizeAPI, urlValues)
if err != nil {
return diag.FromErr(err)
}
}
}
}
if d.HasChange("started") {
@ -1176,6 +1197,18 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
return resourceComputeRead(ctx, d, m)
}
func isChangeDisk(els []interface{}, el interface{}) bool {
for _, elOld := range els {
elOldConv := elOld.(map[string]interface{})
elConv := el.(map[string]interface{})
if elOldConv["disk_id"].(int) == elConv["disk_id"].(int) &&
elOldConv["size"].(int) != elConv["size"].(int) {
return true
}
}
return false
}
func isContainsDisk(els []interface{}, el interface{}) bool {
for _, elOld := range els {
elOldConv := elOld.(map[string]interface{})

@ -0,0 +1,33 @@
package kvmvm
import (
"context"
"encoding/json"
"net/url"
"strconv"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
)
func utilityComputeSnapshotUasgeCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (ListUsageSnapshots, error) {
c := m.(*controller.ControllerCfg)
urlValues := &url.Values{}
UsageSnapshotList := &ListUsageSnapshots{}
urlValues.Add("computeId", strconv.Itoa(d.Get("compute_id").(int)))
if label, ok := d.GetOk("label"); ok {
urlValues.Add("label", label.(string))
}
computeSnapshotUsage, err := c.DecortAPICall(ctx, "POST", ComputeSnapshotUsageAPI, urlValues)
if err != nil {
return nil, err
}
err = json.Unmarshal([]byte(computeSnapshotUsage), &UsageSnapshotList)
if err != nil {
return nil, err
}
return *UsageSnapshotList, err
}

@ -38,12 +38,12 @@ import (
"net/url"
"strconv"
log "github.com/sirupsen/logrus"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/dc"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/location"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/status"
log "github.com/sirupsen/logrus"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff"
@ -170,6 +170,11 @@ func resourceResgroupCreate(ctx context.Context, d *schema.ResourceData, m inter
urlValues.Add("extIp", extIp.(string))
}
regComputes, argSet := d.GetOk("register_computes")
if argSet {
urlValues.Add("registerComputes", strconv.FormatBool(regComputes.(bool)))
}
apiResp, err := c.DecortAPICall(ctx, "POST", ResgroupCreateAPI, urlValues)
if err != nil {
return diag.FromErr(err)

Loading…
Cancel
Save