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.
- checksums.yaml +7 -0
- data/.furikake.sample.yml +22 -0
- data/.gitignore +18 -0
- data/.rspec +3 -0
- data/.travis.yml +5 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +664 -0
- data/LICENSE.txt +21 -0
- data/README.md +123 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/docs/images/furikake.png +0 -0
- data/exe/furikake +5 -0
- data/furikake.gemspec +32 -0
- data/lib/furikake/cli.rb +22 -0
- data/lib/furikake/config.rb +9 -0
- data/lib/furikake/formatter.rb +9 -0
- data/lib/furikake/formatters/csv.rb +9 -0
- data/lib/furikake/formatters/markdown.rb +30 -0
- data/lib/furikake/report.rb +52 -0
- data/lib/furikake/reporters/backlog.rb +25 -0
- data/lib/furikake/resource.rb +21 -0
- data/lib/furikake/resources/alb.rb +71 -0
- data/lib/furikake/resources/clb.rb +37 -0
- data/lib/furikake/resources/directory_service.rb +50 -0
- data/lib/furikake/resources/ec2.rb +56 -0
- data/lib/furikake/resources/elasticsearch_service.rb +54 -0
- data/lib/furikake/resources/kinesis.rb +54 -0
- data/lib/furikake/resources/lambda.rb +49 -0
- data/lib/furikake/resources/rds.rb +56 -0
- data/lib/furikake/resources/security_group.rb +118 -0
- data/lib/furikake/resources/stub/ec2.rb +33 -0
- data/lib/furikake/resources/stub.rb +9 -0
- data/lib/furikake/resources/vpc.rb +40 -0
- data/lib/furikake/resources/vpc_endpoint.rb +45 -0
- data/lib/furikake/version.rb +3 -0
- data/lib/furikake.rb +11 -0
- metadata +182 -0
data/README.md
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
# Furikake [](https://travis-ci.org/inokappa/furikake)
|
2
|
+

