mikoshi 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 56bb8fdf71e768f178771479a4cd619c69393ff3
4
- data.tar.gz: 1db7396f7a154aa01873b9a0d120be26895c131d
3
+ metadata.gz: 11ffacd388fe1d9f9e14b9a6b4996a49e6a1dd01
4
+ data.tar.gz: b9024f9536b02d92f818382df4efd5ccd3e38340
5
5
  SHA512:
6
- metadata.gz: 2e26bed49e82178f2e09e6b909c5532823c6430b5d778e52d5e2e786fcab8d4dec1badf6a7c5e441918bbb42c1e5f99138108aad9db688d021c99ffe8912c87e
7
- data.tar.gz: 4ac04275fc78b7bda44b91cefebfc1cacfe333fc3ccc4260413421820c61bb44e620c2b0e70895125087157f93b3c5973b0261fa6ff158bc702b6b76399ae66a
6
+ metadata.gz: 05e402e23adebac0612a4e4c20ea1a35b6cbec586338d3417251983cd3f08a593b22ff53332c5271a834b1963695b3ae3dcdcc7c3c927476818f253fe5001152
7
+ data.tar.gz: 5c3d49d7caff0699368be992558a33827ee0a494ade3cedd3a4876f5591631fa46c46ff13da27d781015d4bd010b785b0f02951e1d80d5fc80023e7c26e16065
data/README.md CHANGED
@@ -85,15 +85,37 @@ $ mikoshi deploy -g ping2googledns
85
85
 
86
86
  # show help
87
87
  $ mikoshi help
88
- Commands:
89
- mikoshi deploy # Deploy task definition and service
90
- mikoshi help [COMMAND] # Describe available commands or one specific command
91
- mikoshi update_service SERVICE_NAME # Update service
92
- mikoshi update_task TASK_NAME # Update task definition
88
+ Usage of the mikoshi
93
89
 
94
- Options:
95
- [--region=REGION] # aws region
90
+ Global option
91
+ -r, --region=REGION : Set aws region
92
+ -h, --help : Print this help message
93
+ -v, --version : Print mikoshi version
96
94
 
