Skip to content

Commit dece8a0

Browse files
Fix/ram user login profile and update aliyun ram sdk ver. to v2 (#97)
* add IMS client to RamUser collection for IMS.GetLoginProfile * Update collector/alicloud/collector/ram/ram_user.go avoid potential nil pointer Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * update aliyun ram sdk version to v2 * update go.mod go.sum * update service.go --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
1 parent ee72748 commit dece8a0

File tree

8 files changed

+199
-119
lines changed

8 files changed

+199
-119
lines changed

collector/alicloud/collector/ram/group.go

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ package ram
1717

1818
import (
1919
"context"
20-
"github.com/aliyun/alibaba-cloud-sdk-go/services/ram"
20+
ram20150501 "github.com/alibabacloud-go/ram-20150501/v2/client"
21+
"github.com/alibabacloud-go/tea/tea"
2122
"github.com/cloudrec/alicloud/collector"
2223
"github.com/core-sdk/constant"
2324
"github.com/core-sdk/log"
@@ -41,45 +42,69 @@ func GetGroupResource() schema.Resource {
4142
}
4243

4344
type GroupDetail struct {
44-
Group ram.Group
45+
Group *ram20150501.ListGroupsResponseBodyGroupsGroup
4546
Policies []PolicyDetail
4647
}
4748

4849
func GetGroupDetail(ctx context.Context, service schema.ServiceInterface, res chan<- any) error {
4950
cli := service.(*collector.Services).RAM
5051

51-
request := ram.CreateListGroupsRequest()
52-
request.Scheme = "https"
52+
request := &ram20150501.ListGroupsRequest{}
5353
for {
54-
response, err := cli.ListGroups(request)
54+
response, err := cli.ListGroupsWithOptions(request, collector.RuntimeObject)
5555
if err != nil {
5656
log.CtxLogger(ctx).Warn("ListGroups error", zap.Error(err))
5757
return err
5858
}
59-
for _, i := range response.Groups.Group {
60-
d := GroupDetail{
61-
Group: i,
62-
Policies: listPoliciesForGroup(ctx, cli, i.GroupName),
59+
if response.Body.Groups != nil && response.Body.Groups.Group != nil {
60+
for _, i := range response.Body.Groups.Group {
61+
d := GroupDetail{
62+
Group: i,
63+
Policies: listPoliciesForGroup(ctx, cli, tea.StringValue(i.GroupName)),
64+
}
65+
res <- d
6366
}
64-
res <- d
6567
}
66-
if !response.IsTruncated {
68+
if response.Body.IsTruncated == nil || !tea.BoolValue(response.Body.IsTruncated) {
6769
break
6870
}
69-
request.Marker = response.Marker
71+
request.Marker = response.Body.Marker
7072
}
7173
return nil
7274
}
7375

74-
func listPoliciesForGroup(ctx context.Context, cli *ram.Client, name string) (policies []PolicyDetail) {
75-
request := ram.CreateListPoliciesForGroupRequest()
76-
request.Scheme = "https"
77-
request.GroupName = name
78-
response, err := cli.ListPoliciesForGroup(request)
76+
func listPoliciesForGroup(ctx context.Context, cli *ram20150501.Client, name string) (policies []PolicyDetail) {
77+
request := &ram20150501.ListPoliciesForGroupRequest{
78+
GroupName: tea.String(name),
79+
}
80+
response, err := cli.ListPoliciesForGroupWithOptions(request, collector.RuntimeObject)
7981
if err != nil {
8082
log.CtxLogger(ctx).Warn("ListPoliciesForGroup error", zap.Error(err))
8183
return
8284
}
8385

84-
return getPolicyDetails(ctx, cli, response.Policies.Policy, "Group:"+name)
86+
return getPolicyDetailsForGroup(ctx, cli, response.Body.Policies.Policy, "Group:"+name)
87+
}
88+
89+
func getPolicyDetailsForGroup(ctx context.Context, cli *ram20150501.Client, policy []*ram20150501.ListPoliciesForGroupResponseBodyPoliciesPolicy, source string) (policies []PolicyDetail) {
90+
for i := 0; i < len(policy); i++ {
91+
if policy[i].PolicyName != nil && policy[i].PolicyType != nil {
92+
r := &ram20150501.GetPolicyRequest{
93+
PolicyName: policy[i].PolicyName,
94+
PolicyType: policy[i].PolicyType,
95+
}
96+
resp, err := cli.GetPolicyWithOptions(r, collector.RuntimeObject)
97+
if err != nil {
98+
log.CtxLogger(ctx).Warn("GetPolicy error", zap.Error(err))
99+
continue
100+
}
101+
p := PolicyDetail{
102+
Policy: resp.Body.Policy,
103+
DefaultPolicyVersion: resp.Body.DefaultPolicyVersion,
104+
Source: source,
105+
}
106+
policies = append(policies, p)
107+
}
108+
}
109+
return policies
85110
}

collector/alicloud/collector/ram/ram_role.go

Lines changed: 52 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ package ram
1717

1818
import (
1919
"context"
20-
"github.com/aliyun/alibaba-cloud-sdk-go/services/ram"
20+
21+
ram20150501 "github.com/alibabacloud-go/ram-20150501/v2/client"
22+
"github.com/alibabacloud-go/tea/tea"
2123
"github.com/cloudrec/alicloud/collector"
2224
"github.com/core-sdk/constant"
2325
"github.com/core-sdk/log"
@@ -41,82 +43,91 @@ func GetRAMRoleResource() schema.Resource {
4143
}
4244

4345
type RoleDetail struct {
44-
Role ram.Role
46+
Role *ram20150501.GetRoleResponseBodyRole
4547
Policies []PolicyDetail
4648
}
4749

4850
func GetRoleDetail(ctx context.Context, service schema.ServiceInterface, res chan<- any) error {
4951
cli := service.(*collector.Services).RAM
5052

51-
request := ram.CreateListRolesRequest()
52-
request.Scheme = "https"
53+
request := &ram20150501.ListRolesRequest{}
5354

5455
for {
55-
response, err := cli.ListRoles(request)
56+
response, err := cli.ListRolesWithOptions(request, collector.RuntimeObject)
5657
if err != nil {
5758
log.CtxLogger(ctx).Warn("ListRoles error", zap.Error(err))
5859
return err
5960
}
60-
for _, role := range response.Roles.Role {
61-
d := RoleDetail{
62-
Role: getRole(ctx, cli, role.RoleName),
63-
Policies: listPoliciesForRole(ctx, cli, role.RoleName),
61+
if response.Body.Roles != nil && response.Body.Roles.Role != nil {
62+
for _, role := range response.Body.Roles.Role {
63+
if role.RoleName != nil {
64+
d := RoleDetail{
65+
Role: getRole(ctx, cli, *role.RoleName),
66+
Policies: listPoliciesForRole(ctx, cli, *role.RoleName),
67+
}
68+
res <- d
69+
}
6470
}
65-
66-
res <- d
6771
}
68-
if !response.IsTruncated {
72+
if response.Body.IsTruncated == nil || !*response.Body.IsTruncated {
6973
break
7074
}
71-
request.Marker = response.Marker
75+
if response.Body.Marker != nil {
76+
request.Marker = response.Body.Marker
77+
}
7278
}
7379

7480
return nil
7581
}
7682

77-
func getRole(ctx context.Context, cli *ram.Client, name string) ram.Role {
78-
request := ram.CreateGetRoleRequest()
79-
request.RoleName = name
80-
request.Scheme = "https"
81-
getRoleResponse, err := cli.GetRole(request)
83+
func getRole(ctx context.Context, cli *ram20150501.Client, name string) *ram20150501.GetRoleResponseBodyRole {
84+
request := &ram20150501.GetRoleRequest{
85+
RoleName: tea.String(name),
86+
}
87+
getRoleResponse, err := cli.GetRoleWithOptions(request, collector.RuntimeObject)
8288
if err != nil {
8389
log.CtxLogger(ctx).Warn("GetRole error", zap.Error(err))
84-
return ram.Role{}
90+
return nil
8591
}
86-
return getRoleResponse.Role
92+
return getRoleResponse.Body.Role
8793
}
8894

89-
func listPoliciesForRole(ctx context.Context, cli *ram.Client, name string) (policies []PolicyDetail) {
90-
request := ram.CreateListPoliciesForRoleRequest()
91-
request.Scheme = "https"
92-
request.RoleName = name
93-
response, err := cli.ListPoliciesForRole(request)
95+
func listPoliciesForRole(ctx context.Context, cli *ram20150501.Client, name string) (policies []PolicyDetail) {
96+
request := &ram20150501.ListPoliciesForRoleRequest{
97+
RoleName: tea.String(name),
98+
}
99+
response, err := cli.ListPoliciesForRoleWithOptions(request, collector.RuntimeObject)
94100
if err != nil {
95101
log.CtxLogger(ctx).Warn("ListPoliciesForRole error", zap.Error(err))
96102
return nil
97103
}
98104

99-
return getPolicyDetails(ctx, cli, response.Policies.Policy, "Role:"+name)
105+
if response.Body.Policies != nil && response.Body.Policies.Policy != nil {
106+
return getPolicyDetails(ctx, cli, response.Body.Policies.Policy, "Role:"+name)
107+
}
108+
return nil
100109
}
101110

102-
func getPolicyDetails(ctx context.Context, cli *ram.Client, policy []ram.Policy, source string) (policies []PolicyDetail) {
111+
func getPolicyDetails(ctx context.Context, cli *ram20150501.Client, policy []*ram20150501.ListPoliciesForRoleResponseBodyPoliciesPolicy, source string) (policies []PolicyDetail) {
103112

104113
for i := 0; i < len(policy); i++ {
105-
r := ram.CreateGetPolicyRequest()
106-
r.Scheme = "https"
107-
r.PolicyName = policy[i].PolicyName
108-
r.PolicyType = policy[i].PolicyType
109-
resp, err := cli.GetPolicy(r)
110-
if err != nil {
111-
log.CtxLogger(ctx).Warn("GetPolicy error", zap.Error(err))
112-
continue
113-
}
114-
p := PolicyDetail{
115-
Policy: resp.Policy,
116-
DefaultPolicyVersion: resp.DefaultPolicyVersion,
117-
Source: source,
114+
if policy[i].PolicyName != nil && policy[i].PolicyType != nil {
115+
r := &ram20150501.GetPolicyRequest{
116+
PolicyName: policy[i].PolicyName,
117+
PolicyType: policy[i].PolicyType,
118+
}
119+
resp, err := cli.GetPolicyWithOptions(r, collector.RuntimeObject)
120+
if err != nil {
121+
log.CtxLogger(ctx).Warn("GetPolicy error", zap.Error(err))
122+
continue
123+
}
124+
p := PolicyDetail{
125+
Policy: resp.Body.Policy,
126+
DefaultPolicyVersion: resp.Body.DefaultPolicyVersion,
127+
Source: source,
128+
}
129+
policies = append(policies, p)
118130
}
119-
policies = append(policies, p)
120131
}
121132

122133
return policies

0 commit comments

Comments
 (0)