parent
							
								
									e4be812c68
								
							
						
					
					
						commit
						48cada2cf3
					
				| @ -0,0 +1,23 @@ | |||||||
|  | package locations | ||||||
|  | 
 | ||||||
|  | /* | ||||||
|  | Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved. | ||||||
|  | Authors: | ||||||
|  | Petr Krutov, <petr.krutov@digitalenergy.online> | ||||||
|  | Stanislav Solovev, <spsolovev@digitalenergy.online> | ||||||
|  | 
 | ||||||
|  | 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. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | const locationsListAPI = "/restmachine/cloudapi/locations/list" | ||||||
|  | const locationURLAPI = "/restmachine/cloudapi/locations/getUrl" | ||||||
| @ -0,0 +1,155 @@ | |||||||
|  | /* | ||||||
|  | Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved. | ||||||
|  | Authors: | ||||||
|  | Petr Krutov, <petr.krutov@digitalenergy.online> | ||||||
|  | Stanislav Solovev, <spsolovev@digitalenergy.online> | ||||||
|  | 
 | ||||||
|  | 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://github.com/rudecs/terraform-provider-decort
 | ||||||
|  | 
 | ||||||
|  | Please see README.md to learn where to place source code so that it | ||||||
|  | builds seamlessly. | ||||||
|  | 
 | ||||||
|  | Documentation: https://github.com/rudecs/terraform-provider-decort/wiki
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | package locations | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 
 | ||||||
|  | 	"github.com/google/uuid" | ||||||
|  | 	"github.com/hashicorp/terraform-plugin-sdk/v2/diag" | ||||||
|  | 	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||||||
|  | 	"github.com/rudecs/terraform-provider-decort/internal/constants" | ||||||
|  | 	"github.com/rudecs/terraform-provider-decort/internal/flattens" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func flattenLocationsList(ll LocationsList) []map[string]interface{} { | ||||||
|  | 	res := make([]map[string]interface{}, 0) | ||||||
|  | 	for _, l := range ll { | ||||||
|  | 		temp := map[string]interface{}{ | ||||||
|  | 			"ckey":          l.CKey, | ||||||
|  | 			"meta":          flattens.FlattenMeta(l.Meta), | ||||||
|  | 			"flag":          l.Flag, | ||||||
|  | 			"gid":           l.GridID, | ||||||
|  | 			"guid":          l.Guid, | ||||||
|  | 			"id":            l.Id, | ||||||
|  | 			"location_code": l.LocationCode, | ||||||
|  | 			"name":          l.Name, | ||||||
|  | 		} | ||||||
|  | 		res = append(res, temp) | ||||||
|  | 	} | ||||||
|  | 	return res | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func dataSourceLocationsListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { | ||||||
|  | 	locations, err := utilityLocationsListCheckPresence(ctx, d, m) | ||||||
|  | 	if err != nil { | ||||||
|  | 
 | ||||||
|  | 		return diag.FromErr(err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	id := uuid.New() | ||||||
|  | 	d.SetId(id.String()) | ||||||
|  | 
 | ||||||
|  | 	d.Set("items", flattenLocationsList(locations)) | ||||||
|  | 
 | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func dataSourceLocationsListSchemaMake() map[string]*schema.Schema { | ||||||
|  | 	return map[string]*schema.Schema{ | ||||||
|  | 		"page": { | ||||||
|  | 			Type:        schema.TypeInt, | ||||||
|  | 			Optional:    true, | ||||||
|  | 			Description: "page number", | ||||||
|  | 		}, | ||||||
|  | 		"size": { | ||||||
|  | 			Type:        schema.TypeInt, | ||||||
|  | 			Optional:    true, | ||||||
|  | 			Description: "page size", | ||||||
|  | 		}, | ||||||
|  | 		"items": { | ||||||
|  | 			Type:        schema.TypeList, | ||||||
|  | 			Computed:    true, | ||||||
|  | 			Description: "Locations list", | ||||||
|  | 			Elem: &schema.Resource{ | ||||||
|  | 				Schema: map[string]*schema.Schema{ | ||||||
|  | 					"ckey": { | ||||||
|  | 						Type:     schema.TypeString, | ||||||
|  | 						Computed: true, | ||||||
|  | 					}, | ||||||
|  | 					"meta": { | ||||||
|  | 						Type:     schema.TypeList, | ||||||
|  | 						Computed: true, | ||||||
|  | 						Elem: &schema.Schema{ | ||||||
|  | 							Type: schema.TypeString, | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 					"flag": { | ||||||
|  | 						Type:     schema.TypeString, | ||||||
|  | 						Computed: true, | ||||||
|  | 					}, | ||||||
|  | 					"gid": { | ||||||
|  | 						Type:        schema.TypeInt, | ||||||
|  | 						Computed:    true, | ||||||
|  | 						Description: "Grid id", | ||||||
|  | 					}, | ||||||
|  | 					"guid": { | ||||||
|  | 						Type:        schema.TypeInt, | ||||||
|  | 						Computed:    true, | ||||||
|  | 						Description: "location id", | ||||||
|  | 					}, | ||||||
|  | 					"id": { | ||||||
|  | 						Type:        schema.TypeInt, | ||||||
|  | 						Computed:    true, | ||||||
|  | 						Description: "location id", | ||||||
|  | 					}, | ||||||
|  | 					"location_code": { | ||||||
|  | 						Type:        schema.TypeString, | ||||||
|  | 						Computed:    true, | ||||||
|  | 						Description: "Location code", | ||||||
|  | 					}, | ||||||
|  | 					"name": { | ||||||
|  | 						Type:        schema.TypeString, | ||||||
|  | 						Computed:    true, | ||||||
|  | 						Description: "Location name", | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func DataSourceLocationsList() *schema.Resource { | ||||||
|  | 	return &schema.Resource{ | ||||||
|  | 		SchemaVersion: 1, | ||||||
|  | 
 | ||||||
|  | 		ReadContext: dataSourceLocationsListRead, | ||||||
|  | 
 | ||||||
|  | 		Timeouts: &schema.ResourceTimeout{ | ||||||
|  | 			Read:    &constants.Timeout30s, | ||||||
|  | 			Default: &constants.Timeout60s, | ||||||
|  | 		}, | ||||||
|  | 
 | ||||||
|  | 		Schema: dataSourceLocationsListSchemaMake(), | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -0,0 +1,81 @@ | |||||||
|  | /* | ||||||
|  | Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved. | ||||||
|  | Authors: | ||||||
|  | Petr Krutov, <petr.krutov@digitalenergy.online> | ||||||
|  | Stanislav Solovev, <spsolovev@digitalenergy.online> | ||||||
|  | 
 | ||||||
|  | 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://github.com/rudecs/terraform-provider-decort
 | ||||||
|  | 
 | ||||||
|  | Please see README.md to learn where to place source code so that it | ||||||
|  | builds seamlessly. | ||||||
|  | 
 | ||||||
|  | Documentation: https://github.com/rudecs/terraform-provider-decort/wiki
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | package locations | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 
 | ||||||
|  | 	"github.com/google/uuid" | ||||||
|  | 	"github.com/hashicorp/terraform-plugin-sdk/v2/diag" | ||||||
|  | 	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||||||
|  | 	"github.com/rudecs/terraform-provider-decort/internal/constants" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func dataSourceLocationUrlRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { | ||||||
|  | 	url, err := utilityLocationUrlCheckPresence(ctx, d, m) | ||||||
|  | 	if err != nil { | ||||||
|  | 
 | ||||||
|  | 		return diag.FromErr(err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	id := uuid.New() | ||||||
|  | 	d.SetId(id.String()) | ||||||
|  | 
 | ||||||
|  | 	d.Set("url", url) | ||||||
|  | 
 | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func dataSourceLocationUrlSchemaMake() map[string]*schema.Schema { | ||||||
|  | 	return map[string]*schema.Schema{ | ||||||
|  | 		"url": { | ||||||
|  | 			Type:        schema.TypeString, | ||||||
|  | 			Computed:    true, | ||||||
|  | 			Description: "Location url", | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func DataSourceLocationUrl() *schema.Resource { | ||||||
|  | 	return &schema.Resource{ | ||||||
|  | 		SchemaVersion: 1, | ||||||
|  | 
 | ||||||
|  | 		ReadContext: dataSourceLocationUrlRead, | ||||||
|  | 
 | ||||||
|  | 		Timeouts: &schema.ResourceTimeout{ | ||||||
|  | 			Read:    &constants.Timeout30s, | ||||||
|  | 			Default: &constants.Timeout60s, | ||||||
|  | 		}, | ||||||
|  | 
 | ||||||
|  | 		Schema: dataSourceLocationUrlSchemaMake(), | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -0,0 +1,33 @@ | |||||||
|  | /* | ||||||
|  | Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved. | ||||||
|  | Authors: | ||||||
|  | Petr Krutov, <petr.krutov@digitalenergy.online> | ||||||
|  | Stanislav Solovev, <spsolovev@digitalenergy.online> | ||||||
|  | 
 | ||||||
|  | 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 locations | ||||||
|  | 
 | ||||||
|  | type Location struct { | ||||||
|  | 	GridID       int           `json:"gid"` | ||||||
|  | 	Id           int           `json:"id"` | ||||||
|  | 	Guid         int           `json:"guid"` | ||||||
|  | 	LocationCode string        `json:"locationCode"` | ||||||
|  | 	Name         string        `json:"name"` | ||||||
|  | 	Flag         string        `json:"flag"` | ||||||
|  | 	Meta         []interface{} `json:"_meta"` | ||||||
|  | 	CKey         string        `json:"_ckey"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type LocationsList []Location | ||||||
| @ -0,0 +1,61 @@ | |||||||
|  | /* | ||||||
|  | Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved. | ||||||
|  | Authors: | ||||||
|  | Petr Krutov, <petr.krutov@digitalenergy.online> | ||||||
|  | Stanislav Solovev, <spsolovev@digitalenergy.online> | ||||||
|  | 
 | ||||||
|  | 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://github.com/rudecs/terraform-provider-decort
 | ||||||
|  | 
 | ||||||
|  | Please see README.md to learn where to place source code so that it | ||||||
|  | builds seamlessly. | ||||||
|  | 
 | ||||||
|  | Documentation: https://github.com/rudecs/terraform-provider-decort/wiki
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | package locations | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"encoding/json" | ||||||
|  | 	"net/url" | ||||||
|  | 
 | ||||||
|  | 	"github.com/rudecs/terraform-provider-decort/internal/controller" | ||||||
|  | 	log "github.com/sirupsen/logrus" | ||||||
|  | 
 | ||||||
|  | 	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func utilityLocationUrlCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (string, error) { | ||||||
|  | 	c := m.(*controller.ControllerCfg) | ||||||
|  | 
 | ||||||
|  | 	log.Debugf("utilityLocationUrlCheckPresence: load locations list") | ||||||
|  | 	locationUrl, err := c.DecortAPICall(ctx, "POST", locationURLAPI, &url.Values{}) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "", err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	location := new(string) | ||||||
|  | 	err = json.Unmarshal([]byte(locationUrl), location) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "", nil | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return *location, nil | ||||||
|  | } | ||||||
| @ -0,0 +1,70 @@ | |||||||
|  | /* | ||||||
|  | Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved. | ||||||
|  | Authors: | ||||||
|  | Petr Krutov, <petr.krutov@digitalenergy.online> | ||||||
|  | Stanislav Solovev, <spsolovev@digitalenergy.online> | ||||||
|  | 
 | ||||||
|  | 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://github.com/rudecs/terraform-provider-decort
 | ||||||
|  | 
 | ||||||
|  | Please see README.md to learn where to place source code so that it | ||||||
|  | builds seamlessly. | ||||||
|  | 
 | ||||||
|  | Documentation: https://github.com/rudecs/terraform-provider-decort/wiki
 | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | package locations | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"encoding/json" | ||||||
|  | 	"net/url" | ||||||
|  | 	"strconv" | ||||||
|  | 
 | ||||||
|  | 	"github.com/rudecs/terraform-provider-decort/internal/controller" | ||||||
|  | 	log "github.com/sirupsen/logrus" | ||||||
|  | 
 | ||||||
|  | 	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func utilityLocationsListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (LocationsList, error) { | ||||||
|  | 	locationsList := LocationsList{} | ||||||
|  | 	c := m.(*controller.ControllerCfg) | ||||||
|  | 	urlValues := &url.Values{} | ||||||
|  | 
 | ||||||
|  | 	if page, ok := d.GetOk("page"); ok { | ||||||
|  | 		urlValues.Add("page", strconv.Itoa(page.(int))) | ||||||
|  | 	} | ||||||
|  | 	if size, ok := d.GetOk("size"); ok { | ||||||
|  | 		urlValues.Add("size", strconv.Itoa(size.(int))) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	log.Debugf("utilityLocationsListCheckPresence: load locations list") | ||||||
|  | 	locationsListRaw, err := c.DecortAPICall(ctx, "POST", locationsListAPI, urlValues) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	err = json.Unmarshal([]byte(locationsListRaw), &locationsList) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return locationsList, nil | ||||||
|  | } | ||||||
| @ -0,0 +1,30 @@ | |||||||
|  | /* | ||||||
|  | Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved. | ||||||
|  | Authors: | ||||||
|  | Petr Krutov, <petr.krutov@digitalenergy.online> | ||||||
|  | Stanislav Solovev, <spsolovev@digitalenergy.online> | ||||||
|  | 
 | ||||||
|  | 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 statefuncs | ||||||
|  | 
 | ||||||
|  | import "strings" | ||||||
|  | 
 | ||||||
|  | func StateFuncToLower(argval interface{}) string { | ||||||
|  | 	return strings.ToLower(argval.(string)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func StateFuncToUpper(argval interface{}) string { | ||||||
|  | 	return strings.ToUpper(argval.(string)) | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in new issue