func createSimpleDirectoryService(dsconn *directoryservice.DirectoryService, d *schema.ResourceData) (directoryId string, err error) { if _, ok := d.GetOk("size"); !ok { return "", fmt.Errorf("size is required for type = SimpleAD") } input := directoryservice.CreateDirectoryInput{ Name: aws.String(d.Get("name").(string)), Password: aws.String(d.Get("password").(string)), Size: aws.String(d.Get("size").(string)), } if v, ok := d.GetOk("description"); ok { input.Description = aws.String(v.(string)) } if v, ok := d.GetOk("short_name"); ok { input.ShortName = aws.String(v.(string)) } input.VpcSettings, err = buildVpcSettings(d) if err != nil { return "", err } log.Printf("[DEBUG] Creating Simple Directory Service: %s", input) out, err := dsconn.CreateDirectory(&input) if err != nil { return "", err } log.Printf("[DEBUG] Simple Directory Service created: %s", out) return *out.DirectoryId, nil }
func resourceAwsDirectoryServiceDirectoryCreate(d *schema.ResourceData, meta interface{}) error { dsconn := meta.(*AWSClient).dsconn input := directoryservice.CreateDirectoryInput{ Name: aws.String(d.Get("name").(string)), Password: aws.String(d.Get("password").(string)), Size: aws.String(d.Get("size").(string)), } if v, ok := d.GetOk("description"); ok { input.Description = aws.String(v.(string)) } if v, ok := d.GetOk("short_name"); ok { input.ShortName = aws.String(v.(string)) } if v, ok := d.GetOk("vpc_settings"); ok { settings := v.([]interface{}) if len(settings) > 1 { return fmt.Errorf("Only a single vpc_settings block is expected") } else if len(settings) == 1 { s := settings[0].(map[string]interface{}) var subnetIds []*string for _, id := range s["subnet_ids"].(*schema.Set).List() { subnetIds = append(subnetIds, aws.String(id.(string))) } vpcSettings := directoryservice.DirectoryVpcSettings{ SubnetIds: subnetIds, VpcId: aws.String(s["vpc_id"].(string)), } input.VpcSettings = &vpcSettings } } log.Printf("[DEBUG] Creating Directory Service: %s", input) out, err := dsconn.CreateDirectory(&input) if err != nil { return err } log.Printf("[DEBUG] Directory Service created: %s", out) d.SetId(*out.DirectoryId) // Wait for creation log.Printf("[DEBUG] Waiting for DS (%q) to become available", d.Id()) stateConf := &resource.StateChangeConf{ Pending: []string{"Requested", "Creating", "Created"}, Target: "Active", Refresh: func() (interface{}, string, error) { resp, err := dsconn.DescribeDirectories(&directoryservice.DescribeDirectoriesInput{ DirectoryIds: []*string{aws.String(d.Id())}, }) if err != nil { log.Printf("Error during creation of DS: %q", err.Error()) return nil, "", err } ds := resp.DirectoryDescriptions[0] log.Printf("[DEBUG] Creation of DS %q is in following stage: %q.", d.Id(), *ds.Stage) return ds, *ds.Stage, nil }, Timeout: 10 * time.Minute, } if _, err := stateConf.WaitForState(); err != nil { return fmt.Errorf( "Error waiting for Directory Service (%s) to become available: %#v", d.Id(), err) } if v, ok := d.GetOk("alias"); ok { d.SetPartial("alias") input := directoryservice.CreateAliasInput{ DirectoryId: aws.String(d.Id()), Alias: aws.String(v.(string)), } log.Printf("[DEBUG] Assigning alias %q to DS directory %q", v.(string), d.Id()) out, err := dsconn.CreateAlias(&input) if err != nil { return err } log.Printf("[DEBUG] Alias %q assigned to DS directory %q", *out.Alias, *out.DirectoryId) } return resourceAwsDirectoryServiceDirectoryUpdate(d, meta) }