From 9402d6f291334b0f2a9a7b08cebe6cc4f64c139b Mon Sep 17 00:00:00 2001 From: stSolo Date: Tue, 15 Nov 2022 17:19:59 +0300 Subject: [PATCH] v3.2.1 --- CHANGELOG.md | 37 ++----------------- Dockerfile | 2 +- Makefile | 4 +- .../cloudapi/kvmvm/resource_compute.go | 29 ++++++++++++--- .../service/cloudapi/kvmvm/utility_compute.go | 7 +++- provider.tf | 2 +- 6 files changed, 35 insertions(+), 46 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a84d1b..bfc2aae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,36 +1,5 @@ -### New data sources +### Version 3.2.1 -- decort_disk_snapshot_list -- decort_disk_snapshot -- decort_disk_list_deleted -- decort_disk_list_unattached -- decort_disk_list_types -- decort_disk_list_types_detailed +### Bug fixes -### New resources - -- decort_disk_snapshot - -### New features - -- add dockerfile for creating an image for the tf provider -- change behaviour to disk resource: check the disk status during update the tf state -- add disks block to kvmvm resource - -### New articles on wiki - -- [Сборка terraform провайдера в образ](https://github.com/rudecs/terraform-provider-decort/wiki/04.05-Сборка-terraform-провайдера-в-образ) -- [Массовое создание ресурсов. Мета аргументы](https://github.com/rudecs/terraform-provider-decort/wiki/05.04-Массовое-создание-ресурсов.-Мета-аргументы) -- [Удаление ресурсов](https://github.com/rudecs/terraform-provider-decort/wiki/05.05-Удаление-ресурсов) -- [Управление снимком диска](https://github.com/rudecs/terraform-provider-decort/wiki/07.01.19-Resource-функция-decort_disk_snapshot-управление-снимком-диска) -- [Получение списка типов для диска](https://github.com/rudecs/terraform-provider-decort/wiki/06.01.39-Data-функция-decort_disk_list_types-получение-списка-типов-диска) -- [Расширенное получение списка поддерживаемых типов](https://github.com/rudecs/terraform-provider-decort/wiki/06.01.40-Data-функция-decort_disk_list_types_detailed-расширенное-получение-информации-о-поддерживаемых-типах-дисков) -- [Получение информации об удаленных дисках](https://github.com/rudecs/terraform-provider-decort/wiki/06.01.41-Data-функция-decort_disk_list_deleted-получение-информации-об-удаленных-дисках) -- [Получение информации о неподключенных дисках](https://github.com/rudecs/terraform-provider-decort/wiki/06.01.42-Data-функция-decort_disk_list_unattached-получение-информации-о-неподключенных-дисках) -- [Получение списка снимков состояния диска](https://github.com/rudecs/terraform-provider-decort/wiki/06.01.43-Data-функция-decort_disk_snapshot_list-получение-списка-снимков-состояния-диска) -- [Получение информацуии о снимке состояния диска](https://github.com/rudecs/terraform-provider-decort/wiki/06.01.44-Data-функция-decort_disk_snapshot-получение-информации-о-снимке-состояния) - -### Update articles - -- [Управление дисковыми ресурсами.](https://github.com/rudecs/terraform-provider-decort/wiki/07.01.03-Resource-функция-decort_disk-управление-дисковыми-ресурсами) -- [Управление виртуальными серверами, создаваемыми на базе системы виртуализации KVM](https://github.com/rudecs/terraform-provider-decort/wiki/07.01.01-Resource-функция-decort_kvmvm-управление-виртуальными-машинами-на-базе-KVM) +- Fix bug with creating kvmvm. Now, the resource kvmvm creates with user defined network. diff --git a/Dockerfile b/Dockerfile index 19231c6..b9ead01 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM docker.io/hashicorp/terraform:latest WORKDIR /opt/decort/tf/ COPY provider.tf ./ -COPY terraform-provider-decort ./terraform.d/plugins/digitalenergy.online/decort/decort/3.1.1/linux_amd64/ +COPY terraform-provider-decort ./terraform.d/plugins/digitalenergy.online/decort/decort/3.2.1/linux_amd64/ RUN terraform init WORKDIR /tf diff --git a/Makefile b/Makefile index e067b0b..678e087 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ NAME=terraform-provider-decort BINARY=${NAME}.exe WORKPATH= ./examples/terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAMESPACE}/${VERSION}/${OS_ARCH} MAINPATH = ./cmd/decort/ -VERSION=3.1.1 +VERSION=3.2.1 #OS_ARCH=darwin_amd64 #OS_ARCH=windows_amd64 #OS_ARCH=linux_amd64 @@ -15,7 +15,7 @@ default: install image: GOOS=linux GOARCH=amd64 go build -o terraform-provider-decort ./cmd/decort/ - docker build . -t rudecs/tf:3.1.1 + docker build . -t rudecs/tf:3.2.1 rm terraform-provider-decort lint: diff --git a/internal/service/cloudapi/kvmvm/resource_compute.go b/internal/service/cloudapi/kvmvm/resource_compute.go index a81c496..caf253e 100644 --- a/internal/service/cloudapi/kvmvm/resource_compute.go +++ b/internal/service/cloudapi/kvmvm/resource_compute.go @@ -76,9 +76,8 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf urlValues.Add("cpu", fmt.Sprintf("%d", d.Get("cpu").(int))) urlValues.Add("ram", fmt.Sprintf("%d", d.Get("ram").(int))) urlValues.Add("imageId", fmt.Sprintf("%d", d.Get("image_id").(int))) - urlValues.Add("bootDisk", fmt.Sprintf("%d", d.Get("boot_disk_size").(int))) - urlValues.Add("netType", "NONE") // at the 1st step create isolated compute - urlValues.Add("start", "0") // at the 1st step create compute in a stopped state + urlValues.Add("netType", "NONE") + urlValues.Add("start", "0") // at the 1st step create compute in a stopped state argVal, argSet := d.GetOk("description") if argSet { @@ -97,9 +96,26 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf urlValues.Add("ipaType", ipaType.(string)) } + if bootSize, ok := d.GetOk("boot_disk_size"); ok { + urlValues.Add("bootDisk", fmt.Sprintf("%d", bootSize.(int))) + } + if IS, ok := d.GetOk("is"); ok { urlValues.Add("IS", IS.(string)) } + if networks, ok := d.GetOk("network"); ok { + if networks.(*schema.Set).Len() > 0 { + ns := networks.(*schema.Set).List() + defaultNetwork := ns[0].(map[string]interface{}) + urlValues.Set("netType", defaultNetwork["net_type"].(string)) + urlValues.Add("netId", fmt.Sprintf("%d", defaultNetwork["net_id"].(int))) + ipaddr, ipSet := defaultNetwork["ip_address"] // "ip_address" key is optional + if ipSet { + urlValues.Add("ipAddr", ipaddr.(string)) + } + + } + } /* sshKeysVal, sshKeysSet := d.GetOk("ssh_keys") @@ -172,7 +188,7 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf argVal, argSet = d.GetOk("network") if argSet && argVal.(*schema.Set).Len() > 0 { log.Debugf("resourceComputeCreate: calling utilityComputeNetworksConfigure to attach %d network(s)", argVal.(*schema.Set).Len()) - err = utilityComputeNetworksConfigure(ctx, d, m, false) // do_delta=false, as we are working on a new compute + err = utilityComputeNetworksConfigure(ctx, d, m, false, true) // do_delta=false, as we are working on a new compute if err != nil { log.Errorf("resourceComputeCreate: error when attaching networks to a new Compute ID %d: %s", compId, err) cleanup = true @@ -332,7 +348,7 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf } // 4. Calculate and apply changes to network connections - err := utilityComputeNetworksConfigure(ctx, d, m, true) // pass do_delta = true to apply changes, if any + err := utilityComputeNetworksConfigure(ctx, d, m, true, false) // pass do_delta = true to apply changes, if any if err != nil { return diag.FromErr(err) } @@ -534,7 +550,7 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema { "boot_disk_size": { Type: schema.TypeInt, - Required: true, + Optional: true, Description: "This compute instance boot disk size in GB. Make sure it is large enough to accomodate selected OS image.", }, @@ -628,6 +644,7 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema { "network": { Type: schema.TypeSet, Optional: true, + MinItems: 1, MaxItems: constants.MaxNetworksPerCompute, Elem: &schema.Resource{ Schema: networkSubresourceSchemaMake(), diff --git a/internal/service/cloudapi/kvmvm/utility_compute.go b/internal/service/cloudapi/kvmvm/utility_compute.go index 8be54c1..967f2ad 100644 --- a/internal/service/cloudapi/kvmvm/utility_compute.go +++ b/internal/service/cloudapi/kvmvm/utility_compute.go @@ -146,7 +146,7 @@ func utilityComputeExtraDisksConfigure(ctx context.Context, d *schema.ResourceDa return nil } -func utilityComputeNetworksConfigure(ctx context.Context, d *schema.ResourceData, m interface{}, do_delta bool) error { +func utilityComputeNetworksConfigure(ctx context.Context, d *schema.ResourceData, m interface{}, do_delta bool, skip_zero bool) error { // "d" is filled with data according to computeResource schema, so extra networks config is retrieved via "network" key // If do_delta is true, this function will identify changes between new and existing specs for network and try to // update compute configuration accordingly @@ -165,7 +165,10 @@ func utilityComputeNetworksConfigure(ctx context.Context, d *schema.ResourceData return nil } - for _, runner := range new_set.(*schema.Set).List() { + for i, runner := range new_set.(*schema.Set).List() { + if i == 0 && skip_zero { + continue + } urlValues := &url.Values{} net_data := runner.(map[string]interface{}) urlValues.Add("computeId", d.Id()) diff --git a/provider.tf b/provider.tf index c65df29..a99c4b4 100644 --- a/provider.tf +++ b/provider.tf @@ -2,7 +2,7 @@ terraform { required_providers { decort = { source = "digitalenergy.online/decort/decort" - version = "3.1.1" + version = "3.2.1" } } }