in cloudstack/resource_cloudstack_kubernetes_cluster.go [139:206]
func resourceCloudStackKubernetesClusterCreate(d *schema.ResourceData, meta interface{}) error {
cs := meta.(*cloudstack.CloudStackClient)
// State is always Running when created
if state, ok := d.GetOk("state"); ok {
if state.(string) != "Running" {
return fmt.Errorf("State must be 'Running' when first creating a cluster")
}
}
name := d.Get("name").(string)
size := int64(d.Get("size").(int))
serviceOfferingID, e := retrieveID(cs, "service_offering", d.Get("service_offering").(string))
if e != nil {
return e.Error()
}
zoneID, e := retrieveID(cs, "zone", d.Get("zone").(string))
if e != nil {
return e.Error()
}
kubernetesVersionID, e := retrieveID(cs, "kubernetes_version", d.Get("kubernetes_version").(string))
if e != nil {
return e.Error()
}
// Create a new parameter struct
p := cs.Kubernetes.NewCreateKubernetesClusterParams(name, kubernetesVersionID, name, serviceOfferingID, size, zoneID)
// Set optional params
if description, ok := d.GetOk("description"); ok {
p.SetDescription(description.(string))
}
if keypair, ok := d.GetOk("keypair"); ok {
p.SetKeypair(keypair.(string))
}
if networkID, ok := d.GetOk("network_id"); ok {
p.SetNetworkid(networkID.(string))
}
if controlNodesSize, ok := d.GetOk("control_nodes_size"); ok {
p.SetControlnodes(int64(controlNodesSize.(int)))
}
if noderootdisksize, ok := d.GetOk("noderootdisksize"); ok {
p.SetNoderootdisksize(int64(noderootdisksize.(int)))
}
// If there is a project supplied, we retrieve and set the project id
if err := setProjectid(p, cs, d); err != nil {
return err
}
log.Printf("[DEBUG] Creating Kubernetes Cluster %s", name)
r, err := cs.Kubernetes.CreateKubernetesCluster(p)
if err != nil {
return err
}
log.Printf("[DEBUG] Kubernetes Cluster %s successfully created", name)
d.SetId(r.Id)
if _, ok := d.GetOk("autoscaling_enabled"); ok {
err = autoscaleKubernetesCluster(d, meta)
if err != nil {
return err
}
}
return resourceCloudStackKubernetesClusterRead(d, meta)
}