|
3
|
+
|
4
|
+
## これなに
|
5
|
+
|
6
|
+
* 利用している AWS リソースを Backlog の Wiki ページ (Markdown フォーマットのみ) に良しなに纏めてドキュメント化してくれるコマンドラインツールです
|
7
|
+
* 簡単なコードを追加することで, 取得する AWS リソースを増やすことが出来るようにはしています
|
8
|
+
* Backlog Wiki 以外にも登録出来るようにはしています
|
9
|
+
|
10
|
+
## Install
|
11
|
+
|
12
|
+
とりあえずは, `git clone` してきて `bundle install` する感じでお願い致します.
|
13
|
+
|
14
|
+
```sh
|
15
|
+
$ git clone git@github.com:inokappa/furikake.git
|
16
|
+
$ bundle install --path vendor/bundle
|
17
|
+
```
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
### Create Wiki Page
|
22
|
+
|
23
|
+
* Backlog の wiki を作成し, wiki ID を控えておく (後の .furikake.yml で利用する)
|
24
|
+
|
25
|
+
### Write .envrc
|
26
|
+
|
27
|
+
とりあえずは, direnv と組み合わせて利用することを想定しており, AWS のクレデンシャル情報は .envrc に記載して下さい.
|
28
|
+
|
29
|
+
```sh
|
30
|
+
export AWS_PROFILE=your-profile
|
31
|
+
export AWS_REGION=ap-northeast-1
|
32
|
+
```
|
33
|
+
|
34
|
+
### Write .frikake.yml
|
35
|
+
|
36
|
+
カレントディレクトリに, 以下のような内容で .furikake.yml を作成して下さい.
|
37
|
+
|
38
|
+
```yaml
|
39
|
+
backlog:
|
40
|
+
projects:
|
41
|
+
- space_id: 'your-backlog-space-id'
|
42
|
+
api_key: 'your-backlog-api-key'
|
43
|
+
top_level_domain: 'your-backlog-top-level-domain'
|
44
|
+
wiki_id: your-wiki-id
|
45
|
+
wiki_name: 'your-wiki-name'
|
46
|
+
header: >
|
47
|
+
# Test Header
|
48
|
+
footer: >
|
49
|
+
# Test Footer
|
50
|
+
```
|
51
|
+
|
52
|
+
### Run
|
53
|
+
|
54
|
+
```sh
|
55
|
+
# ドキュメント化する情報を標準出力に出力する
|
56
|
+
bundle exec furikake show
|
57
|
+
|
58
|
+
# ドキュメント化する情報を wiki に登録する
|
59
|
+
bundle exec furikake publish
|
60
|
+
```
|
61
|
+
|
62
|
+
## Tips
|
63
|
+
|
64
|
+
### リソース追加
|
65
|
+
|
66
|
+
`lib/furikake/resources/` 以下に任意のファイル名でコードを追加することで, ドキュメント化する対象のリソースを追加することが出来ます.
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
module Furikake
|
70
|
+
module Resources
|
71
|
+
module Ec2
|
72
|
+
def report(format = nil)
|
73
|
+
instance = get_resources
|
74
|
+
contents = {
|
75
|
+
title: 'EC2',
|
76
|
+
resources: [
|
77
|
+
{
|
78
|
+
subtitle: '',
|
79
|
+
header: ['Name', 'Instance ID', 'Instance Type',
|
80
|
+
'Availability Zone', 'Private IP Address',
|
81
|
+
'Public IP Address', 'State'],
|
82
|
+
resource: instance
|
83
|
+
}
|
84
|
+
]
|
85
|
+
}
|
86
|
+
Furikake::Formatter.shaping(format, contents)
|
87
|
+
end
|
88
|
+
|
89
|
+
def get_resources
|
90
|
+
ec2 = Aws::EC2::Client.new
|
91
|
+
params = {}
|
92
|
+
instances = []
|
93
|
+
loop do
|
94
|
+
res = ec2.describe_instances(params)
|
95
|
+
...
|
96
|
+
```
|
97
|
+
|
98
|
+
report メソッドには, 一覧化する際のヘッダを `header` に配列で指定します. get_resources メソッドにドキュメント化したいリソースの一覧を取得する為の処理を追加します. 戻り値は, 以下のようなフォーマットになるように実装して下さい.
|
99
|
+
|
100
|
+
```
|
101
|
+
[['ID', 'Name', 'Status'], ['ID', 'Name', 'Status'], ['ID', 'Name', 'Status']]
|
102
|
+
```
|
103
|
+
|
104
|
+
## Todo
|
105
|
+
|
106
|
+
* エラー処理
|
107
|
+
* デーモン化
|
108
|
+
* Backlog Wiki 以外の Wiki (例えば, Github Wiki や Gist 等)
|
109
|
+
* テスト追加
|
110
|
+
|
111
|
+
## Development
|
112
|
+
|
113
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
114
|
+
|
115
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
116
|
+
|
117
|
+
## Contributing
|
118
|
+
|
119
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/furikake.
|
120
|
+
|
121
|
+
## License
|
122
|
+
|
123
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "furikake"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
Binary file
|
data/exe/furikake
ADDED
data/furikake.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "furikake/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "furikake"
|
8
|
+
spec.version = Furikake::VERSION
|
9
|
+
spec.authors = ["inokappa"]
|
10
|
+
spec.email = ["inokara@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{It is a command line tool to register your resources in Wiki page (Markdown format).}
|
13
|
+
spec.description = %q{It is a command line tool to register your resources in Wiki page (Markdown format).}
|
14
|
+
spec.homepage = "https://github.com/inokappa/furikake"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
18
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
|
+
end
|
20
|
+
spec.bindir = "exe"
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ["lib"]
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.16"
|
25
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
26
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
27
|
+
|
28
|
+
spec.add_dependency 'thor'
|
29
|
+
spec.add_dependency 'aws-sdk'
|
30
|
+
spec.add_dependency 'markdown-tables'
|
31
|
+
spec.add_dependency 'backlog_kit'
|
32
|
+
end
|
data/lib/furikake/cli.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'furikake'
|
2
|
+
|
3
|
+
module Furikake
|
4
|
+
class CLI < Thor
|
5
|
+
desc 'version', 'version print.'
|
6
|
+
def version
|
7
|
+
puts Furikake::VERSION
|
8
|
+
end
|
9
|
+
|
10
|
+
desc 'show', 'resouces print.'
|
11
|
+
def show
|
12
|
+
report = Furikake::Report.new
|
13
|
+
report.show
|
14
|
+
end
|
15
|
+
|
16
|
+
desc 'publish', 'resouces publish to something.'
|
17
|
+
def publish
|
18
|
+
report = Furikake::Report.new
|
19
|
+
report.publish
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'markdown-tables'
|
3
|
+
|
4
|
+
module Furikake
|
5
|
+
module Formatters
|
6
|
+
class Markdown
|
7
|
+
def self.write(c)
|
8
|
+
contents = <<EOS
|
9
|
+
### <%= c[:title] %>
|
10
|
+
|
11
|
+
<%- c[:resources].each do |r| -%>
|
12
|
+
<%- if r[:subtitle] != '' -%>
|
13
|
+
#### <%= r[:subtitle] %>
|
14
|
+
|
15
|
+
<%- end -%>
|
16
|
+
<%- if ! r[:resource].empty? -%>
|
17
|
+
<%= MarkdownTables.make_table(r[:header], r[:resource], is_rows: true, align: 'l') %>
|
18
|
+
|
19
|
+
<%- else -%>
|
20
|
+
<%= 'N/A' %>
|
21
|
+
|
22
|
+
<%- end -%>
|
23
|
+
<%- end -%>
|
24
|
+
EOS
|
25
|
+
erb = ERB.new(contents, nil, '-')
|
26
|
+
erb.result(binding).chomp
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'furikake/reporters/backlog'
|
2
|
+
|
3
|
+
module Furikake
|
4
|
+
class Report
|
5
|
+
include Furikake::Config
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@params = read_furikake_yaml
|
9
|
+
@resource = Furikake::Resource.generate
|
10
|
+
end
|
11
|
+
|
12
|
+
def show
|
13
|
+
@params['backlog']['projects'].each do |p|
|
14
|
+
header = insert_published_by(p['header'])
|
15
|
+
footer = p['footer']
|
16
|
+
puts generate(header, footer)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def publish
|
21
|
+
@params['backlog']['projects'].each do |p|
|
22
|
+
header = insert_published_by(p['header'])
|
23
|
+
footer = p['footer']
|
24
|
+
document = generate(header, footer)
|
25
|
+
p['wiki_contents'] = document
|
26
|
+
Furikake::Reporters::Backlog.new(p).publish
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def generate(header, footer)
|
33
|
+
documents = <<"EOS"
|
34
|
+
#{header}
|
35
|
+
#{@resource}
|
36
|
+
#{footer}
|
37
|
+
EOS
|
38
|
+
documents
|
39
|
+
end
|
40
|
+
|
41
|
+
def insert_published_by(header)
|
42
|
+
headers = header.split("\n")
|
43
|
+
headers.insert(1, published_by)
|
44
|
+
headers.insert(2, "\n")
|
45
|
+
headers.join("\n")
|
46
|
+
end
|
47
|
+
|
48
|
+
def published_by
|
49
|
+
"*Published #{Time.now} by [furikake](https://github.com/inokappa/furikake)*"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'backlog_kit'
|
2
|
+
|
3
|
+
module Furikake
|
4
|
+
module Reporters
|
5
|
+
class Backlog
|
6
|
+
def initialize(params)
|
7
|
+
@client ||= BacklogKit::Client.new(
|
8
|
+
space_id: params['space_id'],
|
9
|
+
api_key: params['api_key'],
|
10
|
+
top_level_domain: params['top_level_domain']
|
11
|
+
)
|
12
|
+
@wiki_id = params['wiki_id']
|
13
|
+
@wiki_name = params['wiki_name']
|
14
|
+
@wiki_contents = params['wiki_contents']
|
15
|
+
end
|
16
|
+
|
17
|
+
def publish
|
18
|
+
params = {}
|
19
|
+
params['name'] = @wiki_name
|
20
|
+
params['content'] = @wiki_contents
|
21
|
+
@client.update_wiki(@wiki_id, params)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Furikake
|
2
|
+
class Resource
|
3
|
+
def self.generate
|
4
|
+
documents = ''
|
5
|
+
load_type.each do |type|
|
6
|
+
require "furikake/resources/#{type}"
|
7
|
+
eval "documents.concat(Furikake::Resources::#{type.camelize}.report)"
|
8
|
+
documents.concat("\n")
|
9
|
+
end
|
10
|
+
documents
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.load_type
|
14
|
+
type = []
|
15
|
+
Dir.glob(File.dirname(__FILE__) + '/resources/*').each do |r|
|
16
|
+
type << File.basename(r, '.rb') unless r.include?('stub')
|
17
|
+
end
|
18
|
+
type
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Furikake
|
2
|
+
module Resources
|
3
|
+
module Alb
|
4
|
+
def report
|
5
|
+
albs, target_groups = get_resources
|
6
|
+
headers = ['LB Name', 'DNS Name', 'Type', 'Target Group']
|
7
|
+
if albs.empty?
|
8
|
+
albs_info = 'N/A'
|
9
|
+
else
|
10
|
+
albs_info = MarkdownTables.make_table(headers,
|
11
|
+
albs,
|
12
|
+
is_rows: true,
|
13
|
+
align: 'l')
|
14
|
+
end
|
15
|
+
|
16
|
+
headers = ['Target Group Name', 'Protocal', 'Port', 'Health Check Path', 'Health Chack Port', 'Health Check Protocol']
|
17
|
+
if target_groups.empty?
|
18
|
+
target_group_info = 'N/A'
|
19
|
+
else
|
20
|
+
target_group_info = MarkdownTables.make_table(headers,
|
21
|
+
target_groups,
|
22
|
+
is_rows: true,
|
23
|
+
align: 'l')
|
24
|
+
end
|
25
|
+
|
26
|
+
documents = <<"EOS"
|
27
|
+
### ELB (ALB / NLB)
|
28
|
+
|
29
|
+
#### ALB / NLB
|
30
|
+
|
31
|
+
#{albs_info}
|
32
|
+
|
33
|
+
#### Target Groups
|
34
|
+
|
35
|
+
#{target_group_info}
|
36
|
+
EOS
|
37
|
+
documents
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_resources
|
41
|
+
alb = Aws::ElasticLoadBalancingV2::Client.new
|
42
|
+
|
43
|
+
albs = []
|
44
|
+
target_groups = []
|
45
|
+
alb.describe_load_balancers.load_balancers.each do |lb|
|
46
|
+
alb_info = []
|
47
|
+
t = alb.describe_target_groups({
|
48
|
+
load_balancer_arn: lb.load_balancer_arn
|
49
|
+
}).target_groups.map(&:to_h)
|
50
|
+
alb_info << lb.load_balancer_name
|
51
|
+
alb_info << lb.dns_name
|
52
|
+
alb_info << lb.type
|
53
|
+
alb_info << (t.map {|a| a[:target_group_name]}).join(", ")
|
54
|
+
albs << alb_info
|
55
|
+
target_group = []
|
56
|
+
target_group << (t.map {|a| a[:target_group_name]}).join(", ")
|
57
|
+
target_group << (t.map {|a| a[:protocol]}).join(", ")
|
58
|
+
target_group << (t.map {|a| a[:port]}).join(", ")
|
59
|
+
target_group << (t.map {|a| a[:health_check_path].nil? ? " " : a[:health_check_path]}).join(", ")
|
60
|
+
target_group << (t.map {|a| a[:health_check_port]}).join(", ")
|
61
|
+
target_group << (t.map {|a| a[:health_check_protocol]}).join(", ")
|
62
|
+
target_groups << target_group
|
63
|
+
end
|
64
|
+
|
65
|
+
return albs, target_groups
|
66
|
+
end
|
67
|
+
|
68
|
+
module_function :report, :get_resources
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Furikake
|
2
|
+
module Resources
|
3
|
+
module Clb
|
4
|
+
def report
|
5
|
+
resources = get_resources
|
6
|
+
headers = ['LB Name', 'DNS Name', 'Instances']
|
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
|
+
### ELB (CLB)
|
14
|
+
|
15
|
+
#{info}
|
16
|
+
EOS
|
17
|
+
|
18
|
+
documents
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_resources
|
22
|
+
elb = Aws::ElasticLoadBalancing::Client.new
|
23
|
+
elbs = []
|
24
|
+
elb.describe_load_balancers.load_balancer_descriptions.each do |lb|
|
25
|
+
elb = []
|
26
|
+
elb << lb.load_balancer_name
|
27
|
+
elb << lb.dns_name
|
28
|
+
elb << (lb.instances.map(&:to_h).map {|a| a[:instance_id] }).join(',')
|
29
|
+
elbs << elb
|
30
|
+
end
|
31
|
+
elbs
|
32
|
+
end
|
33
|
+
|
34
|
+
module_function :report, :get_resources
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Furikake
|
2
|
+
module Resources
|
3
|
+
module DirectoryService
|
4
|
+
def report
|
5
|
+
resources = get_resources
|
6
|
+
headers = ['Directory ID', 'DNS Name', 'NetBIOS Name', 'Type', 'DNS Addresses', '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
|
+
### Directory Service (Simple AD)
|
14
|
+
|
15
|
+
#{info}
|
16
|
+
EOS
|
17
|
+
|
18
|
+
documents
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_resources
|
22
|
+
ds = Aws::DirectoryService::Client.new
|
23
|
+
|
24
|
+
req = {}
|
25
|
+
resouces = []
|
26
|
+
loop do
|
27
|
+
res = ds.describe_directories(req)
|
28
|
+
resouces.push(*res.directory_descriptions.map(&:to_h))
|
29
|
+
break if res.next_token.nil?
|
30
|
+
req[:next_token] = res.next_token
|
31
|
+
end
|
32
|
+
|
33
|
+
directoryservice_infos = []
|
34
|
+
resouces.each do |r|
|
35
|
+
directory = []
|
36
|
+
directory << r[:directory_id]
|
37
|
+
directory << r[:name]
|
38
|
+
directory << r[:short_name]
|
39
|
+
directory << r[:type]
|
40
|
+
directory << r[:dns_ip_addrs].join(', ')
|
41
|
+
directory << r[:size]
|
42
|
+
directoryservice_infos << directory
|
43
|
+
end
|
44
|
+
directoryservice_infos
|
45
|
+
end
|
46
|
+
|
47
|
+
module_function :report, :get_resources
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Furikake
|
2
|
+
module Resources
|
3
|
+
module Ec2
|
4
|
+
def report(format = nil)
|
5
|
+
instance = get_resources
|
6
|
+
contents = {
|
7
|
+
title: 'EC2',
|
8
|
+
resources: [
|
9
|
+
{
|
10
|
+
subtitle: '',
|
11
|
+
header: ['Name', 'Instance ID', 'Instance Type',
|
12
|
+
'Availability Zone', 'Private IP Address',
|
13
|
+
'Public IP Address', 'State'],
|
14
|
+
resource: instance
|
15
|
+
}
|
16
|
+
]
|
17
|
+
}
|
18
|
+
Furikake::Formatter.shaping(format, contents)
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_resources
|
22
|
+
ec2 = Aws::EC2::Client.new
|
23
|
+
params = {}
|
24
|
+
instances = []
|
25
|
+
loop do
|
26
|
+
res = ec2.describe_instances(params)
|
27
|
+
res.reservations.each do |r|
|
28
|
+
r.instances.each do |i|
|
29
|
+
instance = []
|
30
|
+
instance << 'N/A' if i.tags.map(&:to_h).all? { |h| h[:key] != 'Name' }
|
31
|
+
i.tags.each do |tag|
|
32
|
+
instance << tag.value if tag.key == 'Name'
|
33
|
+
end
|
34
|
+
instance << i.instance_id
|
35
|
+
instance << i.instance_type
|
36
|
+
instance << i.placement.availability_zone
|
37
|
+
instance << i.private_ip_address
|
38
|
+
if i.public_ip_address.nil?
|
39
|
+
instance << ' '
|
40
|
+
else
|
41
|
+
instance << i.public_ip_address
|
42
|
+
end
|
43
|
+
instance << i.state.name
|
44
|
+
instances << instance
|
45
|
+
end
|
46
|
+
end
|
47
|
+
break if res.next_token.nil?
|
48
|
+
params[:next_token] = res.next_token
|
49
|
+
end
|
50
|
+
|
51
|
+
instances
|
52
|
+
end
|
53
|
+
module_function :report, :get_resources
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Furikake
|
2
|
+
module Resources
|
3
|
+
module ElasticsearchService
|
4
|
+
def report
|
5
|
+
resources = get_resources
|
6
|
+
headers = ['Domain Name', 'Endpoint', 'Instance Type', "Instance Count", "Elasticsearch Version", 'EBS Type', 'EBS 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
|
+
### Elasticsearch Service
|
14
|
+
|
15
|
+
#{info}
|
16
|
+
EOS
|
17
|
+
|
18
|
+
documents
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_resources
|
22
|
+
ess = Aws::ElasticsearchService::Client.new
|
23
|
+
|
24
|
+
domains = []
|
25
|
+
loop do
|
26
|
+
res = ess.list_domain_names
|
27
|
+
domains.push(*res.domain_names.map(&:to_h))
|
28
|
+
break if res.domain_names.size == domains.size
|
29
|
+
end
|
30
|
+
|
31
|
+
domain_info = []
|
32
|
+
domains.each do |domain|
|
33
|
+
resource = []
|
34
|
+
res = ess.describe_elasticsearch_domains({
|
35
|
+
domain_names: [domain[:domain_name]],
|
36
|
+
})
|
37
|
+
res.domain_status_list.each do |r|
|
38
|
+
resource << r[:domain_name]
|
39
|
+
resource << r[:endpoints]['vpc']
|
40
|
+
resource << r[:elasticsearch_cluster_config][:instance_type]
|
41
|
+
resource << r[:elasticsearch_cluster_config][:instance_count]
|
42
|
+
resource << r[:elasticsearch_version]
|
43
|
+
resource << r[:ebs_options][:volume_type]
|
44
|
+
resource << r[:ebs_options][:volume_size]
|
45
|
+
end
|
46
|
+
domain_info << resource
|
47
|
+
end
|
48
|
+
domain_info
|
49
|
+
end
|
50
|
+
|
51
|
+
module_function :report, :get_resources
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|