github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/aws/resource_aws_opsworks_user_profile.go (about) 1 package aws 2 3 import ( 4 "log" 5 6 "github.com/hashicorp/terraform/helper/schema" 7 8 "github.com/aws/aws-sdk-go/aws" 9 "github.com/aws/aws-sdk-go/aws/awserr" 10 "github.com/aws/aws-sdk-go/service/opsworks" 11 ) 12 13 func resourceAwsOpsworksUserProfile() *schema.Resource { 14 return &schema.Resource{ 15 Create: resourceAwsOpsworksUserProfileCreate, 16 Read: resourceAwsOpsworksUserProfileRead, 17 Update: resourceAwsOpsworksUserProfileUpdate, 18 Delete: resourceAwsOpsworksUserProfileDelete, 19 20 Schema: map[string]*schema.Schema{ 21 "id": &schema.Schema{ 22 Type: schema.TypeString, 23 Computed: true, 24 }, 25 26 "user_arn": &schema.Schema{ 27 Type: schema.TypeString, 28 Required: true, 29 }, 30 31 "allow_self_management": &schema.Schema{ 32 Type: schema.TypeBool, 33 Optional: true, 34 Default: false, 35 }, 36 37 "ssh_username": &schema.Schema{ 38 Type: schema.TypeString, 39 Required: true, 40 }, 41 42 "ssh_public_key": &schema.Schema{ 43 Type: schema.TypeString, 44 Optional: true, 45 }, 46 }, 47 } 48 } 49 50 func resourceAwsOpsworksUserProfileRead(d *schema.ResourceData, meta interface{}) error { 51 client := meta.(*AWSClient).opsworksconn 52 53 req := &opsworks.DescribeUserProfilesInput{ 54 IamUserArns: []*string{ 55 aws.String(d.Id()), 56 }, 57 } 58 59 log.Printf("[DEBUG] Reading OpsWorks user profile: %s", d.Id()) 60 61 resp, err := client.DescribeUserProfiles(req) 62 if err != nil { 63 if awserr, ok := err.(awserr.Error); ok { 64 if awserr.Code() == "ResourceNotFoundException" { 65 log.Printf("[DEBUG] OpsWorks user profile (%s) not found", d.Id()) 66 d.SetId("") 67 return nil 68 } 69 } 70 return err 71 } 72 73 for _, profile := range resp.UserProfiles { 74 d.Set("allow_self_management", profile.AllowSelfManagement) 75 d.Set("user_arn", profile.IamUserArn) 76 d.Set("ssh_public_key", profile.SshPublicKey) 77 d.Set("ssh_username", profile.SshUsername) 78 break 79 } 80 81 return nil 82 } 83 84 func resourceAwsOpsworksUserProfileCreate(d *schema.ResourceData, meta interface{}) error { 85 client := meta.(*AWSClient).opsworksconn 86 87 req := &opsworks.CreateUserProfileInput{ 88 AllowSelfManagement: aws.Bool(d.Get("allow_self_management").(bool)), 89 IamUserArn: aws.String(d.Get("user_arn").(string)), 90 SshPublicKey: aws.String(d.Get("ssh_public_key").(string)), 91 SshUsername: aws.String(d.Get("ssh_username").(string)), 92 } 93 94 resp, err := client.CreateUserProfile(req) 95 if err != nil { 96 return err 97 } 98 99 d.SetId(*resp.IamUserArn) 100 101 return resourceAwsOpsworksUserProfileUpdate(d, meta) 102 } 103 104 func resourceAwsOpsworksUserProfileUpdate(d *schema.ResourceData, meta interface{}) error { 105 client := meta.(*AWSClient).opsworksconn 106 107 req := &opsworks.UpdateUserProfileInput{ 108 AllowSelfManagement: aws.Bool(d.Get("allow_self_management").(bool)), 109 IamUserArn: aws.String(d.Get("user_arn").(string)), 110 SshPublicKey: aws.String(d.Get("ssh_public_key").(string)), 111 SshUsername: aws.String(d.Get("ssh_username").(string)), 112 } 113 114 log.Printf("[DEBUG] Updating OpsWorks user profile: %s", req) 115 116 _, err := client.UpdateUserProfile(req) 117 if err != nil { 118 return err 119 } 120 121 return resourceAwsOpsworksUserProfileRead(d, meta) 122 } 123 124 func resourceAwsOpsworksUserProfileDelete(d *schema.ResourceData, meta interface{}) error { 125 client := meta.(*AWSClient).opsworksconn 126 127 req := &opsworks.DeleteUserProfileInput{ 128 IamUserArn: aws.String(d.Id()), 129 } 130 131 log.Printf("[DEBUG] Deleting OpsWorks user profile: %s", d.Id()) 132 133 _, err := client.DeleteUserProfile(req) 134 135 return err 136 }