github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/github/resource_github_team.go (about)

     1  package github
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/google/go-github/github"
     7  	"github.com/hashicorp/terraform/helper/schema"
     8  )
     9  
    10  func resourceGithubTeam() *schema.Resource {
    11  
    12  	return &schema.Resource{
    13  		Create: resourceGithubTeamCreate,
    14  		Read:   resourceGithubTeamRead,
    15  		Update: resourceGithubTeamUpdate,
    16  		Delete: resourceGithubTeamDelete,
    17  		Importer: &schema.ResourceImporter{
    18  			State: schema.ImportStatePassthrough,
    19  		},
    20  
    21  		Schema: map[string]*schema.Schema{
    22  			"name": {
    23  				Type:     schema.TypeString,
    24  				Required: true,
    25  			},
    26  			"description": {
    27  				Type:     schema.TypeString,
    28  				Optional: true,
    29  			},
    30  			"privacy": {
    31  				Type:         schema.TypeString,
    32  				Optional:     true,
    33  				Default:      "secret",
    34  				ValidateFunc: validateValueFunc([]string{"secret", "closed"}),
    35  			},
    36  		},
    37  	}
    38  }
    39  
    40  func resourceGithubTeamCreate(d *schema.ResourceData, meta interface{}) error {
    41  	client := meta.(*Organization).client
    42  	n := d.Get("name").(string)
    43  	desc := d.Get("description").(string)
    44  	p := d.Get("privacy").(string)
    45  	githubTeam, _, err := client.Organizations.CreateTeam(context.TODO(), meta.(*Organization).name, &github.Team{
    46  		Name:        &n,
    47  		Description: &desc,
    48  		Privacy:     &p,
    49  	})
    50  	if err != nil {
    51  		return err
    52  	}
    53  	d.SetId(fromGithubID(githubTeam.ID))
    54  	return resourceGithubTeamRead(d, meta)
    55  }
    56  
    57  func resourceGithubTeamRead(d *schema.ResourceData, meta interface{}) error {
    58  	client := meta.(*Organization).client
    59  
    60  	team, err := getGithubTeam(d, client)
    61  	if err != nil {
    62  		d.SetId("")
    63  		return nil
    64  	}
    65  	d.Set("description", team.Description)
    66  	d.Set("name", team.Name)
    67  	d.Set("privacy", team.Privacy)
    68  	return nil
    69  }
    70  
    71  func resourceGithubTeamUpdate(d *schema.ResourceData, meta interface{}) error {
    72  	client := meta.(*Organization).client
    73  	team, err := getGithubTeam(d, client)
    74  
    75  	if err != nil {
    76  		d.SetId("")
    77  		return nil
    78  	}
    79  
    80  	name := d.Get("name").(string)
    81  	description := d.Get("description").(string)
    82  	privacy := d.Get("privacy").(string)
    83  	team.Description = &description
    84  	team.Name = &name
    85  	team.Privacy = &privacy
    86  
    87  	team, _, err = client.Organizations.EditTeam(context.TODO(), *team.ID, team)
    88  	if err != nil {
    89  		return err
    90  	}
    91  	d.SetId(fromGithubID(team.ID))
    92  	return resourceGithubTeamRead(d, meta)
    93  }
    94  
    95  func resourceGithubTeamDelete(d *schema.ResourceData, meta interface{}) error {
    96  	client := meta.(*Organization).client
    97  	id := toGithubID(d.Id())
    98  	_, err := client.Organizations.DeleteTeam(context.TODO(), id)
    99  	return err
   100  }
   101  
   102  func getGithubTeam(d *schema.ResourceData, github *github.Client) (*github.Team, error) {
   103  	id := toGithubID(d.Id())
   104  	team, _, err := github.Organizations.GetTeam(context.TODO(), id)
   105  	return team, err
   106  }