awspec 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 327a5cd2ed17af3f58122c6d2d2edf1fab622bfa
4
- data.tar.gz: 66f4220079021aaf43365b7bb013e69b78df44d5
3
+ metadata.gz: 9ad0f1b784e4a2c835c7b1508a0bc47ad33d55ce
4
+ data.tar.gz: a5a394655631e518def240482d1d15cb8e1b26d5
5
5
  SHA512:
6
- metadata.gz: 37722811763e42a9728d7e1fc8d6f22c3e6403f910c16c84411114c73f191361f807adf2afaa6c43cc5aa5133606efd4e6ad8b3e807268364464ca2231f1dc98
7
- data.tar.gz: fc0d09164bdbf8825bac61b2cf514d19d21929bde7a61b79ba20212cbfd82d77fcf438350dd6322af19b98d76aa12233c27e0458f4fd1a9f808804db64046f40
6
+ metadata.gz: 65dc425d78cf4c8bb53ee28bcdf87b0c1d4de12f3b17880af3eb414e83eaf32ad2ee93533861b8d424910e6987345684f6cc4eecdb02553451991ded3da815e0
7
+ data.tar.gz: 49abee0c1e4cbb78f5afd949b39314aa9d6f8be45966d14f718dc0f4e6ed77a6a54a7663ec82de8e89d40970015fa62feb22293b2414def1c93f219564a9802f
data/README.md CHANGED
@@ -95,8 +95,8 @@ $ awspec generate ec2 vpc-ab123cde >> spec/ec2_spec.rb
95
95
  - IAM
96
96
  - [x] IAM User (`iam_user`)
97
97
  - [x] IAM Group (`iam_group`)
98
- - [ ] IAM Role
99
- - [ ] IAM Policy
98
+ - [x] IAM Role (`iam_role`)
99
+ - [x] IAM Policy (`iam_policy`)
100
100
 
101
101
  [Resource Types more infomation here](doc/resource_types.md)
102
102
 