95
+ Subcommands
96
+ update_task_definition
97
+ Update task definition to given task definition yaml file.
98
+ Set TASK_DEF_REVISION to updated task definition revision number.
99
+
100
+ Option
101
+ --potdr
102
+ Acronym of the "Print Only Task Definition Revision".
103
+
104
+ update_service
105
+ Update service to given service yaml file.
106
+ Wait for success to update the service. (Maximum 300 min)
107
+
108
+ deploy
109
+ invoke update_task_definition and update_service.
110
+
111
+ Option
112
+ -g, --group=GROUP
113
+ If task definition file name and service file name are
114
+ same, that a shorthand of pass both.
115
+
116
+ Common options
117
+ -s, --service=SERVICE
118
+ -t, --task-definition=TASK_DEFINITION
97
119
  ```
98
120
 
99
121
  ## Development
@@ -3,4 +3,4 @@
3
3
 
4
4
  $LOAD_PATH << File.expand_path('../../lib', __FILE__)
5
5
  require 'mikoshi'
6
- Mikoshi::Cli.start
6
+ Mikoshi::Cli.new(argv: ARGV).start
@@ -1,67 +1,162 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'thor'
3
+ # rubocop: disable Metrics/AbcSize
4
+ # rubocop: disable Metrics/ClassLength
5
+
4
6
  require 'aws-sdk'
5
7
  require 'mikoshi/plan'
6
8
  require 'mikoshi/plan/task_definition'
7
9
  require 'mikoshi/plan/service'
10
+ require 'optparse'
8
11
 
9
12
  module Mikoshi
10
- class Cli < Thor
13
+ class Cli
14
+ attr_reader :options
15
+
11
16
  TASK_DEFINITION_PATH = 'task_definitions'
12
17
  SERVICE_PATH = 'services'
13
18
  PLAN_EXT = '.yml.erb'
14
19
  FETCH_INTERVAL = 10
15
20
  DEPLOY_TIMEOUT = 300
16
21
 
17
- class_option :region, type: :string, desc: 'aws region'
22
+ def initialize(argv: nil)
23
+ raise ArgumentError, 'argv is required.' if argv.nil?
24
+
25
+ @argv = argv
26
+ @options = { region: nil, command: nil, config: {} }
27
+ end
28
+
29
+ def start
30
+ parse
31
+ exit_when_flag
32
+
33
+ case @options[:command]
34
+ when :update_task_definition
35
+ update_task_definition(@options[:config][:task_definition])
36
+ when :update_service
37
+ update_service(@options[:config][:service])
38
+ when :deploy
39
+ deploy
40
+ when :version
41
+ version
42
+ when :help
43
+ usage
44
+ end
45
+ end
46
+
47
+ def parse
48
+ opt = OptionParser.new
49
+
50
+ opt.on('-r', '--region=REGION') { |v| @options[:region] = v }
51
+ opt.on('-s', '--service=SERVICE') { |v| @options[:config][:service] = v }
52
+ opt.on('-t', '--task-definition=TASK_DEFINITION') { |v| @options[:config][:task_definition] = v }
53
+ opt.on('--potdr') { |v| @options[:config][:potdr] = v }
54
+ opt.on('-g', '--group=GROUP') { |v| @options[:config][:group] = v }
55
+ opt.on('-h', '--help') { |v| @options[:config][:help] = v }
56
+ opt.on('-v', '--version') { |v| @options[:config][:version] = v }
57
+
58
+ opt.permute!(@argv)
59
+ @options[:command] = @argv.first.to_sym unless @argv.first.nil?
60
+ end
61
+
62
+ def exit_when_flag
63
+ usage if @options[:config][:help]
64
+ version if @options[:config][:version]
65
+ exit if @options[:config][:help] || @options[:config][:version]
66
+ end
67
+
68
+ def usage
69
+ puts <<~USAGE
70
+ Usage of the mikoshi
71
+
72
+ Global option
73
+ -r, --region=REGION : Set aws region
74
+ -h, --help : Print this help message
75
+ -v, --version : Print mikoshi version
76
+
77
+ Subcommands
78
+ update_task_definition
79
+ Update task definition to given task definition yaml file.
80
+ Set TASK_DEF_REVISION to updated task definition revision number.
81
+
82
+ Option
83
+ --potdr
84
+ Acronym of the "Print Only Task Definition Revision".
85
+
86
+ update_service
87
+ Update service to given service yaml file.
88
+ Wait for success to update the service. (Maximum 300 min)
89
+
90
+ deploy
91
+ invoke update_task_definition and update_service.
92
+
93
+ Option
94
+ -g, --group=GROUP
95
+ If task definition file name and service file name are
96
+ same, that a shorthand of pass both.
97
+
98
+ Common options
99
+ -s, --service=SERVICE
100
+ -t, --task-definition=TASK_DEFINITION
101
+ USAGE
102
+ end
103
+
104
+ def version
105
+ puts "mikoshi version #{Mikoshi::VERSION}"
106
+ end
107
+
108
+ def update_task_definition(task_def_name)
109
+ if task_def_name.nil?
110
+ warn '--task-definition=TASK_DEFINITION is require option.'
111
+ abort
112
+ end
18
113
 
19
- desc 'update_task TASK_NAME', 'Update task definition'
20
- def update_task_definition(task_name)
21
114
  task = ::Mikoshi::Plan::TaskDefinition.new(
22
- yaml_path: File.join(TASK_DEFINITION_PATH, task_name + PLAN_EXT),
23
- client: aws_client,
115
+ yaml_path: File.join(TASK_DEFINITION_PATH, task_def_name + PLAN_EXT),
116
+ client: aws_client,
24
117
  )
25
- puts "Update task definition: #{task_name}"
118
+
119
+ # print only task definition revision
120
+ potdr = @options[:config][:potdr]
121
+
122
+ puts "Update task definition: #{task_def_name}" unless potdr
26
123
  task.register_task_definition
27
- puts "Done update task definition: #{task_name} revision: #{ENV['TASK_DEF_REVISION']}"
124
+ puts "Done update task definition: #{task_def_name} revision: #{ENV['TASK_DEF_REVISION']}" unless potdr
125
+ puts ENV['TASK_DEF_REVISION'] if potdr
28
126
  end
29
127
 
30
- desc 'update_service SERVICE_NAME', 'Update service'
31
128
  def update_service(service_name)
129
+ if service_name.nil?
130
+ warn '--service=SERVICE is require option.'
131
+ abort
132
+ end
133
+
32
134
  service = ::Mikoshi::Plan::Service.new(
33
- yaml_path: File.join(SERVICE_PATH, service_name + PLAN_EXT),
34
- client: aws_client,
135
+ yaml_path: File.join(SERVICE_PATH, service_name + PLAN_EXT),
136
+ client: aws_client,
35
137
  )
36
- puts "Update service : #{service_name}"
138
+
139
+ puts "Update service: #{service_name}"
37
140
  service.deploy_service(message: true)
38
141
  puts "Done update service #{service_name}"
39
142
  end
40
143
 
41
- desc 'deploy', 'Deploy task definition and service'
42
- method_option :task_definition, type: :string, desc: 'task_definition name', aliases: '-t'
43
- method_option :service, type: :string, desc: 'service name', aliases: '-s'
44
- method_option :group, type: :string, desc: 'service and task definition name(if both are same)', aliases: '-g'
45
-
46
144
  def deploy
47
- task_definition = options[:group] || options[:task_definition] || nil
48
- service = options[:group] || options[:service] || nil
145
+ task_def_name = @options[:config][:group] || @options[:config][:task_definition]
146
+ service_name = @options[:config][:group] || @options[:config][:service]
49
147
 
50
- update_task_definition(task_definition) if task_definition
51
- update_service(service) if service
148
+ update_task_definition(task_def_name) if task_def_name
149
+ update_service(service_name) if service_name
52
150
  end
53
151
 
54
- no_tasks do
55
- def aws_client
56
- opt =
57
- if options[:region].nil?
58
- {}
59
- else
60
- { region: options[:region] }
61
- end
62
-
63
- Aws::ECS::Client.new(opt)
64
- end
152
+ def aws_client
153
+ opt =
154
+ if @options[:region].nil?
155
+ {}
156
+ else
157
+ { region: @options[:region] }
158
+ end
159
+ Aws::ECS::Client.new(opt)
65
160
  end
66
161
  end
67
162
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mikoshi
4
- VERSION = '0.4.0'
4
+ VERSION = '0.5.0'
5
5
  end
@@ -27,7 +27,6 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.add_dependency 'activesupport', '~> 5'
29
29
  spec.add_dependency 'aws-sdk', '~> 2'
30
- spec.add_dependency 'thor'
31
30
 
32
31
  spec.add_development_dependency 'bundler', '~> 1.14'
33
32
  spec.add_development_dependency 'codacy-coverage'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mikoshi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yusuke Nakamura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-02 00:00:00.000000000 Z
11
+ date: 2017-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2'
41
- - !ruby/object:Gem::Dependency
42
- name: thor
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: bundler
57
43
  requirement: !ruby/object:Gem::Requirement