/
data_source_ibm_iam_users.go
139 lines (113 loc) · 3.28 KB
/
data_source_ibm_iam_users.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// Copyright IBM Corp. 2017, 2021 All Rights Reserved.
// Licensed under the Mozilla Public License v2.0
package iamidentity
import (
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func DataSourceIBMIAMUsers() *schema.Resource {
return &schema.Resource{
Read: dataSourceIBMIAMUsersRead,
Schema: map[string]*schema.Schema{
"users": {
Type: schema.TypeList,
Computed: true,
Description: "User's Profiles",
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"iam_id": {
Type: schema.TypeString,
Computed: true,
Description: "User's IAM ID or or email of user",
},
"user_id": {
Type: schema.TypeString,
Computed: true,
Description: "The user ID used for login. ",
},
"realm": {
Type: schema.TypeString,
Computed: true,
Description: "The realm of the user. ",
},
"first_name": {
Type: schema.TypeString,
Computed: true,
Description: "The first name of the user. ",
},
"last_name": {
Type: schema.TypeString,
Computed: true,
Description: "The last name of the user. ",
},
"state": {
Type: schema.TypeString,
Computed: true,
Description: "The state of the user. Possible values are PROCESSING, PENDING, ACTIVE, DISABLED_CLASSIC_INFRASTRUCTURE, and VPN_ONLY. ",
},
"email": {
Type: schema.TypeString,
Computed: true,
Description: "The email of the user. ",
},
"phonenumber": {
Type: schema.TypeString,
Computed: true,
Description: "The phone for the user.",
},
"alt_phonenumber": {
Type: schema.TypeString,
Computed: true,
Description: "The alternative phone number of the user. ",
},
"account_id": {
Type: schema.TypeString,
Computed: true,
Description: "An alphanumeric value identifying the account ID. ",
},
},
},
},
},
}
}
func dataSourceIBMIAMUsersRead(d *schema.ResourceData, meta interface{}) error {
userManagement, err := meta.(conns.ClientSession).UserManagementAPI()
if err != nil {
return err
}
client := userManagement.UserInvite()
userDetails, err := meta.(conns.ClientSession).BluemixUserDetails()
if err != nil {
return err
}
accountID := userDetails.UserAccount
if err != nil {
return err
}
res, err := client.ListUsers(accountID)
if err != nil {
return err
}
profileList := make([]interface{}, 0)
for _, userInfo := range res {
if userInfo.State == "ACTIVE" {
user := map[string]interface{}{
"iam_id": userInfo.IamID,
"user_id": userInfo.UserID,
"realm": userInfo.Realm,
"first_name": userInfo.Firstname,
"last_name": userInfo.Lastname,
"state": userInfo.State,
"email": userInfo.Email,
"phonenumber": userInfo.Phonenumber,
"alt_phonenumber": userInfo.Altphonenumber,
"account_id": userInfo.AccountID,
}
profileList = append(profileList, user)
}
}
d.SetId(accountID)
d.Set("users", profileList)
return nil
}