@@ -15,6 +15,8 @@
15
15
  | [lambda](#lambda)
16
16
  | [iam_user](#iam_user)
17
17
  | [iam_group](#iam_group)
18
+ | [iam_role](#iam_role)
19
+ | [iam_policy](#iam_policy)
18
20
 
19
21
  ## <a name="ec2">ec2</a>
20
22
 
@@ -292,3 +294,27 @@ IamGroup resource type.
292
294
  ### have_iam_user
293
295
 
294
296
  #### its(:path), its(:group_name), its(:group_id), its(:arn), its(:create_date)
297
+ ## <a name="iam_role">iam_role</a>
298
+
299
+ IamRole resource type.
300
+
301
+ ### exist
302
+
303
+ ### have_iam_policy
304
+
305
+ #### its(:path), its(:role_name), its(:role_id), its(:arn), its(:create_date), its(:assume_role_policy_document)
306
+ ## <a name="iam_policy">iam_policy</a>
307
+
308
+ IamPolicy resource type.
309
+
310
+ ### exist
311
+
312
+ ### be_attachable
313
+
314
+ ### be_attached_to_group
315
+
316
+ ### be_attached_to_role
317
+
318
+ ### be_attached_to_user
319
+
320
+ #### its(:policy_name), its(:policy_id), its(:arn), its(:path), its(:default_version_id), its(:attachment_count), its(:is_attachable), its(:description), its(:create_date), its(:update_date)
data/lib/awspec.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'rspec'
3
3
  require 'rspec/its'
4
+ require 'time'
4
5
  require 'awspec/version'
5
6
  require 'awspec/cli'
6
7
  require 'awspec/stub'
data/lib/awspec/cli.rb CHANGED
@@ -9,7 +9,7 @@ module Awspec
9
9
  Awspec::Setup.run
10
10
  end
11
11
 
12
- desc 'generate [resource] [vpc_id]', 'Generate *_spec.rb from VPC ID'
12
+ desc 'generate [resource]', 'Generate AWS resource *_spec.rb'
13
13
  subcommand 'generate', Generate
14
14
  map 'g' => 'generate'
15
15
  end
@@ -22,6 +22,12 @@ module Awspec
22
22
  puts Awspec::Generator::Spec::Route53HostedZone.new.generate_by_domain_name(hosted_zone)
23
23
  end
24
24
 
25
+ desc 'iam_policy', 'Generate attached iam_policy spec'
26
+ def iam_policy
27
+ load_secrets
28
+ puts Awspec::Generator::Spec::IamPolicy.new.generate_all
29
+ end
30
+
25
31
  no_commands do
26
32
  def load_secrets
27
33
  creds = YAML.load_file('spec/secrets.yml') if File.exist?('spec/secrets.yml')
@@ -7,6 +7,7 @@ require 'awspec/generator/spec/vpc'
7
7
  require 'awspec/generator/spec/security_group'
8
8
  require 'awspec/generator/spec/route53_hosted_zone'
9
9
  require 'awspec/generator/spec/elb'
10
+ require 'awspec/generator/spec/iam_policy'
10
11
 
11
12
  # Doc
12
13
  require 'awspec/generator/doc/type'
@@ -0,0 +1,17 @@
1
+ module Awspec::Generator
2
+ module Doc
3
+ module Type
4
+ class IamPolicy < Base
5
+ def initialize
6
+ super
7
+ @type_name = 'IamPolicy'
8
+ @type = Awspec::Type::IamPolicy.new('my-iam-policy')
9
+ @ret = @type.resource
10
+ @matchers = []
11
+ @ignore_matchers = []
12
+ @describes = []
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Awspec::Generator
2
+ module Doc
3
+ module Type
4
+ class IamRole < Base
5
+ def initialize
6
+ super
7
+ @type_name = 'IamRole'
8
+ @type = Awspec::Type::IamRole.new('my-iam-role')
9
+ @ret = @type.resource
10
+ @matchers = []
11
+ @ignore_matchers = []
12
+ @describes = []
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,56 @@
1
+ module Awspec::Generator
2
+ module Spec
3
+ class IamPolicy
4
+ include Awspec::Helper::Finder
5
+ def generate_all
6
+ policies = select_all_attached_policies
7
+ policies.empty? && fail('Not Found policy')
8
+ ERB.new(policy_spec_template, nil, '-').result(binding).chomp
9
+ end
10
+
11
+ # rubocop:disable all
12
+ def policy_spec_template
13
+ template = <<-'EOF'
14
+ <% policies.each do |policy| %>
15
+ describe iam_policy('<%= policy.policy_name %>') do
16
+ it { should exist }
17
+ <%- if policy.is_attachable -%>
18
+ it { should be_attachable }
19
+ <%- else -%>
20
+ it { should_not be_attachable }
21
+ <%- end -%>
22
+ its(:arn) { should eq '<%= policy.arn %>' }
23
+ its(:update_date) { should eq Time.parse('<%= policy.update_date %>') }
24
+ its(:attachment_count) { should eq <%= policy.attachment_count %> }
25
+ <%- users = select_attached_users(policy.arn) -%>
26
+ <%- if users.empty? -%>
27
+ it { should_not be_attached_to_user }
28
+ <%- else -%>
29
+ <%- users.each do |user| -%>
30
+ it { should be_attached_to_user('<%= user.user_name %>') }
31
+ <%- end -%>
32
+ <%- end -%>
33
+ <%- groups = select_attached_groups(policy.arn) -%>
34
+ <%- if groups.empty? -%>
35
+ it { should_not be_attached_to_group }
36
+ <%- else -%>
37
+ <%- groups.each do |group| -%>
38
+ it { should be_attached_to_group('<%= group.group_name %>') }
39
+ <%- end -%>
40
+ <%- end -%>
41
+ <%- roles = select_attached_roles(policy.arn) -%>
42
+ <%- if roles.empty? -%>
43
+ it { should_not be_attached_to_role }
44
+ <%- else -%>
45
+ <%- roles.each do |role| -%>
46
+ it { should be_attached_to_role('<%= role.role_name %>') }
47
+ <%- end -%>
48
+ <%- end -%>
49
+ end
50
+ <% end %>
51
+ EOF
52
+ template
53
+ end
54
+ end
55
+ end
56
+ end
@@ -5,7 +5,7 @@ module Awspec::Helper
5
5
  res = @auto_scaling_client.describe_auto_scaling_groups({
6
6
  auto_scaling_group_names: [id]
7
7
  })
8
- res[:auto_scaling_groups][0] if res[:auto_scaling_groups].count == 1
8
+ res[:auto_scaling_groups].first if res[:auto_scaling_groups].count == 1
9
9
  end
10
10
  end
11
11
  end
@@ -5,11 +5,11 @@ module Awspec::Helper
5
5
  res = @ec2_client.describe_volumes({
6
6
  filters: [{ name: 'volume-id', values: [volume_id] }]
7
7
  })
8
- return res[:volumes][0] if res[:volumes].count == 1
8
+ return res[:volumes].first if res[:volumes].count == 1
9
9
  res = @ec2_client.describe_volumes({
10
10
  filters: [{ name: 'tag:Name', values: [volume_id] }]
11
11
  })
12
- return res[:volumes][0] if res[:volumes].count == 1
12
+ return res[:volumes].first if res[:volumes].count == 1
13
13
  end
14
14
 
15
15
  def select_ebs_by_instance_id(id)
@@ -32,45 +32,45 @@ module Awspec::Helper
32
32
  else
33
33
  return nil
34
34
  end
35
- return res[:reservations][0][:instances][0] if res[:reservations].count == 1 && \
36
- res[:reservations][0][:instances].count == 1
35
+ return res[:reservations].first[:instances].first if res[:reservations].count == 1 && \
36
+ res[:reservations].first[:instances].count == 1
37
37
  end
38
38
 
39
39
  def find_subnet(subnet_id)
40
40
  res = @ec2_client.describe_subnets({
41
41
  filters: [{ name: 'subnet-id', values: [subnet_id] }]
42
42
  })
43
- return res[:subnets][0] if res[:subnets].count == 1
43
+ return res[:subnets].first if res[:subnets].count == 1
44
44
  res = @ec2_client.describe_subnets({
45
45
  filters: [{ name: 'tag:Name', values: [subnet_id] }]
46
46
  })
47
- return res[:subnets][0] if res[:subnets].count == 1
47
+ return res[:subnets].first if res[:subnets].count == 1
48
48
  end
49
49
 
50
50
  def find_internet_gateway(gateway_id)
51
51
  res = @ec2_client.describe_internet_gateways({
52
52
  filters: [{ name: 'internet-gateway-id', values: [gateway_id] }]
53
53
  })
54
- return res[:internet_gateways][0] if res[:internet_gateways].count == 1
54
+ return res[:internet_gateways].first if res[:internet_gateways].count == 1
55
55
  res = @ec2_client.describe_internet_gateways({
56
56
  filters: [{ name: 'tag:Name', values: [gateway_id] }]
57
57
  })
58
- return res[:internet_gateways][0] if res[:internet_gateways].count == 1
58
+ return res[:internet_gateways].first if res[:internet_gateways].count == 1
59
59
  end
60
60
 
61
61
  def find_security_group(sg_id)
62
62
  res = @ec2_client.describe_security_groups({
63
63
  filters: [{ name: 'group-id', values: [sg_id] }]
64
64
  })
65
- return res[:security_groups][0] if res[:security_groups].count == 1
65
+ return res[:security_groups].first if res[:security_groups].count == 1
66
66
  res = @ec2_client.describe_security_groups({
67
67
  filters: [{ name: 'group-name', values: [sg_id] }]
68
68
  })
69
- return res[:security_groups][0] if res[:security_groups].count == 1
69
+ return res[:security_groups].first if res[:security_groups].count == 1
70
70
  res = @ec2_client.describe_security_groups({
71
71
  filters: [{ name: 'tag:Name', values: [sg_id] }]
72
72
  })
73
- return res[:security_groups][0] if res[:security_groups].count == 1
73
+ return res[:security_groups].first if res[:security_groups].count == 1
74
74
  end
75
75
 
76
76
  def select_ec2_by_vpc_id(vpc_id)
@@ -5,7 +5,7 @@ module Awspec::Helper
5
5
  res = @elb_client.describe_load_balancers({
6
6
  load_balancer_names: [id]
7
7
  })
8
- return res[:load_balancer_descriptions][0] if res[:load_balancer_descriptions].count == 1
8
+ return res[:load_balancer_descriptions].first if res[:load_balancer_descriptions].count == 1
9
9
  rescue
10
10
  return nil
11
11
  end
@@ -2,37 +2,59 @@ module Awspec::Helper
2
2
  module Finder
3
3
  module Iam
4
4
  def find_iam_user(id)
5
- users = []
6
- marker = nil
5
+ selected = []
6
+ res = @iam_client.list_users
7
+
7
8
  loop do
8
- res = @iam_client.list_users(
9
- marker: marker
10
- )
11
- marker = res.marker
12
- break if res.users.empty?
13
- res.users.each do |user|
14
- users.push(user) if user.user_name == id || user.user_id == id
9
+ selected += res.users.select do |u|
10
+ u.user_name == id || u.user_id == id || u.arn == id
15
11
  end
16
- break unless marker
12
+ (res.next_page? && res = res.next_page) || break
17
13
  end
18
- return users[0] if users.count == 1
14
+
15
+ selected.first if selected.count == 1
19
16
  end
20
17
 
21
18
  def find_iam_group(id)
22
- groups = []
23
- marker = nil
19
+ selected = []
20
+ res = @iam_client.list_groups
21
+
22
+ loop do
23
+ selected += res.groups.select do |g|
24
+ g.group_name == id || g.group_id == id || g.arn == id
25
+ end
26
+ (res.next_page? && res = res.next_page) || break
27
+ end
28
+
29
+ selected.first if selected.count == 1
30
+ end
31
+
32
+ def find_iam_role(id)
33
+ selected = []
34
+ res = @iam_client.list_roles
35
+
24
36
  loop do
25
- res = @iam_client.list_groups(
26
- marker: marker
27
- )
28
- marker = res.marker
29
- break if res.groups.empty?
30
- res.groups.each do |group|
31
- groups.push(group) if group.group_name == id || group.group_id == id
37
+ selected += res.roles.select do |r|
38
+ r.role_name == id || r.role_id == id || r.arn == id
32
39
  end
33
- break unless marker
40
+ (res.next_page? && res = res.next_page) || break
34
41
  end
35
- return groups[0] if groups.count == 1
42
+
43
+ selected.first if selected.count == 1
44
+ end
45
+
46
+ def find_iam_policy(id)
47
+ selected = []
48
+ res = @iam_client.list_policies
49
+
50
+ loop do
51
+ selected += res.policies.select do |p|
52
+ p.policy_name == id || p.policy_id == id || p.arn == id
53
+ end
54
+ (res.next_page? && res = res.next_page) || break
55
+ end
56
+
57
+ selected.first if selected.count == 1
36
58
  end
37
59
 
38
60
  def select_iam_group_by_user_name(user_name)
@@ -55,6 +77,45 @@ module Awspec::Helper
55
77
  })
56
78
  res.attached_policies
57
79
  end
80
+
81
+ def select_iam_policy_by_role_name(role_name)
82
+ res = @iam_client.list_attached_role_policies({
83
+ role_name: role_name
84
+ })
85
+ res.attached_policies
86
+ end
87
+
88
+ def select_all_attached_policies
89
+ selected = []
90
+ res = @iam_client.list_policies
91
+
92
+ loop do
93
+ selected += res.policies.select { |p| p.attachment_count > 0 }
94
+ (res.next_page? && res = res.next_page) || break
95
+ end
96
+
97
+ selected
98
+ end
99
+
100
+ def select_attached_entities(policy_id)
101
+ policy = find_iam_policy(policy_id)
102
+ @iam_client.list_entities_for_policy(policy_arn: policy[:arn])
103
+ end
104
+
105
+ def select_attached_users(policy_id)
106
+ entities = select_attached_entities(policy_id)
107
+ entities.policy_users
108
+ end
109
+
110
+ def select_attached_groups(policy_id)
111
+ entities = select_attached_entities(policy_id)
112
+ entities.policy_groups
113
+ end
114
+
115
+ def select_attached_roles(policy_id)
116
+ entities = select_attached_entities(policy_id)
117
+ entities.policy_roles
118
+ end
58
119
  end
59
120
  end
60
121
  end
@@ -2,22 +2,17 @@ module Awspec::Helper
2
2
  module Finder
3
3
  module Lambda
4
4
  def find_lambda(id)
5
- functions = []
6
- marker = nil
5
+ selected = []
6
+ res = @lambda_client.list_functions
7
+
7
8
  loop do
8
- res = @lambda_client.list_functions(
9
- marker: marker
10
- )
11
- marker = res.next_marker
12
- break if res.functions.empty?
13
- res.functions.each do |function|
14
- if function.function_name == id || function.function_arn == id
15
- functions.push(function)
16
- end
9
+ selected += res.functions.select do |function|
10
+ function.function_name == id || function.function_arn == id
17
11
  end
18
- break unless marker
12
+ (res.next_page? && res = res.next_page) || break
19
13
  end
20
- return functions[0] if functions.count == 1
14
+
15
+ selected.first if selected.count == 1
21
16
  end
22
17
 
23
18
  def select_event_source_by_function_arn(function_arn)
@@ -6,7 +6,7 @@ module Awspec::Helper
6
6
  res = @rds_client.describe_db_instances({
7
7
  db_instance_identifier: id
8
8
  })
9
- return res[:db_instances][0] if res[:db_instances].count == 1
9
+ return res[:db_instances].first if res[:db_instances].count == 1
10
10
  end
11
11
 
12
12
  def select_rds_by_vpc_id(vpc_id)
@@ -2,22 +2,14 @@ module Awspec::Helper
2
2
  module Finder
3
3
  module Route53
4
4
  def find_hosted_zone(id)
5
- hosted_zones = {}
6
- marker = nil
5
+ res = @route53_client.list_hosted_zones
7
6
  loop do
8
- res = @route53_client.list_hosted_zones({
9
- marker: marker
10
- })
11
- marker = res.marker
12
- break if res.hosted_zones.empty?
13
7
  res.hosted_zones.each do |hosted_zone|
14
- hosted_zones[hosted_zone[:name]] = hosted_zones
15
8
  if hosted_zone[:name] == id || hosted_zone[:id] == '/hostedzone/' + id || hosted_zone[:id] == id
16
9
  return hosted_zone
17
10
  end
18
11
  end
19
-
20
- break if marker.nil?
12
+ (res.next_page? && res = res.next_page) || break
21
13
  end
22
14
  end
23
15
  end
@@ -6,17 +6,17 @@ module Awspec::Helper
6
6
  filters: [{ name: 'group-id', values: [id] }]
7
7
  })
8
8
 
9
- return res[:security_groups][0] if res[:security_groups].count == 1
9
+ return res[:security_groups].first if res[:security_groups].count == 1
10
10
  res = @ec2_client.describe_security_groups({
11
11
  filters: [{ name: 'group-name', values: [id] }]
12
12
  })
13
13
 
14
- return res[:security_groups][0] if res[:security_groups].count == 1
14
+ return res[:security_groups].first if res[:security_groups].count == 1
15
15
  res = @ec2_client.describe_security_groups({
16
16
  filters: [{ name: 'tag:Name', values: [id] }]
17
17
  })
18
18
 
19
- return res[:security_groups][0] if res[:security_groups].count == 1
19
+ return res[:security_groups].first if res[:security_groups].count == 1
20
20
  end
21
21
 
22
22
  def select_security_group_by_vpc_id(vpc_id)
@@ -5,33 +5,33 @@ module Awspec::Helper
5
5
  res = @ec2_client.describe_vpcs({
6
6
  filters: [{ name: 'vpc-id', values: [id] }]
7
7
  })
8
- return res[:vpcs][0] if res[:vpcs].count == 1
8
+ return res[:vpcs].first if res[:vpcs].count == 1
9
9
  res = @ec2_client.describe_vpcs({
10
10
  filters: [{ name: 'tag:Name', values: [id] }]
11
11
  })
12
- return res[:vpcs][0] if res[:vpcs].count == 1
12
+ return res[:vpcs].first if res[:vpcs].count == 1
13
13
  end
14
14
 
15
15
  def find_route_table(route_table_id)
16
16
  res = @ec2_client.describe_route_tables({
17
17
  filters: [{ name: 'route-table-id', values: [route_table_id] }]
18
18
  })
19
- return res[:route_tables][0] if res[:route_tables].count == 1
19
+ return res[:route_tables].first if res[:route_tables].count == 1
20
20
  res = @ec2_client.describe_route_tables({
21
21
  filters: [{ name: 'tag:Name', values: [route_table_id] }]
22
22
  })
23
- return res[:route_tables][0] if res[:route_tables].count == 1
23
+ return res[:route_tables].first if res[:route_tables].count == 1
24
24
  end
25
25
 
26
26
  def find_network_acl(id)
27
27
  res = @ec2_client.describe_network_acls({
28
28
  filters: [{ name: 'network-acl-id', values: [id] }]
29
29
  })
30
- return res[:network_acls][0] if res[:network_acls].count == 1
30
+ return res[:network_acls].first if res[:network_acls].count == 1
31
31
  res = @ec2_client.describe_network_acls({
32
32
  filters: [{ name: 'tag:Name', values: [id] }]
33
33
  })
34
- return res[:network_acls][0] if res[:network_acls].count == 1
34
+ return res[:network_acls].first if res[:network_acls].count == 1
35
35
  end
36
36
 
37
37
  def select_route_table_by_vpc_id(vpc_id)
@@ -4,7 +4,8 @@ module Awspec
4
4
  TYPES = %w(
5
5
  base ec2 rds rds_db_parameter_group security_group
6
6
  vpc s3 route53_hosted_zone auto_scaling_group subnet
7
- route_table ebs elb lambda iam_user iam_group
7
+ route_table ebs elb lambda iam_user iam_group iam_role
8
+ iam_policy
8
9
  )
9
10
 
10
11
  TYPES.each do |type|
@@ -0,0 +1,43 @@
1
+ Aws.config[:iam] = {
2
+ stub_responses: {
3
+ list_policies: {
4
+ policies: [
5
+ {
6
+ attachment_count: 1,
7
+ arn: 'arn:aws:iam::aws:policy/my-iam-policy',
8
+ is_attachable: true,
9
+ policy_id: 'PABCDEFGHI123455689',
10
+ policy_name: 'my-iam-policy',
11
+ update_date: Time.new(2015, 1, 2, 10, 00, 00, '+00:00')
12
+ },
13
+ {
14
+ attachment_count: 1,
15
+ arn: 'arn:aws:iam::aws:policy/AmazonAPIGatewayAdministrator',
16
+ is_attachable: true,
17
+ policy_id: 'PABCDEFGHI123455688',
18
+ policy_name: 'AmazonAPIGatewayAdministrator',
19
+ update_date: Time.new(2015, 7, 9, 17, 34, 45, '+00:00')
20
+ },
21
+ {
22
+ attachment_count: 1,
23
+ arn: 'arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforDataPipelineRole',
24
+ is_attachable: true,
25
+ policy_id: 'PABCDEFGHI123455687',
26
+ policy_name: 'AmazonEC2RoleforDataPipelineRole',
27
+ update_date: Time.new(2015, 3, 19, 19, 21, 14, '+00:00')
28
+ }
29
+ ]
30
+ },
31
+ list_entities_for_policy: {
32
+ policy_roles: [
33
+ { role_name: 'HelloIAmGodRole' }
34
+ ],
35
+ policy_users: [
36
+ { user_name: 'my-iam-user' }
37
+ ],
38
+ policy_groups: [
39
+ { group_name: 'my-iam-group' }
40
+ ]
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,23 @@
1
+ Aws.config[:iam] = {
2
+ stub_responses: {
3
+ list_roles: {
4
+ roles: [
5
+ path: '/',
6
+ role_name: 'my-iam-role',
7
+ role_id: 'RABCDEFGHI123455689',
8
+ arn: 'arn:aws:iam::123456789012:role/my-iam-role',
9
+ create_date: Time.local(2015)
10
+ ]
11
+ },
12
+ list_attached_role_policies: {
13
+ attached_policies: [
14
+ {
15
+ policy_arn: 'arn:aws:iam::aws:policy/ReadOnlyAccess',
16
+ policy_name: 'ReadOnlyAccess'
17
+ }
18
+ ],
19
+ is_truncated: false,
20
+ maker: nil
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,52 @@
1
+ module Awspec::Type
2
+ class IamPolicy < Base
3
+ def initialize(id)
4
+ super
5
+ @resource = find_iam_policy(id)
6
+ @id = @resource[:policy_id] if @resource
7
+ end
8
+
9
+ def attachable?
10
+ policy.is_attachable
11
+ end
12
+
13
+ def attached_to_user?(user_id = nil)
14
+ users = select_attached_users(@id)
15
+ if user_id
16
+ user = find_iam_user(user_id)
17
+ return false unless user
18
+ users.any? do |u|
19
+ u.user_name == user[:user_name]
20
+ end
21
+ else
22
+ !users.empty?
23
+ end
24
+ end
25
+
26
+ def attached_to_group?(group_id = nil)
27
+ groups = select_attached_groups(@id)
28
+ if group_id
29
+ group = find_iam_group(group_id)
30
+ return false unless group
31
+ groups.any? do |g|
32
+ g.group_name == group[:group_name]
33
+ end
34
+ else
35
+ !groups.empty?
36
+ end
37
+ end
38
+
39
+ def attached_to_role?(role_id = nil)
40
+ roles = select_attached_roles(@id)
41
+ if role_id
42
+ role = find_iam_role(role_id)
43
+ return false unless role
44
+ roles.any? do |r|
45
+ r.role_name == role[:role_name]
46
+ end
47
+ else
48
+ !roles.empty?
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,16 @@
1
+ module Awspec::Type
2
+ class IamRole < Base
3
+ def initialize(id)
4
+ super
5
+ @resource = find_iam_role(id)
6
+ @id = @resource[:role_id] if @resource
7
+ end
8
+
9
+ def has_iam_policy?(policy_id)
10
+ policies = select_iam_policy_by_role_name(@resource[:role_name])
11
+ policies.find do |policy|
12
+ policy.policy_arn == policy_id || policy.policy_name == policy_id
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,3 +1,3 @@
1
1
  module Awspec
2
- VERSION = '0.9.0'
2
+ VERSION = '0.10.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - k1LoW
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-07 00:00:00.000000000 Z
11
+ date: 2015-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -162,6 +162,8 @@ files:
162
162
  - lib/awspec/generator/doc/type/ec2.rb
163
163
  - lib/awspec/generator/doc/type/elb.rb
164
164
  - lib/awspec/generator/doc/type/iam_group.rb
165
+ - lib/awspec/generator/doc/type/iam_policy.rb
166
+ - lib/awspec/generator/doc/type/iam_role.rb
165
167
  - lib/awspec/generator/doc/type/iam_user.rb
166
168
  - lib/awspec/generator/doc/type/lambda.rb
167
169
  - lib/awspec/generator/doc/type/rds.rb
@@ -174,6 +176,7 @@ files:
174
176
  - lib/awspec/generator/doc/type/vpc.rb
175
177
  - lib/awspec/generator/spec/ec2.rb
176
178
  - lib/awspec/generator/spec/elb.rb
179
+ - lib/awspec/generator/spec/iam_policy.rb
177
180
  - lib/awspec/generator/spec/rds.rb
178
181
  - lib/awspec/generator/spec/route53_hosted_zone.rb
179
182
  - lib/awspec/generator/spec/security_group.rb
@@ -208,6 +211,8 @@ files:
208
211
  - lib/awspec/stub/ec2.rb
209
212
  - lib/awspec/stub/elb.rb
210
213
  - lib/awspec/stub/iam_group.rb
214
+ - lib/awspec/stub/iam_policy.rb
215
+ - lib/awspec/stub/iam_role.rb
211
216
  - lib/awspec/stub/iam_user.rb
212
217
  - lib/awspec/stub/lambda.rb
213
218
  - lib/awspec/stub/rds.rb
@@ -225,6 +230,8 @@ files:
225
230
  - lib/awspec/type/ec2.rb
226
231
  - lib/awspec/type/elb.rb
227
232
  - lib/awspec/type/iam_group.rb
233
+ - lib/awspec/type/iam_policy.rb
234
+ - lib/awspec/type/iam_role.rb
228
235
  - lib/awspec/type/iam_user.rb
229
236
  - lib/awspec/type/lambda.rb
230
237
  - lib/awspec/type/rds.rb