Skip to content
This repository was archived by the owner on Jun 5, 2020. It is now read-only.

Commit 9927a3b

Browse files
author
Petr Tichý
committed
Defer fetching of resource data for IAM
1 parent 2d34b16 commit 9927a3b

File tree

4 files changed

+104
-96
lines changed

4 files changed

+104
-96
lines changed

fixtures/vcr_cassettes/iam_group-setup.yml

Lines changed: 66 additions & 66 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/puppet/provider/iam_group/v2.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,10 @@ def self.get_groups
2626
def self.instances
2727
groups = get_groups()
2828
groups.collect do |group|
29-
group_data = iam_client.get_group({ group_name: group.group_name })
30-
member_names = group_data.users.map {|user| user.user_name }
31-
3229
new({
3330
name: group.group_name,
3431
ensure: :present,
3532
path: group.path,
36-
members: member_names,
3733
})
3834
end
3935
end
@@ -101,6 +97,11 @@ def destroy
10197
@property_hash[:ensure] = :absent
10298
end
10399

100+
def members
101+
group_data = iam_client.get_group({ group_name: name })
102+
group_data.users.map {|user| user.user_name }
103+
end
104+
104105
def members=(value)
105106
unless @property_hash[:ensure] == :absent
106107
# First all add missing members to the group

lib/puppet/provider/iam_policy/v2.rb

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,12 @@
1010
def self.instances
1111
policies = PuppetX::Puppetlabs::Iam_policy.get_policies
1212
policies.collect do |policy|
13-
14-
policy_document_versions = iam_client.list_policy_versions({
15-
policy_arn: policy.arn,
16-
max_items: 1
17-
})
18-
19-
policy_version_data = iam_client.get_policy_version({
20-
policy_arn: policy.arn,
21-
version_id: policy_document_versions.versions[0].version_id
22-
})
23-
24-
policy_data = JSON.parse(URI.unescape(policy_version_data.policy_version.document))
25-
policy_document = JSON.pretty_generate(policy_data)
26-
2713
new({
2814
name: policy.policy_name,
2915
ensure: :present,
3016
path: policy.path,
3117
description: policy.description,
3218
arn: policy.arn,
33-
document: policy_document,
3419
})
3520
end
3621
end
@@ -86,6 +71,21 @@ def destroy
8671
@property_hash[:ensure] = :absent
8772
end
8873

74+
def document
75+
policy_document_versions = iam_client.list_policy_versions({
76+
policy_arn: arn,
77+
max_items: 1
78+
})
79+
80+
policy_version_data = iam_client.get_policy_version({
81+
policy_arn: arn,
82+
version_id: policy_document_versions.versions[0].version_id
83+
})
84+
85+
policy_data = JSON.parse(URI.unescape(policy_version_data.policy_version.document))
86+
JSON.pretty_generate(policy_data)
87+
end
88+
8989
def document=(value)
9090
# IAM allows up to 5 managed policies at the time of this writing. As
9191
# such, if we are going to modify a policy, that is, to create a new one,

lib/puppet/provider/iam_policy_attachment/v2.rb

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,8 @@ def self.instances
3939
end
4040
end
4141

42-
response = iam_client.list_entities_for_policy({
43-
policy_arn: policy.arn,
44-
})
45-
46-
user_names = response.policy_users.collect {|user| user.user_name }
47-
group_names = response.policy_groups.collect {|group| group.group_name }
48-
role_names = response.policy_roles.collect {|role| role.role_name }
49-
5042
new({
5143
name: policy.policy_name,
52-
users: user_names,
53-
groups: group_names,
54-
roles: role_names,
5544
arn: policy.arn,
5645
})
5746
end
@@ -67,6 +56,18 @@ def self.prefetch(resources)
6756
end
6857
end
6958

59+
def users
60+
list_entities_for_policy.policy_users.collect {|user| user.user_name }
61+
end
62+
63+
def groups
64+
list_entities_for_policy.policy_groups.collect {|group| group.group_name }
65+
end
66+
67+
def roles
68+
list_entities_for_policy.policy_roles.collect {|role| role.role_name }
69+
end
70+
7071
def users=(value)
7172
Array(value).flatten.each {|user|
7273
unless @property_hash[:users].include? user
@@ -133,4 +134,10 @@ def roles=(value)
133134
}
134135
end
135136

137+
private
138+
139+
def list_entities_for_policy
140+
@list_entities_for_policy ||= iam_client.list_entities_for_policy({ policy_arn: arn, })
141+
end
142+
136143
end

0 commit comments

Comments
 (0)