in cloudstack/resource_cloudstack_host.go [154:207]
func resourceCloudStackHostCreate(d *schema.ResourceData, meta interface{}) error {
cs := meta.(*cloudstack.CloudStackClient)
hypervisor := d.Get("hypervisor").(string)
pod_id := d.Get("pod_id").(string)
url := d.Get("url").(string)
zone_id := d.Get("zone_id").(string)
p := cs.Host.NewAddHostParams(hypervisor, pod_id, url, zone_id)
if cluster_id, ok := d.GetOk("cluster_id"); ok {
p.SetClusterid(cluster_id.(string))
}
if cluster_name, ok := d.GetOk("cluster_name"); ok {
p.SetClustername(cluster_name.(string))
}
if host_tags, ok := d.GetOk("host_tags"); ok {
p.SetHosttags(host_tags.([]string))
}
if username, ok := d.GetOk("username"); ok {
p.SetUsername(username.(string))
}
if password, ok := d.GetOk("password"); ok {
p.SetPassword(password.(string))
}
timeout := time.After(time.Duration(d.Get("create_timeout").(int)) * time.Second)
tick := time.NewTicker(5 * time.Second)
var err error
var host *cloudstack.AddHostResponse
for {
select {
case <-timeout:
return fmt.Errorf("timeout waiting for Host to be created, with error: %s", err)
case <-tick.C:
log.Printf("[DEBUG] Trying to create host %s", d.Get("url").(string))
host, err = cs.Host.AddHost(p)
if err != nil {
log.Printf("[ERROR] Error creating host %s: %s. Will try again...", d.Get("url").(string), err)
continue
}
if host.Id != "" {
log.Printf("[DEBUG] Host %s successfully created", url)
d.SetId(host.Id)
return resourceCloudStackHostRead(d, meta)
}
}
}
}