github.com/richardbowden/terraform@v0.6.12-0.20160901200758-30ea22c25211/builtin/providers/github/resource_github_repository_collaborator.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 resourceGithubRepositoryCollaborator() *schema.Resource { 9 return &schema.Resource{ 10 Create: resourceGithubRepositoryCollaboratorCreate, 11 Read: resourceGithubRepositoryCollaboratorRead, 12 // editing repository collaborators are not supported by github api so forcing new on any changes 13 Delete: resourceGithubRepositoryCollaboratorDelete, 14 15 Schema: map[string]*schema.Schema{ 16 "username": &schema.Schema{ 17 Type: schema.TypeString, 18 Required: true, 19 ForceNew: true, 20 }, 21 "repository": &schema.Schema{ 22 Type: schema.TypeString, 23 Required: true, 24 ForceNew: true, 25 }, 26 "permission": &schema.Schema{ 27 Type: schema.TypeString, 28 Optional: true, 29 ForceNew: true, 30 Default: "push", 31 ValidateFunc: validateValueFunc([]string{"pull", "push", "admin"}), 32 }, 33 }, 34 } 35 } 36 37 func resourceGithubRepositoryCollaboratorCreate(d *schema.ResourceData, meta interface{}) error { 38 client := meta.(*Organization).client 39 u := d.Get("username").(string) 40 r := d.Get("repository").(string) 41 p := d.Get("permission").(string) 42 43 _, err := client.Repositories.AddCollaborator(meta.(*Organization).name, r, u, 44 &github.RepositoryAddCollaboratorOptions{Permission: p}) 45 46 if err != nil { 47 return err 48 } 49 50 d.SetId(buildTwoPartID(&r, &u)) 51 52 return resourceGithubRepositoryCollaboratorRead(d, meta) 53 } 54 55 func resourceGithubRepositoryCollaboratorRead(d *schema.ResourceData, meta interface{}) error { 56 client := meta.(*Organization).client 57 u := d.Get("username").(string) 58 r := d.Get("repository").(string) 59 60 isCollaborator, _, err := client.Repositories.IsCollaborator(meta.(*Organization).name, r, u) 61 62 if !isCollaborator || err != nil { 63 d.SetId("") 64 return nil 65 } 66 67 collaborators, _, err := client.Repositories.ListCollaborators(meta.(*Organization).name, r, 68 &github.ListOptions{}) 69 70 if err != nil { 71 return err 72 } 73 74 for _, c := range collaborators { 75 if *c.Login == u { 76 permName, err := getRepoPermission(c.Permissions) 77 78 if err != nil { 79 return err 80 } 81 82 d.Set("permission", permName) 83 84 return nil 85 } 86 } 87 88 return nil 89 } 90 91 func resourceGithubRepositoryCollaboratorDelete(d *schema.ResourceData, meta interface{}) error { 92 client := meta.(*Organization).client 93 u := d.Get("username").(string) 94 r := d.Get("repository").(string) 95 96 _, err := client.Repositories.RemoveCollaborator(meta.(*Organization).name, r, u) 97 98 return err 99 }