166 lines
5.3 KiB
Go
166 lines
5.3 KiB
Go
/*
|
|
Copyright (c) 2019-2024 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.
|
|
*/
|
|
|
|
/*
|
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
|
Orchestration Technology) with Terraform by Hashicorp.
|
|
|
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
|
|
|
Please see README.md to learn where to place source code so that it
|
|
builds seamlessly.
|
|
|
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
|
*/
|
|
|
|
package zone
|
|
|
|
import (
|
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
|
log "github.com/sirupsen/logrus"
|
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/zone"
|
|
)
|
|
|
|
func flattenZone(d *schema.ResourceData, item *zone.RecordZone) error {
|
|
log.Debugf("flattenZone: start decoding RecordZone name %q / ID %d",
|
|
item.Name, item.ID)
|
|
|
|
d.Set("zone_id", int(item.ID))
|
|
d.Set("guid", int(item.GUID))
|
|
d.Set("gid", int(item.GID))
|
|
d.Set("name", item.Name)
|
|
d.Set("description", item.Description)
|
|
d.Set("deletable", item.Deletable)
|
|
d.Set("status", item.Status)
|
|
d.Set("created_time", item.CreatedTime)
|
|
d.Set("updated_time", item.UpdatedTime)
|
|
d.Set("node_ids", item.NodeIDs)
|
|
d.Set("account_ids", item.AccountIDs)
|
|
d.Set("compute_ids", item.ComputeIDs)
|
|
d.Set("extnet_ids", item.ExtnetIDs)
|
|
d.Set("vins_ids", item.VinsIDs)
|
|
d.Set("lb_ids", item.LBIDs)
|
|
d.Set("bservice_ids", item.BserviceIDs)
|
|
d.Set("k8s_ids", item.K8SIDs)
|
|
d.Set("auto_start", item.AutoStart)
|
|
d.Set("drs", item.DRS)
|
|
d.Set("drs_uid", item.DRSUID)
|
|
d.Set("drs_name", item.DRSName)
|
|
d.Set("sso_url", item.SSOURL)
|
|
d.Set("app_id", item.AppID)
|
|
d.Set("decort_url", item.DecortURL)
|
|
d.Set("ping_addr", item.PingAddr)
|
|
d.Set("broadcast_addr", item.BroadcastAddr)
|
|
d.Set("ssl_skip_verify", item.SSLSkipVerify)
|
|
d.Set("domain", item.Domain)
|
|
d.Set("sso_type", item.SSOType)
|
|
d.Set("cpu_alignment_profiles", flattenCPUAlignmentProfiles(item.CpuAlignmentProfiles))
|
|
|
|
log.Debugf("flattenZone: decoded RecordZone name %q / ID %d, complete",
|
|
item.Name, item.ID)
|
|
return nil
|
|
}
|
|
|
|
func flattenCPUAlignmentProfiles(profiles []zone.CpuAlignmentProfile) []map[string]interface{} {
|
|
res := make([]map[string]interface{}, 0, len(profiles))
|
|
for _, p := range profiles {
|
|
res = append(res, map[string]interface{}{
|
|
"name": p.Name,
|
|
"vendor": p.Vendor,
|
|
"model": p.Model,
|
|
})
|
|
}
|
|
return res
|
|
}
|
|
|
|
func flattenCPUAlignmentProfileCandidates(candidates []zone.CpuAlignmentProfileCandidate) []map[string]interface{} {
|
|
res := make([]map[string]interface{}, 0, len(candidates))
|
|
for _, c := range candidates {
|
|
res = append(res, map[string]interface{}{
|
|
"name": c.Name,
|
|
"vendor": c.Vendor,
|
|
"model": c.Model,
|
|
"count": int(c.Count),
|
|
"percentage": c.Percentage,
|
|
"required_count": int(c.RequiredCount),
|
|
})
|
|
}
|
|
return res
|
|
}
|
|
|
|
func flattenSupportedCpuModels(models []zone.SupportedCpuModel) []map[string]interface{} {
|
|
res := make([]map[string]interface{}, 0, len(models))
|
|
for _, m := range models {
|
|
res = append(res, map[string]interface{}{
|
|
"vendor": m.Vendor,
|
|
"model": m.Model,
|
|
"count": int(m.Count),
|
|
"percentage": m.Percentage,
|
|
})
|
|
}
|
|
return res
|
|
}
|
|
|
|
func flattenZoneCPUAlignmentProfileList(list *zone.ListCPUAlignmentProfiles) []map[string]interface{} {
|
|
res := make([]map[string]interface{}, 0, len(list.Data))
|
|
for _, item := range list.Data {
|
|
res = append(res, map[string]interface{}{
|
|
"zone_id": int(item.ZoneID),
|
|
"cpu_alignment_profiles": flattenCPUAlignmentProfiles(item.CpuAlignmentProfiles),
|
|
})
|
|
}
|
|
return res
|
|
}
|
|
|
|
func flattenZoneList(zone *zone.ListZones) []map[string]interface{} {
|
|
log.Debugf("flattenZoneList start")
|
|
res := make([]map[string]interface{}, 0, len(zone.Data))
|
|
for _, zone := range zone.Data {
|
|
temp := map[string]interface{}{
|
|
"zone_id": int(zone.ID),
|
|
"guid": int(zone.GUID),
|
|
"gid": int(zone.GID),
|
|
"name": zone.Name,
|
|
"description": zone.Description,
|
|
"deletable": zone.Deletable,
|
|
"status": zone.Status,
|
|
"created_time": zone.CreatedTime,
|
|
"updated_time": zone.UpdatedTime,
|
|
"node_ids": zone.NodeIDs,
|
|
"auto_start": zone.AutoStart,
|
|
"drs": zone.DRS,
|
|
"drs_uid": zone.DRSUID,
|
|
"drs_name": zone.DRSName,
|
|
"sso_url": zone.SSOURL,
|
|
"app_id": zone.AppID,
|
|
"decort_url": zone.DecortURL,
|
|
"ping_addr": zone.PingAddr,
|
|
"broadcast_addr": zone.BroadcastAddr,
|
|
"ssl_skip_verify": zone.SSLSkipVerify,
|
|
"domain": zone.Domain,
|
|
"sso_type": zone.SSOType,
|
|
}
|
|
res = append(res, temp)
|
|
}
|
|
log.Debugf("flattenZoneList end")
|
|
return res
|
|
|
|
}
|