From fc0d197be87764d613651b931ae98d315f616521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Pinson?= Date: Wed, 17 May 2017 11:38:23 +0200 Subject: [PATCH 1/3] Add github_user data source --- .../github/data_source_github_user.go | 118 ++++++++++++++++++ builtin/providers/github/provider.go | 4 + .../providers/github/d/user.html.markdown | 43 +++++++ website/source/layouts/github.erb | 10 ++ 4 files changed, 175 insertions(+) create mode 100644 builtin/providers/github/data_source_github_user.go create mode 100644 website/source/docs/providers/github/d/user.html.markdown diff --git a/builtin/providers/github/data_source_github_user.go b/builtin/providers/github/data_source_github_user.go new file mode 100644 index 000000000..f9dbbe5fc --- /dev/null +++ b/builtin/providers/github/data_source_github_user.go @@ -0,0 +1,118 @@ +package github + +import ( + "context" + "log" + "strconv" + + "github.com/hashicorp/terraform/helper/schema" +) + +func dataSourceGithubUser() *schema.Resource { + return &schema.Resource{ + Read: dataSourceGithubUserRead, + + Schema: map[string]*schema.Schema{ + "username": &schema.Schema{ + Type: schema.TypeString, + Required: true, + }, + "login": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + "avatar_url": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + "gravatar_id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + "site_admin": &schema.Schema{ + Type: schema.TypeBool, + Computed: true, + }, + "name": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + "company": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + "blog": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + "location": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + "email": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + "bio": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + "public_repos": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + }, + "public_gists": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + }, + "followers": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + }, + "following": &schema.Schema{ + Type: schema.TypeInt, + Computed: true, + }, + "created_at": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + "updated_at": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + }, + } +} + +func dataSourceGithubUserRead(d *schema.ResourceData, meta interface{}) error { + log.Printf("[INFO] Refreshing Gitub User: %s", d.Id()) + + username := d.Get("username").(string) + client := meta.(*Organization).client + + user, _, err := client.Users.Get(context.TODO(), username) + if err != nil { + return err + } + + d.SetId(strconv.Itoa(*user.ID)) + d.Set("login", *user.Login) + d.Set("avatar_url", *user.AvatarURL) + d.Set("gravatar_id", *user.GravatarID) + d.Set("site_admin", *user.SiteAdmin) + d.Set("company", *user.Company) + d.Set("blog", *user.Blog) + d.Set("location", *user.Location) + d.Set("name", *user.Name) + d.Set("email", *user.Email) + d.Set("bio", *user.Bio) + d.Set("public_repos", *user.PublicRepos) + d.Set("public_gists", *user.PublicGists) + d.Set("followers", *user.Followers) + d.Set("following", *user.Following) + d.Set("created_at", *user.CreatedAt) + d.Set("updated_at", *user.UpdatedAt) + + return nil +} diff --git a/builtin/providers/github/provider.go b/builtin/providers/github/provider.go index 4b5e11107..27a779d30 100644 --- a/builtin/providers/github/provider.go +++ b/builtin/providers/github/provider.go @@ -44,6 +44,10 @@ func Provider() terraform.ResourceProvider { "github_branch_protection": resourceGithubBranchProtection(), }, + DataSourcesMap: map[string]*schema.Resource{ + "github_user": dataSourceGithubUser(), + }, + ConfigureFunc: providerConfigure, } } diff --git a/website/source/docs/providers/github/d/user.html.markdown b/website/source/docs/providers/github/d/user.html.markdown new file mode 100644 index 000000000..48cff5866 --- /dev/null +++ b/website/source/docs/providers/github/d/user.html.markdown @@ -0,0 +1,43 @@ +--- +layout: "github" +page_title: "Github: github_user" +sidebar_current: "docs-github-datasource-user" +description: |- + Get information on a Github user. +--- + +# github\_user + +Use this data source to retrieve information about a Github user. + +## Example Usage + +``` +data "github_user" "example" { + username = "example" +} +``` + +## Argument Reference + + * `username` - (Required) The username. + +## Attributes Reference + + * `login` - the user's login. + * `avatar_url` - the user's avatar URL. + * `gravatar_id` - the user's gravatar ID. + * `site_admin` - whether the user is a Github admin. + * `name` - the user's full name. + * `company` - the user's company name. + * `blog` - the user's blog location. + * `location` - the user's location. + * `email` - the user's email. + * `bio` - the user's bio. + * `public_repos` - the number of public repositories. + * `public_gists` - the number of public gists. + * `followers` - the number of followers. + * `following` - the number of following users. + * `created_at` - the creation date. + * `updated_at` - the update date. + diff --git a/website/source/layouts/github.erb b/website/source/layouts/github.erb index 37a834d08..6a3e65ff0 100644 --- a/website/source/layouts/github.erb +++ b/website/source/layouts/github.erb @@ -10,6 +10,16 @@ GitHub Provider + > + Data Sources + + + > Resources