@@ -15,7 +15,11 @@ func dataSourceGitlabUser() *schema.Resource {
15
15
Schema : map [string ]* schema.Schema {
16
16
"email" : {
17
17
Type : schema .TypeString ,
18
- Required : true ,
18
+ Optional : true ,
19
+ },
20
+ "username" : {
21
+ Type : schema .TypeString ,
22
+ Optional : true ,
19
23
},
20
24
},
21
25
}
@@ -27,8 +31,15 @@ func dataSourceGitlabUserRead(d *schema.ResourceData, meta interface{}) error {
27
31
log .Printf ("[INFO] Reading Gitlab user" )
28
32
29
33
searchEmail := strings .ToLower (d .Get ("email" ).(string ))
34
+ userName := strings .ToLower (d .Get ("username" ).(string ))
35
+ var q * string
36
+ if searchEmail != "" {
37
+ q = & searchEmail
38
+ } else {
39
+ q = & userName
40
+ }
30
41
query := & gitlab.ListUsersOptions {
31
- Search : & searchEmail ,
42
+ Search : q ,
32
43
}
33
44
users , _ , err := client .Users .ListUsers (query )
34
45
if err != nil {
@@ -37,18 +48,28 @@ func dataSourceGitlabUserRead(d *schema.ResourceData, meta interface{}) error {
37
48
38
49
var found * gitlab.User
39
50
40
- for _ , user := range users {
41
- if strings .ToLower (user .Email ) == searchEmail {
42
- found = user
43
- break
51
+ if searchEmail != "" {
52
+ for _ , user := range users {
53
+ if strings .ToLower (user .Email ) == searchEmail {
54
+ found = user
55
+ break
56
+ }
57
+ }
58
+ } else {
59
+ for _ , user := range users {
60
+ if strings .ToLower (user .Username ) == userName {
61
+ found = user
62
+ break
63
+ }
44
64
}
45
65
}
66
+
46
67
if found == nil {
47
68
return fmt .Errorf ("The email '%s' does not match any user email" , searchEmail )
48
69
}
49
70
d .SetId (fmt .Sprintf ("%d" , found .ID ))
50
71
d .Set ("name" , found .Name )
51
- d .Set ("username " , found .Username )
72
+ d .Set ("userName " , found .Username )
52
73
d .Set ("email" , found .Email )
53
74
return nil
54
75
}
0 commit comments