furikake 0.0.1

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.
@@ -0,0 +1,54 @@
1
+ module Furikake
2
+ module Resources
3
+ module Kinesis
4
+ def report
5
+ resources = get_resources
6
+ headers = ['Stream Name', 'Stream ARN', 'Stream Status', 'Shards']
7
+ if resources.empty?
8
+ info = 'N/A'
9
+ else
10
+ info = MarkdownTables.make_table(headers, resources, is_rows: true, align: 'l')
11
+ end
12
+ documents = <<"EOS"
13
+ ### Kinesis
14
+
15
+ #{info}
16
+ EOS
17
+
18
+ documents
19
+ end
20
+
21
+ def get_resources
22
+ kinesis = Aws::Kinesis::Client.new
23
+
24
+ all_streams = []
25
+ loop do
26
+ res = kinesis.list_streams
27
+ all_streams.push(*res.stream_names)
28
+ break unless res.has_more_streams
29
+ end
30
+
31
+ kinesis_infos = []
32
+ all_streams.each do |stream|
33
+ keys = [:stream_name, :stream_arn, :stream_status]
34
+ res = kinesis.describe_stream({
35
+ stream_name: stream
36
+ })
37
+ resouces = []
38
+ res.stream_description.to_h.each do |k, v|
39
+ if keys.include?(k)
40
+ resouces << v
41
+ end
42
+ if k == :shards
43
+ resouces << v.size
44
+ end
45
+ end
46
+ kinesis_infos << resouces
47
+ end
48
+ kinesis_infos
49
+ end
50
+
51
+ module_function :report, :get_resources
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,49 @@
1
+ module Furikake
2
+ module Resources
3
+ module Lambda
4
+ def report
5
+ resources = get_resources
6
+ headers = ['Function Name', 'Function ARN', 'Runtime', 'Timeout', 'Memory Size']
7
+ if resources.empty?
8
+ info = 'N/A'
9
+ else
10
+ info = MarkdownTables.make_table(headers, resources, is_rows: true, align: 'l')
11
+ end
12
+ documents = <<"EOS"
13
+ ### Lambda Functions
14
+
15
+ #{info}
16
+ EOS
17
+
18
+ documents
19
+ end
20
+
21
+ def get_resources
22
+ lmb = Aws::Lambda::Client.new
23
+
24
+ req = {}
25
+ functions = []
26
+ loop do
27
+ res = lmb.list_functions(req)
28
+ functions.push(*res.functions)
29
+ break if res.next_marker.nil?
30
+ req[:marker] = res.next_marker
31
+ end
32
+
33
+ function_infos = []
34
+ functions.map(&:to_h).each do |f|
35
+ function = []
36
+ function << f[:function_name]
37
+ function << f[:function_arn]
38
+ function << f[:runtime]
39
+ function << f[:timeout]
40
+ function << f[:memory_size]
41
+ function_infos << function
42
+ end
43
+ function_infos
44
+ end
45
+
46
+ module_function :report, :get_resources
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,56 @@
1
+ module Furikake
2
+ module Resources
3
+ module Rds
4
+ def report(format = nil)
5
+ instance, cluster = get_resources
6
+ contents = {
7
+ title: 'RDS',
8
+ resources: [
9
+ {
10
+ subtitle: 'DB Instances',
11
+ header: ['DB Cluster Name', 'DB Instance Name',
12
+ 'DB Instance Class', 'DB Engine', 'DB Endpoint'],
13
+ resource: instance
14
+ },
15
+ {
16
+ subtitle: 'DB Clusters',
17
+ header: ['DB Cluster Name', 'Cluster Endpoint',
18
+ 'Cluster Reader Endpoint', 'Cluster Members'],
19
+ resource: cluster
20
+ }
21
+ ]
22
+ }
23
+ Furikake::Formatter.shaping(format, contents).chomp
24
+ end
25
+
26
+ def get_resources
27
+ rds = Aws::RDS::Client.new
28
+
29
+ rds_infos = []
30
+ rds.describe_db_instances.db_instances.map(&:to_h).each do |i|
31
+ instance = []
32
+ instance << i[:db_cluster_identifier]
33
+ instance << i[:db_instance_identifier]
34
+ instance << i[:db_instance_class]
35
+ instance << i[:engine]
36
+ instance << i[:endpoint][:address]
37
+ rds_infos << instance
38
+ end
39
+
40
+ cluster_infos = []
41
+ rds.describe_db_clusters.db_clusters.map(&:to_h).each do |c|
42
+ cluster = []
43
+ cluster << c[:db_cluster_identifier]
44
+ cluster << c[:endpoint]
45
+ cluster << c[:reader_endpoint]
46
+ cluster << (c[:db_cluster_members].map {|m| m[:is_cluster_writer] ? m[:db_instance_identifier] + '(W)' : m[:db_instance_identifier] + '(R)'}).join(', ')
47
+ cluster_infos << cluster
48
+ end
49
+
50
+ return rds_infos, cluster_infos
51
+ end
52
+
53
+ module_function :report, :get_resources
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,118 @@
1
+ module Furikake
2
+ module Resources
3
+ module SecurityGroup
4
+ def report
5
+ ingresses, egresses = get_resources
6
+ headers = ['ID', 'Group Name', 'Description',
7
+ 'Port', 'Protocol', 'Source' ]
8
+ ingress_info = MarkdownTables.make_table(headers, ingresses, is_rows: true, align: 'l')
9
+
10
+ headers = ['ID', 'Group Name', 'Description',
11
+ 'Port', 'Protocol', 'Destination' ]
12
+ egress_info = MarkdownTables.make_table(headers, egresses, is_rows: true, align: 'l')
13
+
14
+ documents = <<"EOS"
15
+ ### Security Group
16
+
17
+ #### Ingress
18
+
19
+ #{ingress_info}
20
+
21
+ #### Egress
22
+
23
+ #{egress_info}
24
+ EOS
25
+
26
+ documents
27
+ end
28
+
29
+ def get_resources
30
+ ec2 = Aws::EC2::Client.new
31
+ params = {}
32
+ ingresses = []
33
+ egresses = []
34
+ loop do
35
+ res = ec2.describe_security_groups(params)
36
+ res.security_groups.each do |sg|
37
+ sg.ip_permissions.each do |permission|
38
+ ingress = []
39
+ ingress << sg.group_id
40
+ ingress << encode_value(sg.group_name)
41
+ ingress << encode_value(sg.description || 'N/A')
42
+ ingress << (permission.from_port || 'N/A')
43
+ ingress << (permission.ip_protocol == '-1' ? 'ALL' : permission.ip_protocol)
44
+
45
+ ip_ranges = list_ip_ranges(permission.ip_ranges)
46
+ list_ids = list_ids(permission.prefix_list_ids)
47
+ group_pairs = list_group_pairs(permission.user_id_group_pairs)
48
+
49
+ source = []
50
+ source << ip_ranges unless ip_ranges.empty?
51
+ source << list_ids unless list_ids.empty?
52
+ source << group_pairs unless group_pairs.empty?
53
+ ingress << source.join(', ')
54
+ ingresses << ingress
55
+ end
56
+
57
+ sg.ip_permissions_egress.each do |permission|
58
+ egress = []
59
+ egress << sg.group_id
60
+ egress << encode_value(sg.group_name)
61
+ egress << encode_value(sg.description || 'N/A')
62
+ egress << (permission.from_port || 'N/A')
63
+ egress << (permission.ip_protocol == '-1' ? 'ALL' : permission.ip_protocol)
64
+
65
+ ip_ranges = list_ip_ranges(permission.ip_ranges)
66
+ list_ids = list_ids(permission.prefix_list_ids)
67
+ group_pairs = list_group_pairs(permission.user_id_group_pairs)
68
+
69
+ dest = []
70
+ dest << ip_ranges unless ip_ranges.empty?
71
+ dest << list_ids unless list_ids.empty?
72
+ dest << group_pairs unless group_pairs.empty?
73
+ egress << dest.join(', ')
74
+ egresses << egress
75
+ end
76
+ end
77
+ break if res.next_token.nil?
78
+ params[:next_token] = res.next_token
79
+ end
80
+
81
+ return ingresses, egresses
82
+ end
83
+
84
+ def list_ip_ranges(ip_ranges)
85
+ result = []
86
+ ip_ranges.each do |ip|
87
+ result << (ip.cidr_ip || 'N/A') + ' (' + (ip.description || 'N/A') + ')'
88
+ end
89
+ result
90
+ end
91
+
92
+ def list_ids(prefix_list_ids)
93
+ result = []
94
+ prefix_list_ids.each do |id|
95
+ result << (id.prefix_list_id || 'N/A') + ' (' + (id.description|| 'N/A') + ')'
96
+ end
97
+ result
98
+ end
99
+
100
+ def list_group_pairs(user_id_group_pairs)
101
+ result = []
102
+ user_id_group_pairs.each do |id|
103
+ result << (id.group_id || 'N/A') + ' (' + (id.description|| 'N/A') + ')'
104
+ end
105
+ result
106
+ end
107
+
108
+ def encode_value(value)
109
+ return value unless value.index('_') == 0
110
+ '\\' + value
111
+ end
112
+
113
+ module_function :report, :get_resources,
114
+ :list_ip_ranges, :list_ids, :list_group_pairs,
115
+ :encode_value
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,33 @@
1
+ Aws.config[:ec2] = {
2
+ stub_responses: {
3
+ describe_instances: {
4
+ reservations: [
5
+ {
6
+ instances: [
7
+ {
8
+ instance_id: 'i-ec12345a',
9
+ image_id: 'ami-abc12def',
10
+ vpc_id: 'vpc-ab123cde',
11
+ subnet_id: 'subnet-1234a567',
12
+ public_ip_address: '123.0.456.789',
13
+ private_ip_address: '10.0.1.1',
14
+ instance_type: 't2.small',
15
+ state: {
16
+ name: 'running'
17
+ },
18
+ tags: [
19
+ {
20
+ key: 'Name',
21
+ value: 'my-ec2'
22
+ }
23
+ ],
24
+ placement: {
25
+ availability_zone: 'ap-northeast-1a'
26
+ }
27
+ }
28
+ ]
29
+ }
30
+ ]
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,9 @@
1
+ module Furikake
2
+ module Resources
3
+ class Stub
4
+ def self.load(type)
5
+ require File.dirname(__FILE__) + '/stub/' + type
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,40 @@
1
+ module Furikake
2
+ module Resources
3
+ module Vpc
4
+ def report
5
+ resources = get_resources
6
+ headers = ['Name', 'ID', 'CIDR', 'State']
7
+ if resources.empty?
8
+ info = 'N/A'
9
+ else
10
+ info = MarkdownTables.make_table(headers, resources, is_rows: true, align: 'l')
11
+ end
12
+ documents = <<"EOS"
13
+ ### VPC
14
+
15
+ #{info}
16
+ EOS
17
+
18
+ documents
19
+ end
20
+
21
+ def get_resources
22
+ ec2 = Aws::EC2::Client.new
23
+ vpcs = []
24
+ ec2.describe_vpcs.vpcs.each do |v|
25
+ vpc = []
26
+ vpc << 'N/A' if v.tags.map(&:to_h).all? { |h| h[:key] != 'Name' }
27
+ v.tags.each do |tag|
28
+ vpc << tag.value if tag.key == 'Name'
29
+ end
30
+ vpc << v.vpc_id
31
+ vpc << v.cidr_block
32
+ vpc << v.state
33
+ vpcs << vpc
34
+ end
35
+ vpcs
36
+ end
37
+ module_function :report, :get_resources
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,45 @@
1
+ module Furikake
2
+ module Resources
3
+ module VpcEndpoint
4
+ def report
5
+ resources = get_resources
6
+ headers = ['ID', 'Type', 'VPC ID', 'State']
7
+ if resources.empty?
8
+ info = 'N/A'
9
+ else
10
+ info = MarkdownTables.make_table(headers, resources, is_rows: true, align: 'l')
11
+ end
12
+ documents = <<"EOS"
13
+ ### VPC Endpoint
14
+
15
+ #{info}
16
+ EOS
17
+
18
+ documents
19
+ end
20
+
21
+ def get_resources
22
+ ec2 = Aws::EC2::Client.new
23
+ params = {}
24
+ endpoints = []
25
+ loop do
26
+ res = ec2.describe_vpc_endpoints(params)
27
+ res.vpc_endpoints.each do |e|
28
+ endpoint = []
29
+ endpoint << e.vpc_endpoint_id
30
+ endpoint << e.vpc_endpoint_type
31
+ endpoint << e.vpc_id
32
+ endpoint << e.state
33
+ endpoints << endpoint
34
+ end
35
+ break if res.next_token.nil?
36
+ params[:next_token] = res.next_token
37
+ end
38
+
39
+ endpoints
40
+ end
41
+
42
+ module_function :report, :get_resources
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,3 @@
1
+ module Furikake
2
+ VERSION = "0.0.1"
3
+ end
data/lib/furikake.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'thor'
2
+ require 'aws-sdk'
3
+ require 'furikake/cli'
4
+ require 'furikake/config'
5
+ require 'furikake/formatter'
6
+ require 'furikake/resource'
7
+ require 'furikake/report'
8
+ require 'furikake/version'
9
+
10
+ module Furikake
11
+ end
metadata ADDED
@@ -0,0 +1,182 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: furikake
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - inokappa
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-11-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: thor
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: aws-sdk
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: markdown-tables
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: backlog_kit
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: It is a command line tool to register your resources in Wiki page (Markdown
112
+ format).
113
+ email:
114
+ - inokara@gmail.com
115
+ executables:
116
+ - furikake
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - ".furikake.sample.yml"
121
+ - ".gitignore"
122
+ - ".rspec"
123
+ - ".travis.yml"
124
+ - Gemfile
125
+ - Gemfile.lock
126
+ - LICENSE.txt
127
+ - README.md
128
+ - Rakefile
129
+ - bin/console
130
+ - bin/setup
131
+ - docs/images/furikake.png
132
+ - exe/furikake
133
+ - furikake.gemspec
134
+ - lib/furikake.rb
135
+ - lib/furikake/cli.rb
136
+ - lib/furikake/config.rb
137
+ - lib/furikake/formatter.rb
138
+ - lib/furikake/formatters/csv.rb
139
+ - lib/furikake/formatters/markdown.rb
140
+ - lib/furikake/report.rb
141
+ - lib/furikake/reporters/backlog.rb
142
+ - lib/furikake/resource.rb
143
+ - lib/furikake/resources/alb.rb
144
+ - lib/furikake/resources/clb.rb
145
+ - lib/furikake/resources/directory_service.rb
146
+ - lib/furikake/resources/ec2.rb
147
+ - lib/furikake/resources/elasticsearch_service.rb
148
+ - lib/furikake/resources/kinesis.rb
149
+ - lib/furikake/resources/lambda.rb
150
+ - lib/furikake/resources/rds.rb
151
+ - lib/furikake/resources/security_group.rb
152
+ - lib/furikake/resources/stub.rb
153
+ - lib/furikake/resources/stub/ec2.rb
154
+ - lib/furikake/resources/vpc.rb
155
+ - lib/furikake/resources/vpc_endpoint.rb
156
+ - lib/furikake/version.rb
157
+ homepage: https://github.com/inokappa/furikake
158
+ licenses:
159
+ - MIT
160
+ metadata: {}
161
+ post_install_message:
162
+ rdoc_options: []
163
+ require_paths:
164
+ - lib
165
+ required_ruby_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ required_rubygems_version: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ requirements: []
176
+ rubyforge_project:
177
+ rubygems_version: 2.7.6
178
+ signing_key:
179
+ specification_version: 4
180
+ summary: It is a command line tool to register your resources in Wiki page (Markdown
181
+ format).
182
+ test_files: []