@@ -2,6 +2,7 @@ package gitlab
2
2
3
3
import (
4
4
"github.com/hashicorp/terraform/helper/schema"
5
+ "github.com/hashicorp/terraform/helper/validation"
5
6
gitlab "github.com/xanzy/go-gitlab"
6
7
)
7
8
@@ -10,16 +11,28 @@ func dataSourceGitlabUsers() *schema.Resource {
10
11
Read : dataSourceGitlabUsersRead ,
11
12
12
13
Schema : map [string ]* schema.Schema {
13
- "name " : {
14
+ "order_by " : {
14
15
Type : schema .TypeString ,
15
16
Optional : true ,
16
- Default : "all_users" ,
17
+ Default : "id" ,
18
+ ValidateFunc : validation .StringInSlice ([]string {"id" , "name" ,
19
+ "username" , "created_at" }, true ),
20
+ },
21
+ "sort" : {
22
+ Type : schema .TypeString ,
23
+ Optional : true ,
24
+ Default : "desc" ,
25
+ ValidateFunc : validation .StringInSlice ([]string {"desc" , "asc" }, true ),
17
26
},
18
27
"users" : {
19
28
Type : schema .TypeList ,
20
29
Computed : true ,
21
30
Elem : & schema.Resource {
22
31
Schema : map [string ]* schema.Schema {
32
+ "id" : {
33
+ Type : schema .TypeInt ,
34
+ Computed : true ,
35
+ },
23
36
"username" : {
24
37
Type : schema .TypeString ,
25
38
Computed : true ,
@@ -56,6 +69,10 @@ func dataSourceGitlabUsers() *schema.Resource {
56
69
Type : schema .TypeString ,
57
70
Computed : true ,
58
71
},
72
+ "external" : {
73
+ Type : schema .TypeBool ,
74
+ Computed : true ,
75
+ },
59
76
},
60
77
},
61
78
},
@@ -66,13 +83,21 @@ func dataSourceGitlabUsers() *schema.Resource {
66
83
func dataSourceGitlabUsersRead (d * schema.ResourceData , meta interface {}) error {
67
84
client := meta .(* gitlab.Client )
68
85
69
- users , _ , err := client .Users .ListUsers (nil )
86
+ orderBy := d .Get ("order_by" ).(string )
87
+ sort := d .Get ("sort" ).(string )
88
+ listUsersOptions := & gitlab.ListUsersOptions {
89
+ OrderBy : & orderBy ,
90
+ Sort : & sort ,
91
+ }
92
+
93
+ users , _ , err := client .Users .ListUsers (listUsersOptions )
70
94
if err != nil {
71
95
return err
72
96
}
73
97
74
98
d .Set ("users" , flattenGitlabUsers (users ))
75
- d .SetId (d .Get ("name" ).(string ))
99
+ id := "all_users_" + orderBy + "_" + sort
100
+ d .SetId (id )
76
101
77
102
return nil
78
103
}
@@ -82,6 +107,7 @@ func flattenGitlabUsers(users []*gitlab.User) []interface{} {
82
107
83
108
for _ , user := range users {
84
109
values := map [string ]interface {}{
110
+ "id" : user .ID ,
85
111
"username" : user .Username ,
86
112
"email" : user .Email ,
87
113
"name" : user .Name ,
@@ -90,6 +116,7 @@ func flattenGitlabUsers(users []*gitlab.User) []interface{} {
90
116
"can_create_project" : user .CanCreateProject ,
91
117
"projects_limit" : user .ProjectsLimit ,
92
118
"state" : user .State ,
119
+ "external" : user .External ,
93
120
}
94
121
95
122
if user .CreatedAt != nil {
0 commit comments