Esempio n. 1
0
func resourceCLCServerCreate(d *schema.ResourceData, meta interface{}) error {
	client := meta.(*clc.Client)
	spec := server.Server{
		Name:                 d.Get("name_template").(string),
		Password:             d.Get("password").(string),
		Description:          d.Get("description").(string),
		GroupID:              d.Get("group_id").(string),
		CPU:                  d.Get("cpu").(int),
		MemoryGB:             d.Get("memory_mb").(int) / 1024,
		SourceServerID:       d.Get("source_server_id").(string),
		Type:                 d.Get("type").(string),
		IPaddress:            d.Get("private_ip_address").(string),
		NetworkID:            d.Get("network_id").(string),
		Storagetype:          d.Get("storage_type").(string),
		AntiAffinityPolicyID: d.Get("aa_policy_id").(string),
	}

	var err error
	disks, err := parseAdditionalDisks(d)
	if err != nil {
		return fmt.Errorf("Failed parsing disks: %v", err)
	}
	spec.Additionaldisks = disks
	fields, err := parseCustomFields(d)
	if err != nil {
		return fmt.Errorf("Failed setting customfields: %v", err)
	}
	spec.Customfields = fields

	pkgs, err := parsePackages(d)
	if err != nil {
		return fmt.Errorf("Failed setting packages: %v", err)
	}
	spec.Packages = pkgs

	if spec.Type == "bareMetal" {
		// additional bareMetal fields
		if conf_id := d.Get("configuration_id").(string); conf_id != "" {
			spec.ConfigurationID = conf_id
		}
		if os_type := d.Get("os_type").(string); os_type != "" {
			spec.OSType = os_type
		}
	}

	resp, err := client.Server.Create(spec)
	if err != nil || !resp.IsQueued {
		return fmt.Errorf("Failed creating server: %v", err)
	}
	// server's UUID returned under rel=self link
	_, uuid := resp.Links.GetID("self")

	ok, st := resp.GetStatusID()
	if !ok {
		return fmt.Errorf("Failed extracting status to poll on %v: %v", resp, err)
	}
	err = waitStatus(client, st)
	if err != nil {
		return err
	}

	s, err := client.Server.Get(uuid)
	d.SetId(strings.ToUpper(s.Name))
	log.Printf("[INFO] Server created. id: %v", s.Name)
	return resourceCLCServerRead(d, meta)
}