Add resource gitea_team_members
This commit is contained in:
parent
8ee3cbc679
commit
58995ff1b8
|
@ -82,6 +82,7 @@ func Provider() *schema.Provider {
|
|||
"gitea_public_key": resourceGiteaPublicKey(),
|
||||
"gitea_team": resourceGiteaTeam(),
|
||||
"gitea_team_membership": resourceGiteaTeamMembership(),
|
||||
"gitea_team_members": resourceGiteaTeamMembers(),
|
||||
"gitea_git_hook": resourceGiteaGitHook(),
|
||||
"gitea_token": resourceGiteaToken(),
|
||||
"gitea_repository_key": resourceGiteaRepositoryKey(),
|
||||
|
|
|
@ -0,0 +1,165 @@
|
|||
package gitea
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"code.gitea.io/sdk/gitea"
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||
)
|
||||
|
||||
const (
|
||||
membersTeamID string = "team_id"
|
||||
membersTeamName string = "team_name"
|
||||
membersNames string = "members"
|
||||
)
|
||||
|
||||
func getTeamMembers(t *gitea.Team, meta interface{}) (u []*gitea.User, err error) {
|
||||
client := meta.(*gitea.Client)
|
||||
var users []*gitea.User
|
||||
|
||||
// FIXME: Support pagination
|
||||
opts := gitea.ListTeamMembersOptions{
|
||||
ListOptions: gitea.ListOptions{Page: -1, PageSize: 100},
|
||||
}
|
||||
|
||||
// Get all members of team.
|
||||
users, _, err = client.ListTeamMembers(t.ID, opts)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return users, nil
|
||||
}
|
||||
|
||||
func resourceTeamMembersCreate(d *schema.ResourceData, meta interface{}) (err error) {
|
||||
client := meta.(*gitea.Client)
|
||||
|
||||
// var resp *gitea.Response
|
||||
var team *gitea.Team
|
||||
var members []*gitea.User
|
||||
|
||||
// Get the team data
|
||||
team, _, err = client.GetTeam(int64(d.Get(membersTeamID).(int)))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
memberNames := d.Get(membersNames)
|
||||
|
||||
// What if team already has member?
|
||||
// What if user is already in the team?
|
||||
// What if user does not exist?
|
||||
|
||||
// Add members to the team
|
||||
for _, name := range memberNames.([]interface{}) {
|
||||
_ , err = client.AddTeamMember(team.ID, name.(string))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Read memberships back from Gitea
|
||||
members , err = getTeamMembers(team, meta)
|
||||
|
||||
err = setTeamMembersData(team, members, d)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func resourceTeamMembersRead(d *schema.ResourceData, meta interface{}) (err error) {
|
||||
client := meta.(*gitea.Client)
|
||||
|
||||
//var resp *gitea.Response
|
||||
var team *gitea.Team
|
||||
var members []*gitea.User
|
||||
|
||||
// Get the team data
|
||||
team, _, err = client.GetTeam(int64(d.Get(membershipTeamID).(int)))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Read memberships back from Gitea
|
||||
members , err = getTeamMembers(team, meta)
|
||||
|
||||
err = setTeamMembersData(team, members, d)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func resourceTeamMembersDelete(d *schema.ResourceData, meta interface{}) (err error) {
|
||||
client := meta.(*gitea.Client)
|
||||
|
||||
var team *gitea.Team
|
||||
var members []*gitea.User
|
||||
|
||||
// Make sure the team exists in Gitea
|
||||
team, _, err = client.GetTeam(int64(d.Get(membershipTeamID).(int)))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
members , err = getTeamMembers(team, meta)
|
||||
|
||||
// Delete all memberships
|
||||
for _, m := range members {
|
||||
_, err = client.RemoveTeamMember(team.ID, m.UserName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func setTeamMembersData(t *gitea.Team, users []*gitea.User, d *schema.ResourceData) (err error) {
|
||||
|
||||
var userNames []string
|
||||
|
||||
for _, u := range users {
|
||||
userNames = append(userNames, u.UserName)
|
||||
}
|
||||
|
||||
d.SetId(fmt.Sprintf("%d", t.ID))
|
||||
d.Set(membersTeamID, t.ID)
|
||||
d.Set(membersTeamName, t.Name)
|
||||
d.Set(membersNames, userNames)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func resourceGiteaTeamMembers() *schema.Resource {
|
||||
return &schema.Resource{
|
||||
Read: resourceTeamMembersRead,
|
||||
Create: resourceTeamMembersCreate,
|
||||
Delete: resourceTeamMembersDelete,
|
||||
Importer: &schema.ResourceImporter{
|
||||
StateContext: schema.ImportStatePassthroughContext,
|
||||
},
|
||||
Schema: map[string]*schema.Schema{
|
||||
"team_id": {
|
||||
Type: schema.TypeInt,
|
||||
Required: true,
|
||||
ForceNew: true,
|
||||
Description: "The ID of the team.",
|
||||
},
|
||||
"team_name": {
|
||||
Type: schema.TypeString,
|
||||
Required: false,
|
||||
Computed: true,
|
||||
Description: "The name of the team.",
|
||||
},
|
||||
"members": {
|
||||
Type: schema.TypeList,
|
||||
Elem: &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
},
|
||||
Required: true,
|
||||
ForceNew: true,
|
||||
Description: "The user names of the members of the team.",
|
||||
},
|
||||
|
||||
},
|
||||
Description: "`gitea_team_members` manages all members of a single team.",
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue