Compare commits

...

5 Commits
4.3.0 ... 4.3.4

Author SHA1 Message Date
Nikita Sorokin
712f8edf9e 4.3.4 2023-08-23 16:32:48 +03:00
Nikita Sorokin
805ffe1f29 4.3.3 2023-08-22 13:15:17 +03:00
Nikita Sorokin
bf8d3fb437 4.3.2 2023-08-17 18:18:23 +03:00
d7a7eb9cb3 4.3.1 README update 2023-08-16 16:00:00 +03:00
Nikita Sorokin
b60f32c570 v4.3.1 2023-08-10 20:22:43 +03:00
12 changed files with 75 additions and 183 deletions

View File

@@ -1,51 +1,4 @@
## Version 4.3.0 ## Version 4.3.4
## Features ## Bugfixes
- CloudBroker (requires admin privileges): - Fixed bug with resource decort_cb_extnet: extnet did not switct status to "ENABLED" if field enable=true while resource create.
- Created "decort_cb_extnet" resource - used to create and manage Extnet instances
- Created "decort_cb_extnet" data source - used to read information about Extnet instance
- Created "decort_cb_extnet_list" data source - used to read information about multiple Extnet instances
- CloudAPI:
- Updated resource_compute: added "custom_fields" and "with_default_vins" parameters:
- Set "with_default_vins" to false to create compute without any attached networks. This parameter is ignored if any network block is specified
- Added ability to create stateless computes (SVA_KVM_X86)
- Created "decort_k8ci_list" data source - used to read information about available K8CI instances
- Updated resources && data sources to platform version 3.8.7, which includes:
- Added new optional fields to all list data sources, used to filter results, which are:
- decort_account_list
- decort_bservice_list
- decort_kvmvm_list
- decort_disk_list
- decort_extnet_list
- decort_flipgroup_list
- decort_image_list
- decort_k8s_list
- decort_k8s_list_deleted
- decort_rg_list
- decort_vins_list
- decort_account_deleted_list
- decort_account_computes_list
- decort_account_disks_list
- decort_account_flipgroups_list
- decort_account_rg_list
- decort_account_vins_list
- decort_disk_list_deleted
- decort_disk_list_unattached
- decort_lb_list
- decort_lb_list_deleted
- decort_rg_list_computes
- decort_rg_list_deleted
- decort_rg_list_lb
- decort_rg_list_pfw
- decort_rg_list_vins
- decort_vins_list_deleted
- Added "cu_dm" field to resgroup and account resource limits and consumed units
- Added "reference_id" field to compute snapshots model
- Added "stateless_sep_id" and "stateless_sep_type" fields to compute models
- Misc:
- Added darwin_arm64, linux_arm64 as release build targets
- Every release starting from version 4.3.0 will have installers included in the archive
- install.sh - used on linux, darwin and bsd systems
- install.bat - used on windows machines
- Updated samples
- Updated README

View File

@@ -7,10 +7,8 @@ ZIPDIR = ./zip
BINARY=${NAME} BINARY=${NAME}
WORKPATH= ./examples/terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAMESPACE}/${VERSION}/${OS_ARCH} WORKPATH= ./examples/terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAMESPACE}/${VERSION}/${OS_ARCH}
MAINPATH = ./cmd/decort/ MAINPATH = ./cmd/decort/
VERSION=4.3.0 VERSION=4.3.4
#OS_ARCH=darwin_amd64 OS_ARCH=$(shell go env GOHOSTOS)_$(shell go env GOHOSTARCH)
# OS_ARCH=windows_amd64
OS_ARCH=linux_amd64
FILES = ${BINARY}_${VERSION}_darwin_amd64\ FILES = ${BINARY}_${VERSION}_darwin_amd64\
${BINARY}_${VERSION}_darwin_arm64\ ${BINARY}_${VERSION}_darwin_arm64\

View File

@@ -7,7 +7,7 @@ Terraform provider для платформы Digital Energy Cloud Orchestration
| Версия DECORT API | Версия провайдера Terraform | | Версия DECORT API | Версия провайдера Terraform |
| ------ | ------ | | ------ | ------ |
| 3.8.7 | 4.3.x | | 3.8.7 | 4.3.x |
| 3.8.6 | 4.x.x | | 3.8.6 | 4.0.x, 4.1.x, 4.2.x |
| 3.8.5 | 3.4.x | | 3.8.5 | 3.4.x |
| 3.8.0 - 3.8.4 | 3.3.1 | | 3.8.0 - 3.8.4 | 3.3.1 |
| 3.7.x | rc-1.25 | | 3.7.x | rc-1.25 |

2
go.mod
View File

