in src/terraform/providers/terraform-provider-avere/resource_vfxt.go [707:854]
func resourceVfxtCreate(d *schema.ResourceData, m interface{}) error {
log.Printf("[INFO] [resourceVfxtCreate")
defer log.Printf("[INFO] resourceVfxtCreate]")
avereVfxt, err := fillAvereVfxt(d)
if err != nil {
return err
}
if avereVfxt.RunLocal == false {
if err := VerifySSHConnection(avereVfxt.ControllerAddress, avereVfxt.ControllerUsename, avereVfxt.SshAuthMethod, avereVfxt.SshPort); err != nil {
return err
}
}
//
// The cluster will be created in the following order
// 1. Cluster creation
// 2. SetId() in Terraform to commit the cluster creation
// 3. Timezone and DNS changes
// 4. NTP Servers
// 5. Global and Vserver Custom Support settings
// 6. Users
// 7. CIFS Settings
// 8. Core Filers including custom settings
// 9. Junctions
// 10. Support Uploads if requested
//
if err := avereVfxt.Platform.CreateVfxt(avereVfxt); err != nil {
return fmt.Errorf("failed to create cluster: %s\n", err)
}
d.Set(vfxt_management_ip, avereVfxt.ManagementIP)
// the management ip will uniquely identify the cluster in the VNET
d.SetId(avereVfxt.ManagementIP)
// prepare the environment to run commands for the newly created cluster
if err := avereVfxt.PrepareForVFXTNodeCommands(); err != nil {
return err
}
// the cluster is created initially with the support name, to initially set state for
// support uploads, the following method correctly sets the names to their correct values
if err := avereVfxt.SetSupportName(); err != nil {
return fmt.Errorf("ERROR: error while swapping cluster and names: %s", err)
}
// uncomment below for gsi testing
/*if false {
url := "GET_FROM_GSI_ENGINEERING"
log.Printf("[INFO] set alternate GSI url to %s", url)
if _, err := avereVfxt.ShellCommand(avereVfxt.getSetGSIUploadUrlCommand(url)); err != nil {
return fmt.Errorf("Error running dbutil.py command: %v", err)
}
}*/
if err := avereVfxt.CreateVServer(); err != nil {
return fmt.Errorf("ERROR: error while creating VServer: %s", err)
}
if !avereVfxt.EnableNlm {
if err := avereVfxt.SetNlm(); err != nil {
fmt.Errorf("ERROR: error while disabling Nlm: %s", err)
}
}
if avereVfxt.Timezone != DefaultTimezone || len(avereVfxt.DnsServer) > 0 || len(avereVfxt.DnsDomain) > 0 || len(avereVfxt.DnsSearch) > 0 {
if err := avereVfxt.UpdateCluster(); err != nil {
return err
}
}
if err := updateNtpServers(d, avereVfxt); err != nil {
return err
}
if err := createGlobalSettings(d, avereVfxt); err != nil {
return err
}
if err := createVServerSettings(d, avereVfxt); err != nil {
return err
}
if err := createUsers(d, avereVfxt); err != nil {
return err
}
if err := avereVfxt.EnableCIFS(); err != nil {
return err
}
if avereVfxt.EnableExtendedGroups == true {
if err := avereVfxt.ModifyExtendedGroups(); err != nil {
return err
}
}
if err := avereVfxt.EnableLoginServices(); err != nil {
return err
}
// add the new filers
existingCoreFilers := make(map[string]*CoreFiler)
coreFilersToAdd, coreFilersToModify, err := getCoreFilersToAddorModify(d, existingCoreFilers, existingCoreFilers)
if err != nil {
return err
}
if err := createCoreFilers(coreFilersToAdd, avereVfxt); err != nil {
return err
}
if err := modifyCoreFilers(coreFilersToModify, avereVfxt); err != nil {
return err
}
existingAzureStorageFilers := make(map[string]*AzureStorageFiler)
storageFilersToAdd, storageFilersToModify, err := getAzureStorageFilersToAddorModify(d, existingAzureStorageFilers, existingAzureStorageFilers)
if err != nil {
return err
}
if err := createAzureStorageFilers(storageFilersToAdd, avereVfxt); err != nil {
return err
}
if err := modifyAzureStorageFilers(storageFilersToModify, avereVfxt); err != nil {
return err
}
// add the new junctions
if err := createJunctions(d, avereVfxt); err != nil {
return err
}
// update the support
if avereVfxt.EnableSupportUploads == true {
if err := avereVfxt.ModifySupportUploads(); err != nil {
return err
}
}
log.Printf("[INFO] vfxt: ensure healthy and stable cluster after cluster creation")
if err := avereVfxt.BlockUntilClusterHealthy(); err != nil {
return err
}
return resourceVfxtRead(d, m)
}