Skip to content

Commit

Permalink
Publish Release 1.9.4 (#494)
Browse files Browse the repository at this point in the history
* Change ECS, ESS sdk to official go sdk

* Add a example to create swarm and deploy wordpress on it

* cs_kubernetes supports to output kube config and certificate

* cs_kubernetes supports output worker nodes and master nodes
  • Loading branch information
xiaozhu36 committed Jun 8, 2018
1 parent 349a5dc commit 4c60301
Show file tree
Hide file tree
Showing 17,082 changed files with 6,201,051 additions and 42 deletions.
The diff you're trying to view is too large. We only load the first 3000 changed files.
1 change: 0 additions & 1 deletion .gitignore
@@ -1,4 +1,3 @@
vendor/
bin/
**/\.terraform/
terraform-provider-alicloud
Expand Down
7 changes: 6 additions & 1 deletion CHANGELOG.md
Expand Up @@ -2,7 +2,12 @@

IMPROVEMENTS:

- Change ECS, ESS sdk to official go sdk ([#480](https://github.com/alibaba/terraform-provider/pull/480)))
- cs_kubernetes supports output worker nodes and master nodes ([#489](https://github.com/alibaba/terraform-provider/pull/489)))
- Add vendor ([#488](https://github.com/alibaba/terraform-provider/pull/488)))
- cs_kubernetes supports to output kube config and certificate ([#488](https://github.com/alibaba/terraform-provider/pull/488)))
- Add a example to deploy mysql and wordpress on kubernetes ([#488](https://github.com/alibaba/terraform-provider/pull/488)))
- Add a example to create swarm and deploy wordpress on it ([#487](https://github.com/alibaba/terraform-provider/pull/487)))
- Change ECS, ESS sdk to official go sdk ([#485](https://github.com/alibaba/terraform-provider/pull/485)))
- Add website in this repo ([#479](https://github.com/alibaba/terraform-provider/pull/479)))


Expand Down
49 changes: 45 additions & 4 deletions alicloud/common.go
@@ -1,14 +1,15 @@
package alicloud

import (
"fmt"
"strings"

"encoding/base64"

"encoding/json"
"encoding/xml"
"fmt"
"io/ioutil"
"os"
"os/user"
"strconv"
"strings"

"strconv"

Expand Down Expand Up @@ -384,3 +385,43 @@ func ConvertIntegerToInt(value requests.Integer) (v int, err error) {
}
return
}

func GetUserHomeDir() (string, error) {
usr, err := user.Current()
if err != nil {
return "", fmt.Errorf("Get current user got an error: %#v.", err)
}
return usr.HomeDir, nil
}

func writeToFile(filePath string, data interface{}) error {
if strings.HasPrefix(filePath, "~") {
home, err := GetUserHomeDir()
if err != nil {
return err
}
if home != "" {
filePath = strings.Replace(filePath, "~", home, 1)
}
}

os.Remove(filePath)

var out string
switch data.(type) {
case string:
out = data.(string)
break
case nil:
return nil
default:
bs, err := json.MarshalIndent(data, "", "\t")
if err != nil {
return fmt.Errorf("MarshalIndent data %#v got an error: %#v", data, err)
}
out = string(bs)
}

ioutil.WriteFile(filePath, []byte(out), 422)
return nil
}
11 changes: 0 additions & 11 deletions alicloud/data_source_alicloud_common.go
Expand Up @@ -2,10 +2,7 @@ package alicloud

import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"os"

"github.com/hashicorp/terraform/helper/hashcode"
"github.com/hashicorp/terraform/helper/schema"
Expand All @@ -22,14 +19,6 @@ func dataResourceIdHash(ids []string) string {
return fmt.Sprintf("%d", hashcode.String(buf.String()))
}

func writeToFile(filePath string, data interface{}) {
os.Remove(filePath)
if bs, err := json.MarshalIndent(data, "", "\t"); err == nil {
str := string(bs)
ioutil.WriteFile(filePath, []byte(str), 777)
}
}

func outputInstancesSchema() map[string]*schema.Schema {
return map[string]*schema.Schema{
"instance_id": {
Expand Down
6 changes: 2 additions & 4 deletions alicloud/extension_ecs.go
Expand Up @@ -72,10 +72,8 @@ var SupportedDiskCategory = map[DiskCategory]DiskCategory{
const AllPortRange = "-1/-1"

const (
KubernetesImageId = "centos_7"
KubernetesMasterNumber = 3
KubernetesVersion = "1.9.3"
KubernetesDockerVersion = "17.06.2-ce-1"
KubernetesImageId = "centos_7"
KubernetesMasterNumber = 3
)

type RenewalStatus string
Expand Down
100 changes: 88 additions & 12 deletions alicloud/resource_alicloud_cs_kubernetes.go
Expand Up @@ -123,7 +123,37 @@ func resourceAlicloudCSKubernetes() *schema.Resource {
Type: schema.TypeBool,
Optional: true,
},

"kube_config": &schema.Schema{
Type: schema.TypeString,
Optional: true,
},
"client_cert": &schema.Schema{
Type: schema.TypeString,
Optional: true,
},
"client_key": &schema.Schema{
Type: schema.TypeString,
Optional: true,
},
"cluster_ca_cert": &schema.Schema{
Type: schema.TypeString,
Optional: true,
},

// 'version' is a reserved parameter and it just is used to test. No Recommendation to expose it.
"version": &schema.Schema{
Type: schema.TypeString,
Optional: true,
},

"nodes": &schema.Schema{
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{Type: schema.TypeString},
Deprecated: "Field 'nodes' has been deprecated from provider version 1.9.4. New field 'master_nodes' replaces it.",
},
"master_nodes": &schema.Schema{
Type: schema.TypeList,
Computed: true,
Elem: &schema.Resource{
Expand All @@ -140,7 +170,23 @@ func resourceAlicloudCSKubernetes() *schema.Resource {
Type: schema.TypeString,
Computed: true,
},
"role": {
},
},
},
"worker_nodes": &schema.Schema{
Type: schema.TypeList,
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"id": {
Type: schema.TypeString,
Computed: true,
},
"name": {
Type: schema.TypeString,
Computed: true,
},
"private_ip": {
Type: schema.TypeString,
Computed: true,
},
Expand Down Expand Up @@ -287,7 +333,8 @@ func resourceAlicloudCSKubernetesRead(d *schema.ResourceData, meta interface{})
d.Set("vpc_id", cluster.VPCID)
d.Set("security_group_id", cluster.SecurityGroupID)

var nodes []map[string]interface{}
var masterNodes []map[string]interface{}
var workerNodes []map[string]interface{}
var master, worker cs.KubernetesNodeType

pageNumber := 1
Expand Down Expand Up @@ -320,13 +367,13 @@ func resourceAlicloudCSKubernetesRead(d *schema.ResourceData, meta interface{})
"id": node.InstanceId,
"name": node.InstanceName,
"private_ip": node.IpAddress[0],
"role": node.InstanceRole,
}
nodes = append(nodes, mapping)
if master.InstanceId == "" && node.InstanceRole == "Master" {
if node.InstanceRole == "Master" {
master = node
} else if worker.InstanceId == "" && node.InstanceRole == "Worker" {
masterNodes = append(masterNodes, mapping)
} else {
worker = node
workerNodes = append(workerNodes, mapping)
}
}

Expand All @@ -335,7 +382,8 @@ func resourceAlicloudCSKubernetesRead(d *schema.ResourceData, meta interface{})
}
pageNumber += 1
}
d.Set("nodes", nodes)
d.Set("master_nodes", masterNodes)
d.Set("worker_nodes", workerNodes)

d.Set("master_instance_type", master.InstanceType)
if disks, err := client.DescribeDisksByType(master.InstanceId, DiskTypeSystem); err != nil {
Expand All @@ -355,8 +403,8 @@ func resourceAlicloudCSKubernetesRead(d *schema.ResourceData, meta interface{})
}

if cluster.SecurityGroupID == "" {
if inst, err := client.DescribeInstanceById(worker.InstanceId); err != nil {
return fmt.Errorf("[ERROR] QueryInstanceById %s got an error: %#v.", worker.InstanceId, err)
if inst, err := client.DescribeInstanceAttribute(worker.InstanceId); err != nil {
return fmt.Errorf("[ERROR] DescribeInstanceAttribute %s got an error: %#v.", worker.InstanceId, err)
} else {
d.Set("security_group_id", inst.SecurityGroupIds.SecurityGroupId[0])
}
Expand Down Expand Up @@ -388,10 +436,39 @@ func resourceAlicloudCSKubernetesRead(d *schema.ResourceData, meta interface{})
req.VpcId = cluster.VPCID
if nat, err := client.vpcconn.DescribeNatGateways(req); err != nil {
return fmt.Errorf("[ERROR] DescribeNatGateways by VPC Id %s: %#v.", cluster.VPCID, err)
} else if nat != nil {
} else if nat != nil && len(nat.NatGateways.NatGateway) > 0 {
d.Set("nat_gateway_id", nat.NatGateways.NatGateway[0].NatGatewayId)
}

cert, err := client.csconn.GetClusterCerts(d.Id())
if err != nil {
return fmt.Errorf("Get Cluster %s Certs got an error: %#v.", d.Id(), err)
}
if ce, ok := d.GetOk("client_cert"); ok && ce.(string) != "" {
if err := writeToFile(ce.(string), cert.Cert); err != nil {
return err
}
}
if key, ok := d.GetOk("client_key"); ok && key.(string) != "" {
if err := writeToFile(key.(string), cert.Key); err != nil {
return err
}
}
if ca, ok := d.GetOk("cluster_ca_cert"); ok && ca.(string) != "" {
if err := writeToFile(ca.(string), cert.CA); err != nil {
return err
}
}
if file, ok := d.GetOk("kube_config"); ok && file.(string) != "" {
config, err := client.csconn.GetClusterConfig(d.Id())
if err != nil {
return fmt.Errorf("GetClusterConfig got an error: %#v.", err)
}
if err := writeToFile(file.(string), config.Config); err != nil {
return err
}
}

return nil
}

Expand Down Expand Up @@ -459,8 +536,7 @@ func buildKunernetesArgs(d *schema.ResourceData, meta interface{}) (*cs.Kubernet
WorkerSystemDiskCategory: ecs.DiskCategory(d.Get("worker_disk_category").(string)),
WorkerSystemDiskSize: int64(d.Get("worker_disk_size").(int)),
SNatEntry: d.Get("new_nat_gateway").(bool),
KubernetesVersion: KubernetesVersion,
DockerVersion: KubernetesDockerVersion,
KubernetesVersion: d.Get("version").(string),
ContainerCIDR: d.Get("pod_cidr").(string),
ServiceCIDR: d.Get("service_cidr").(string),
SSHFlags: d.Get("enable_ssh").(bool),
Expand Down
8 changes: 4 additions & 4 deletions alicloud/resource_alicloud_cs_kubernetes_test.go
Expand Up @@ -26,7 +26,7 @@ func TestAccAlicloudCSKubernetes_basic(t *testing.T) {
testAccCheckContainerClusterExists("alicloud_cs_kubernetes.k8s", &k8s),
resource.TestCheckResourceAttr("alicloud_cs_kubernetes.k8s", "worker_number", "3"),
resource.TestCheckResourceAttr("alicloud_cs_kubernetes.k8s", "name", "terraform-test-for-k8s-basic"),
resource.TestCheckResourceAttr("alicloud_cs_kubernetes.k8s", "nodes.#", "6"),
resource.TestCheckResourceAttr("alicloud_cs_kubernetes.k8s", "master_nodes.#", "3"),
resource.TestCheckResourceAttr("alicloud_cs_kubernetes.k8s", "master_disk_category", "cloud_ssd"),
resource.TestCheckResourceAttr("alicloud_cs_kubernetes.k8s", "worker_disk_size", "50"),
resource.TestCheckResourceAttr("alicloud_cs_kubernetes.k8s", "worker_disk_category", "cloud_efficiency"),
Expand Down Expand Up @@ -56,7 +56,7 @@ func TestAccAlicloudCSKubernetes_autoVpc(t *testing.T) {
Check: resource.ComposeTestCheckFunc(
testAccCheckContainerClusterExists("alicloud_cs_kubernetes.k8s", &k8s),
resource.TestCheckResourceAttr("alicloud_cs_kubernetes.k8s", "worker_number", "3"),
resource.TestCheckResourceAttr("alicloud_cs_kubernetes.k8s", "nodes.#", "6"),
resource.TestCheckResourceAttr("alicloud_cs_kubernetes.k8s", "master_nodes.#", "3"),
resource.TestCheckResourceAttr("alicloud_cs_kubernetes.k8s", "worker_disk_category", "cloud_ssd"),
resource.TestCheckResourceAttr("alicloud_cs_kubernetes.k8s", "master_disk_size", "50"),
resource.TestCheckResourceAttr("alicloud_cs_kubernetes.k8s", "master_disk_category", "cloud_efficiency"),
Expand Down Expand Up @@ -135,8 +135,8 @@ resource "alicloud_cs_kubernetes" "k8s" {
worker_instance_type = "${data.alicloud_instance_types.default.instance_types.0.id}"
worker_number = 3
password = "Test12345"
pod_cidr = "192.168.1.0/24"
service_cidr = "192.168.2.0/24"
pod_cidr = "172.20.0.0/16"
service_cidr = "172.21.0.0/20"
enable_ssh = true
install_cloud_monitor = true
worker_disk_category = "cloud_ssd"
Expand Down
9 changes: 6 additions & 3 deletions alicloud/resource_alicloud_ess_attachment.go
Expand Up @@ -4,6 +4,9 @@ import (
"fmt"
"time"

"reflect"

"github.com/aliyun/alibaba-cloud-sdk-go/services/ess"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
"reflect"
Expand Down Expand Up @@ -80,9 +83,9 @@ func resourceAliyunEssAttachmentUpdate(d *schema.ResourceData, meta interface{})
s := reflect.ValueOf(req).Elem()

if err := resource.Retry(5*time.Minute, func() *resource.RetryError {
for i, id := range add {
s.FieldByName(fmt.Sprintf("InstanceId%d", i+1)).Set(reflect.ValueOf(id))
}
for i, id := range add {
s.FieldByName(fmt.Sprintf("InstanceId%d", i+1)).Set(reflect.ValueOf(id))
}

if _, err := client.essconn.AttachInstances(req); err != nil {
if IsExceptedError(err, IncorrectCapacityMaxSize) {
Expand Down
15 changes: 15 additions & 0 deletions alicloud/service_alicloud_ecs.go
Expand Up @@ -48,6 +48,21 @@ func (client *AliyunClient) DescribeInstanceById(id string) (instance ecs.Instan
return resp.Instances.Instance[0], nil
}

func (client *AliyunClient) DescribeInstanceAttribute(id string) (instance ecs.DescribeInstanceAttributeResponse, err error) {
req := ecs.CreateDescribeInstanceAttributeRequest()
req.InstanceId = id

resp, err := client.ecsconn.DescribeInstanceAttribute(req)
if err != nil {
return
}
if resp == nil {
return instance, GetNotFoundErrorFromString(GetNotFoundMessage("Instance", id))
}

return *resp, nil
}

func (client *AliyunClient) QueryInstanceSystemDisk(id string) (disk ecs.Disk, err error) {
args := ecs.CreateDescribeDisksRequest()
args.InstanceId = id
Expand Down

0 comments on commit 4c60301

Please sign in to comment.