@@ -9,7 +9,7 @@ require (
github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.1 github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.1
github.com/sirupsen/logrus v1.9.0 github.com/sirupsen/logrus v1.9.0
golang.org/x/net v0.12.0 golang.org/x/net v0.12.0
repository.basistech.ru/BASIS/decort-golang-sdk v1.5.1 repository.basistech.ru/BASIS/decort-golang-sdk v1.5.3
) )
require ( require (

4
go.sum
View File

@@ -339,5 +339,5 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
repository.basistech.ru/BASIS/decort-golang-sdk v1.5.1 h1:6uvGmrmMaHRU+RV2G6xLX4tjecqalDG5PwvBv5J2LUM= repository.basistech.ru/BASIS/decort-golang-sdk v1.5.3 h1:Rt5tE4EZcUr4ONK9u/XYe2mG1CC37xLUnNuCLYKDwYs=
repository.basistech.ru/BASIS/decort-golang-sdk v1.5.1/go.mod h1:szsTGa73O75ckCWVGJPvTtRbhA/ubuYrYhMkPjvHlmE= repository.basistech.ru/BASIS/decort-golang-sdk v1.5.3/go.mod h1:szsTGa73O75ckCWVGJPvTtRbhA/ubuYrYhMkPjvHlmE=

View File

@@ -1,27 +0,0 @@
/*
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
Authors:
Petr Krutov, <petr.krutov@digitalenergy.online>
Stanislav Solovev, <spsolovev@digitalenergy.online>
Kasim Baybikov, <kmbaybikov@basistech.ru>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package constants
//CloudApi - a part of url for cloudapi
const CloudApi = "/restmachine/cloudapi"
//CloudBroker - a part of url for cloudbroker
const CloudBroker = "/restmachine/cloudbroker"

View File

@@ -637,10 +637,10 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt, Type: schema.TypeInt,
Computed: true, Computed: true,
}, },
"custom_fields": { // "custom_fields": {
Type: schema.TypeString, // Type: schema.TypeString,
Computed: true, // Computed: true,
}, // },
"deleted_by": { "deleted_by": {
Type: schema.TypeString, Type: schema.TypeString,
Computed: true, Computed: true,

View File

@@ -154,10 +154,10 @@ func itemComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt, Type: schema.TypeInt,
Computed: true, Computed: true,
}, },
"custom_fields": { //NEED // "custom_fields": { //NEED
Type: schema.TypeString, // Type: schema.TypeString,
Computed: true, // Computed: true,
}, // },
"deleted_by": { "deleted_by": {
Type: schema.TypeString, Type: schema.TypeString,
Computed: true, Computed: true,

View File

@@ -150,7 +150,7 @@ func flattenListACL(listAcl compute.ListACL) []map[string]interface{} {
func flattenComputeList(computes *compute.ListComputes) []map[string]interface{} { func flattenComputeList(computes *compute.ListComputes) []map[string]interface{} {
res := make([]map[string]interface{}, 0) res := make([]map[string]interface{}, 0)
for _, compute := range computes.Data { for _, compute := range computes.Data {
customFields, _ := json.Marshal(compute.CustomFields) // customFields, _ := json.Marshal(compute.CustomFields)
devices, _ := json.Marshal(compute.Devices) devices, _ := json.Marshal(compute.Devices)
temp := map[string]interface{}{ temp := map[string]interface{}{
"acl": flattenListACL(compute.ACL), "acl": flattenListACL(compute.ACL),
@@ -169,44 +169,44 @@ func flattenComputeList(computes *compute.ListComputes) []map[string]interface{}
"cpus": compute.CPU, "cpus": compute.CPU,
"created_by": compute.CreatedBy, "created_by": compute.CreatedBy,
"created_time": compute.CreatedTime, "created_time": compute.CreatedTime,
"custom_fields": string(customFields), // "custom_fields": string(customFields),
"deleted_by": compute.DeletedBy, "deleted_by": compute.DeletedBy,
"deleted_time": compute.DeletedTime, "deleted_time": compute.DeletedTime,
"desc": compute.Description, "desc": compute.Description,
"devices": string(devices), "devices": string(devices),
"disks": flattenDisks(compute.Disks), "disks": flattenDisks(compute.Disks),
"driver": compute.Driver, "driver": compute.Driver,
"gid": compute.GID, "gid": compute.GID,
"guid": compute.GUID, "guid": compute.GUID,
"compute_id": compute.ID, "compute_id": compute.ID,
"image_id": compute.ImageID, "image_id": compute.ImageID,
"interfaces": flattenInterfaces(compute.Interfaces), "interfaces": flattenInterfaces(compute.Interfaces),
"lock_status": compute.LockStatus, "lock_status": compute.LockStatus,
"manager_id": compute.ManagerID, "manager_id": compute.ManagerID,
"manager_type": compute.ManagerType, "manager_type": compute.ManagerType,
"migrationjob": compute.MigrationJob, "migrationjob": compute.MigrationJob,
"milestones": compute.Milestones, "milestones": compute.Milestones,
"name": compute.Name, "name": compute.Name,
"pinned": compute.Pinned, "pinned": compute.Pinned,
"ram": compute.RAM, "ram": compute.RAM,
"reference_id": compute.ReferenceID, "reference_id": compute.ReferenceID,
"registered": compute.Registered, "registered": compute.Registered,
"res_name": compute.ResName, "res_name": compute.ResName,
"rg_id": compute.RGID, "rg_id": compute.RGID,
"rg_name": compute.RGName, "rg_name": compute.RGName,
"snap_sets": flattenSnapSets(compute.SnapSets), "snap_sets": flattenSnapSets(compute.SnapSets),
"stateless_sep_id": compute.StatelessSepID, "stateless_sep_id": compute.StatelessSepID,
"stateless_sep_type": compute.StatelessSepType, "stateless_sep_type": compute.StatelessSepType,
"status": compute.Status, "status": compute.Status,
"tags": flattenTags(compute.Tags), "tags": flattenTags(compute.Tags),
"tech_status": compute.TechStatus, "tech_status": compute.TechStatus,
"total_disk_size": compute.TotalDiskSize, "total_disk_size": compute.TotalDiskSize,
"updated_by": compute.UpdatedBy, "updated_by": compute.UpdatedBy,
"updated_time": compute.UpdatedTime, "updated_time": compute.UpdatedTime,
"user_managed": compute.UserManaged, "user_managed": compute.UserManaged,
"vgpus": compute.VGPUs, "vgpus": compute.VGPUs,
"vins_connected": compute.VINSConnected, "vins_connected": compute.VINSConnected,
"virtual_image_id": compute.VirtualImageID, "virtual_image_id": compute.VirtualImageID,
} }
res = append(res, temp) res = append(res, temp)
} }
@@ -236,10 +236,10 @@ func flattenBootDisk(bootDisk *compute.ItemComputeDisk) []map[string]interface{}
return res return res
} }
func flattenComputeDisksDemo(disksList compute.ListComputeDisks, extraDisks []interface{}) []map[string]interface{} { func flattenComputeDisksDemo(disksList compute.ListComputeDisks, extraDisks []interface{}, bootDiskId uint64) []map[string]interface{} {
res := make([]map[string]interface{}, 0, len(disksList)) res := make([]map[string]interface{}, 0, len(disksList))
for _, disk := range disksList { for _, disk := range disksList {
if disk.Name == "bootdisk" || findInExtraDisks(uint(disk.ID), extraDisks) { //skip main bootdisk and extraDisks if disk.ID == bootDiskId || findInExtraDisks(uint(disk.ID), extraDisks) { //skip main bootdisk and extraDisks
continue continue
} }
temp := map[string]interface{}{ temp := map[string]interface{}{
@@ -280,7 +280,7 @@ func flattenNetwork(interfaces compute.ListInterfaces) []map[string]interface{}
func findBootDisk(disks compute.ListComputeDisks) *compute.ItemComputeDisk { func findBootDisk(disks compute.ListComputeDisks) *compute.ItemComputeDisk {
for _, disk := range disks { for _, disk := range disks {
if disk.Name == "bootdisk" { if disk.Type == "B" {
return &disk return &disk
} }
} }
@@ -320,7 +320,7 @@ func flattenCompute(d *schema.ResourceData, computeRec compute.RecordCompute) er
d.Set("deleted_time", computeRec.DeletedTime) d.Set("deleted_time", computeRec.DeletedTime)
d.Set("description", computeRec.Description) d.Set("description", computeRec.Description)
d.Set("devices", string(devices)) d.Set("devices", string(devices))
err := d.Set("disks", flattenComputeDisksDemo(computeRec.Disks, d.Get("extra_disks").(*schema.Set).List())) err := d.Set("disks", flattenComputeDisksDemo(computeRec.Disks, d.Get("extra_disks").(*schema.Set).List(), bootDisk.ID))
if err != nil { if err != nil {
return err return err
} }
@@ -541,7 +541,7 @@ func flattenDataCompute(d *schema.ResourceData, computeRec compute.RecordCompute
d.Set("cpus", computeRec.CPU) d.Set("cpus", computeRec.CPU)
d.Set("created_by", computeRec.CreatedBy) d.Set("created_by", computeRec.CreatedBy)
d.Set("created_time", computeRec.CreatedTime) d.Set("created_time", computeRec.CreatedTime)
d.Set("custom_fields", flattenCustomFields(computeRec.CustomFields)) // d.Set("custom_fields", flattenCustomFields(computeRec.CustomFields))
d.Set("deleted_by", computeRec.DeletedBy) d.Set("deleted_by", computeRec.DeletedBy)
d.Set("deleted_time", computeRec.DeletedTime) d.Set("deleted_time", computeRec.DeletedTime)
d.Set("desc", computeRec.Description) d.Set("desc", computeRec.Description)

View File

@@ -192,16 +192,6 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
createReqX86.Driver = driver createReqX86.Driver = driver
if custom_fields, ok := d.GetOk("custom_fields"); ok {
val := custom_fields.(string)
val = strings.ReplaceAll(val, "\\", "")
val = strings.ReplaceAll(val, "\n", "")
val = strings.ReplaceAll(val, "\t", "")
val = strings.TrimSpace(val)
createReqX86.CustomFields = val
}
log.Debugf("resourceComputeCreate: creating Compute of type KVM VM x86") log.Debugf("resourceComputeCreate: creating Compute of type KVM VM x86")
apiResp, err := c.CloudAPI().KVMX86().Create(ctx, createReqX86) apiResp, err := c.CloudAPI().KVMX86().Create(ctx, createReqX86)
if err != nil { if err != nil {
@@ -782,7 +772,7 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
for _, disk := range deletedDisks { for _, disk := range deletedDisks {
diskConv := disk.(map[string]interface{}) diskConv := disk.(map[string]interface{})
if diskConv["disk_name"].(string) == "bootdisk" { if diskConv["disk_type"].(string) == "B" {
continue continue
} }
@@ -810,7 +800,7 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
if len(addedDisks) > 0 { if len(addedDisks) > 0 {
for _, disk := range addedDisks { for _, disk := range addedDisks {
diskConv := disk.(map[string]interface{}) diskConv := disk.(map[string]interface{})
if diskConv["disk_name"].(string) == "bootdisk" { if diskConv["disk_type"].(string) == "B" {
continue continue
} }
req := compute.DiskAddRequest{ req := compute.DiskAddRequest{
@@ -842,7 +832,7 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
if len(updatedDisks) > 0 { if len(updatedDisks) > 0 {
for _, disk := range updatedDisks { for _, disk := range updatedDisks {
diskConv := disk.(map[string]interface{}) diskConv := disk.(map[string]interface{})
if diskConv["disk_name"].(string) == "bootdisk" { if diskConv["disk_type"].(string) == "B" {
continue continue
} }
req := compute.DiskResizeRequest{ req := compute.DiskResizeRequest{
@@ -1345,35 +1335,6 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
} }
} }
if d.HasChange("custom_fields") {
val := d.Get("custom_fields").(string)
val = strings.ReplaceAll(val, "\\", "")
val = strings.ReplaceAll(val, "\n", "")
val = strings.ReplaceAll(val, "\t", "")
val = strings.TrimSpace(val)
if len(val) > 0 {
req := compute.SetCustomFieldsRequest{
ComputeID: computeRec.ID,
CustomFields: val,
}
_, err := c.CloudAPI().Compute().SetCustomFields(ctx, req)
if err != nil {
return diag.FromErr(err)
}
} else {
req := compute.DeleteCustomFieldsRequest{
ComputeID: computeRec.ID,
}
_, err := c.CloudAPI().Compute().DeleteCustomFields(ctx, req)
if err != nil {
return diag.FromErr(err)
}
}
}
// 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) defer resourceComputeRead(ctx, d, m)
@@ -1717,10 +1678,6 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema {
Schema: disksSubresourceSchemaMake(), Schema: disksSubresourceSchemaMake(),
}, },
}, },
"custom_fields": {
Type: schema.TypeString,
Optional: true,
},
"stateless": { "stateless": {
Type: schema.TypeBool, Type: schema.TypeBool,
Optional: true, Optional: true,

View File

@@ -142,6 +142,17 @@ func resourceExtnetCreate(ctx context.Context, d *schema.ResourceData, m interfa
} }
} }
if d.Get("enable").(bool) {
log.Debugf("resourceExtnetCreate: trying to enable extnet with ID %d", netID)
_, err := c.CloudBroker().ExtNet().Enable(ctx, extnet.EnableRequest{
NetID: netID,
})
if err != nil {
return diag.FromErr(err)
}
}
return resourceExtnetRead(ctx, d, m) return resourceExtnetRead(ctx, d, m)
} }