This is an automated email from the ASF dual-hosted git repository.

davidjumani pushed a commit to branch add-cks-versions
in repository 
https://gitbox.apache.org/repos/asf/cloudstack-terraform-provider.git

commit 069d8e9340d4e3080eb037e4358457f250105cf1
Author: davidjumani <[email protected]>
AuthorDate: Fri Jun 10 14:37:02 2022 +0530

    Adding support for Kubernetes ISOs
---
 .gitignore                                         |   2 +
 cloudstack/provider.go                             |   1 +
 .../resource_cloudstack_kubernetes_version.go      | 209 +++++++++++++++++++++
 go.mod                                             |   2 +-
 go.sum                                             |   2 +
 5 files changed, 215 insertions(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index 5982d2c..b6b0f36 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,3 +29,5 @@ website/vendor
 # Test exclusions
 !command/test-fixtures/**/*.tfstate
 !command/test-fixtures/**/.terraform/
+.terraform.lock.hcl
+provider.tf
diff --git a/cloudstack/provider.go b/cloudstack/provider.go
index 534e03a..4949c2f 100644
--- a/cloudstack/provider.go
+++ b/cloudstack/provider.go
@@ -90,6 +90,7 @@ func Provider() terraform.ResourceProvider {
                        "cloudstack_instance":             
resourceCloudStackInstance(),
                        "cloudstack_ipaddress":            
resourceCloudStackIPAddress(),
                        "cloudstack_kubernetes_cluster":   
resourceCloudStackKubernetesCluster(),
+                       "cloudstack_kubernetes_version":   
resourceCloudStackKubernetesVersion(),
                        "cloudstack_loadbalancer_rule":    
resourceCloudStackLoadBalancerRule(),
                        "cloudstack_network":              
resourceCloudStackNetwork(),
                        "cloudstack_network_acl":          
resourceCloudStackNetworkACL(),
diff --git a/cloudstack/resource_cloudstack_kubernetes_version.go 
b/cloudstack/resource_cloudstack_kubernetes_version.go
new file mode 100644
index 0000000..96eb42d
--- /dev/null
+++ b/cloudstack/resource_cloudstack_kubernetes_version.go
@@ -0,0 +1,209 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you 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 cloudstack
+
+import (
+       "fmt"
+       "log"
+       "strings"
+
+       "github.com/apache/cloudstack-go/v2/cloudstack"
+       "github.com/hashicorp/terraform/helper/schema"
+)
+
+func resourceCloudStackKubernetesVersion() *schema.Resource {
+       return &schema.Resource{
+               Create: resourceCloudStackKubernetesVersionCreate,
+               Read:   resourceCloudStackKubernetesVersionRead,
+               Update: resourceCloudStackKubernetesVersionUpdate,
+               Delete: resourceCloudStackKubernetesVersionDelete,
+               Importer: &schema.ResourceImporter{
+                       State: importStatePassthrough,
+               },
+
+               Schema: map[string]*schema.Schema{
+
+                       "semantic_version": {
+                               Type:     schema.TypeString,
+                               Required: true,
+                               ForceNew: true,
+                       },
+
+                       "url": {
+                               Type:     schema.TypeString,
+                               Required: true,
+                               ForceNew: true,
+                       },
+
+                       "min_cpu": {
+                               Type:     schema.TypeInt,
+                               Required: true,
+                               ForceNew: true,
+                       },
+
+                       "min_memory": {
+                               Type:     schema.TypeInt,
+                               Required: true,
+                               ForceNew: true,
+                       },
+
+                       // Optional Params
+                       "name": {
+                               Type:     schema.TypeString,
+                               Optional: true,
+                               Computed: true,
+                               ForceNew: true,
+                       },
+
+                       "zone": {
+                               Type:     schema.TypeString,
+                               Optional: true,
+                               Computed: true,
+                               ForceNew: true,
+                       },
+
+                       "checksum": {
+                               Type:     schema.TypeString,
+                               Optional: true,
+                       },
+
+                       "state": {
+                               Type:     schema.TypeString,
+                               Optional: true,
+                               Computed: true,
+                       },
+               },
+       }
+}
+
+func resourceCloudStackKubernetesVersionCreate(d *schema.ResourceData, meta 
interface{}) error {
+       cs := meta.(*cloudstack.CloudStackClient)
+
+       // State is always Enabled when created
+       if state, ok := d.GetOk("state"); ok {
+               if state.(string) != "Enabled" {
+                       return fmt.Errorf("State must be 'Enabled' when first 
creating a cluster")
+               }
+       }
+
+       semanticVersion := d.Get("semantic_version").(string)
+       url := d.Get("url").(string)
+       minCpu := d.Get("min_cpu").(int)
+       minMemory := d.Get("min_memory").(int)
+
+       p := cs.Kubernetes.NewAddKubernetesSupportedVersionParams(minCpu, 
minMemory, semanticVersion)
+       p.SetUrl(url)
+
+       if name, ok := d.GetOk("name"); ok {
+               p.SetName(name.(string))
+       }
+       if checksum, ok := d.GetOk("checksum"); ok {
+               p.SetName(checksum.(string))
+       }
+       if zone, ok := d.GetOk("zone"); ok {
+               zoneID, e := retrieveID(cs, "zone", zone.(string))
+               if e != nil {
+                       return e.Error()
+               }
+               p.SetZoneid(zoneID)
+       }
+
+       log.Printf("[DEBUG] Creating Kubernetes Version %s", semanticVersion)
+       r, err := cs.Kubernetes.AddKubernetesSupportedVersion(p)
+       if err != nil {
+               return err
+       }
+
+       log.Printf("[DEBUG] Kubernetes Version %s successfully created", 
semanticVersion)
+       d.SetId(r.Id)
+       return resourceCloudStackKubernetesVersionRead(d, meta)
+}
+
+func resourceCloudStackKubernetesVersionRead(d *schema.ResourceData, meta 
interface{}) error {
+       cs := meta.(*cloudstack.CloudStackClient)
+
+       log.Printf("[DEBUG] Retrieving Kubernetes Version %s", 
d.Get("semantic_version").(string))
+       fmt.Println(d.Id())
+
+       // Get the Kubernetes Version details
+       version, count, err := cs.Kubernetes.GetKubernetesSupportedVersionByID(
+               d.Id(),
+       )
+       fmt.Println(version, count, err)
+
+       if err != nil {
+               if count == 0 {
+                       log.Printf("[DEBUG] Kubernetes Version %s does not 
longer exist", d.Get("semantic_version").(string))
+                       d.SetId("")
+                       return nil
+               }
+
+               return err
+       }
+
+       // Update the config
+       d.SetId(version.Id)
+       d.Set("semantic_version", version.Semanticversion)
+       d.Set("name", version.Name)
+       d.Set("min_cpu", version.Mincpunumber)
+       d.Set("min_memory", version.Minmemory)
+       d.Set("state", version.State)
+
+       setValueOrID(d, "zone", version.Zonename, version.Zoneid)
+       return nil
+}
+
+func resourceCloudStackKubernetesVersionUpdate(d *schema.ResourceData, meta 
interface{}) error {
+       cs := meta.(*cloudstack.CloudStackClient)
+       d.Partial(true)
+
+       if d.HasChange("state") {
+               p := 
cs.Kubernetes.NewUpdateKubernetesSupportedVersionParams(d.Id(), 
d.Get("state").(string))
+               _, err := cs.Kubernetes.UpdateKubernetesSupportedVersion(p)
+               if err != nil {
+                       return fmt.Errorf(
+                               "Error Updating Kubernetes Version %s: %s", 
d.Id(), err)
+               }
+               d.SetPartial("state")
+       }
+       return resourceCloudStackKubernetesVersionRead(d, meta)
+}
+
+func resourceCloudStackKubernetesVersionDelete(d *schema.ResourceData, meta 
interface{}) error {
+       cs := meta.(*cloudstack.CloudStackClient)
+
+       // Create a new parameter struct
+       p := cs.Kubernetes.NewDeleteKubernetesSupportedVersionParams(d.Id())
+
+       // Delete the Kubernetes Version
+       _, err := cs.Kubernetes.DeleteKubernetesSupportedVersion(p)
+       if err != nil {
+               // This is a very poor way to be told the ID does no longer 
exist :(
+               if strings.Contains(err.Error(), fmt.Sprintf(
+                       "Invalid parameter id value=%s due to incorrect long 
value format, "+
+                               "or entity does not exist", d.Id())) {
+                       return nil
+               }
+
+               return fmt.Errorf("Error deleting Kubernetes Version: %s", err)
+       }
+
+       return nil
+}
diff --git a/go.mod b/go.mod
index d91a136..4552838 100644
--- a/go.mod
+++ b/go.mod
@@ -1,7 +1,7 @@
 module github.com/terraform-providers/terraform-provider-cloudstack
 
 require (
-       github.com/apache/cloudstack-go/v2 v2.13.1
+       github.com/apache/cloudstack-go/v2 v2.13.2-0.20220610072700-22535d4613e0
        github.com/go-ini/ini v1.40.0
        github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e // 
indirect
        github.com/hashicorp/go-multierror v1.0.0
diff --git a/go.sum b/go.sum
index 45648b4..0e15391 100644
--- a/go.sum
+++ b/go.sum
@@ -26,6 +26,8 @@ github.com/apache/cloudstack-go/v2 v2.11.0 
h1:IHekkdpeN/i4LY0/FkJX/PUR19ZthLza7e
 github.com/apache/cloudstack-go/v2 v2.11.0/go.mod 
h1:/u2vUqwD9endDgacTn4d2XxxVtu648f9edcYsM9wKGg=
 github.com/apache/cloudstack-go/v2 v2.13.1 
h1:UHhNJ+5coUsgk9D5WBbqbY8hYfJ1bXgNxaSg2uGz4Ns=
 github.com/apache/cloudstack-go/v2 v2.13.1/go.mod 
h1:aosD8Svfu5nhH5Sp4zcsVV1hT5UGt3mTgRXM8YqTKe0=
+github.com/apache/cloudstack-go/v2 v2.13.2-0.20220610072700-22535d4613e0 
h1:2k9a1M5rjZsdbp/4HK2vIpShK68O+aFnu3j7ssRAB3k=
+github.com/apache/cloudstack-go/v2 
v2.13.2-0.20220610072700-22535d4613e0/go.mod 
h1:aosD8Svfu5nhH5Sp4zcsVV1hT5UGt3mTgRXM8YqTKe0=
 github.com/apparentlymart/go-cidr v1.0.0 
h1:lGDvXx8Lv9QHjrAVP7jyzleG4F9+FkRhJcEsDFxeb8w=
 github.com/apparentlymart/go-cidr v1.0.0/go.mod 
h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc=
 github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod 
h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM=

Reply via email to