github.com/andresvia/terraform@v0.6.15-0.20160412045437-d51c75946785/builtin/providers/github/resource_github_membership.go (about) 1 package github 2 3 import ( 4 "github.com/google/go-github/github" 5 "github.com/hashicorp/terraform/helper/schema" 6 ) 7 8 func resourceGithubMembership() *schema.Resource { 9 10 return &schema.Resource{ 11 Create: resourceGithubMembershipCreate, 12 Read: resourceGithubMembershipRead, 13 Update: resourceGithubMembershipUpdate, 14 Delete: resourceGithubMembershipDelete, 15 16 Schema: map[string]*schema.Schema{ 17 "username": &schema.Schema{ 18 Type: schema.TypeString, 19 Required: true, 20 ForceNew: true, 21 }, 22 "role": &schema.Schema{ 23 Type: schema.TypeString, 24 Optional: true, 25 ValidateFunc: validateValueFunc([]string{"member", "admin"}), 26 Default: "member", 27 }, 28 }, 29 } 30 } 31 32 func resourceGithubMembershipCreate(d *schema.ResourceData, meta interface{}) error { 33 client := meta.(*Organization).client 34 n := d.Get("username").(string) 35 r := d.Get("role").(string) 36 37 membership, _, err := client.Organizations.EditOrgMembership(n, meta.(*Organization).name, 38 &github.Membership{Role: &r}) 39 if err != nil { 40 return err 41 } 42 43 d.SetId(buildTwoPartID(membership.Organization.Login, membership.User.Login)) 44 45 return resourceGithubMembershipRead(d, meta) 46 } 47 48 func resourceGithubMembershipRead(d *schema.ResourceData, meta interface{}) error { 49 client := meta.(*Organization).client 50 51 membership, _, err := client.Organizations.GetOrgMembership(d.Get("username").(string), meta.(*Organization).name) 52 if err != nil { 53 d.SetId("") 54 return nil 55 } 56 username := membership.User.Login 57 roleName := membership.Role 58 59 d.Set("username", *username) 60 d.Set("role", *roleName) 61 return nil 62 } 63 64 func resourceGithubMembershipUpdate(d *schema.ResourceData, meta interface{}) error { 65 client := meta.(*Organization).client 66 n := d.Get("username").(string) 67 r := d.Get("role").(string) 68 69 _, _, err := client.Organizations.EditOrgMembership(n, meta.(*Organization).name, &github.Membership{ 70 Role: &r, 71 }) 72 if err != nil { 73 return err 74 } 75 return nil 76 } 77 78 func resourceGithubMembershipDelete(d *schema.ResourceData, meta interface{}) error { 79 client := meta.(*Organization).client 80 n := d.Get("username").(string) 81 82 _, err := client.Organizations.RemoveOrgMembership(n, meta.(*Organization).name) 83 84 return err 85 }