luban 0.5.5 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +32 -3
- data/README.md +1 -1
- data/lib/luban/deployment/cli/application/base.rb +56 -29
- data/lib/luban/deployment/cli/application/configurator.rb +7 -0
- data/lib/luban/deployment/cli/application/publisher.rb +3 -4
- data/lib/luban/deployment/cli/application/repository.rb +6 -6
- data/lib/luban/deployment/cli/application/scm/git.rb +1 -1
- data/lib/luban/deployment/cli/application/worker.rb +11 -6
- data/lib/luban/deployment/cli/command.rb +9 -3
- data/lib/luban/deployment/cli/package/installer/paths.rb +2 -2
- data/lib/luban/deployment/cli/package/worker.rb +3 -6
- data/lib/luban/deployment/cli/service/controller.rb +35 -5
- data/lib/luban/deployment/cli/service/worker.rb +3 -11
- data/lib/luban/deployment/helpers/generator.rb +3 -3
- data/lib/luban/deployment/parameters.rb +0 -4
- data/lib/luban/deployment/templates/application/config/deploy/__stage.rb.erb +1 -1
- data/lib/luban/deployment/templates/application/config/deploy.rb.erb +1 -1
- data/lib/luban/deployment/version.rb +1 -1
- data/lib/luban/deployment/worker/base.rb +7 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1869e9e885d7001c5da72cb20649de3efe0373aa
|
4
|
+
data.tar.gz: 4fa710ce988a9dd6abe9b7ab099504851b25f8da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc8d972f086c40b6bab462d389d685263d56bc44925ca41789ab963defe7c04a6f0348beeffeceb748d5ec8b7e298e676d3a51542ef98bb50b695a08d411862d
|
7
|
+
data.tar.gz: a657dfb9403ffaeee93f2abe34c1dee081058d7a84053422f6ec2bf700c09b1ae54a2890ec082b305374f1562f9f489e2ecd6eae739d1b005ee5b9983b236eac
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,33 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
-
## Version 0.
|
3
|
+
## Version 0.6.0 (Jul 08, 2016)
|
4
|
+
|
5
|
+
New features:
|
6
|
+
* Added support for Cluster in Service::Controller
|
7
|
+
* Added control & configuration support for application if it has its own source code
|
8
|
+
|
9
|
+
Minor enhancements:
|
10
|
+
* Ensured profile updates with the updated release info passed thru task to Configurator
|
11
|
+
* Refactored and standardized the following metadata for worker task:
|
12
|
+
* :name, :full_name, :version:, :major_version, :patch_level
|
13
|
+
* Created correponding instance methods with proper prefix for worker classes:
|
14
|
+
* Worker::Base with prefix "target_"
|
15
|
+
* Package::Worker with prefix "package_"
|
16
|
+
* Service::Worker with prefix "service_"
|
17
|
+
* Application::Worker with prefix "application_"
|
18
|
+
* Updated binstubs after source code deployment in case any new bins are deployed
|
19
|
+
* Made task dispatcher method as protected
|
20
|
+
* Removed two unnecessary parameters: :log_format and :log_level
|
21
|
+
* Refactored method #default_templates_path in a DRY way
|
22
|
+
* Minor code cleanup
|
23
|
+
|
24
|
+
Bug fixes:
|
25
|
+
* Returned revision as nill if any unexpected errors occur during revision fetching for Git
|
26
|
+
* Do not create symlinks for linked_dirs when publishing application profile
|
27
|
+
* Fixed duplicate result output when output format is not blakchole
|
28
|
+
* Made task dispatcher methods as protected
|
29
|
+
|
30
|
+
## Version 0.5.5 (Jun 29, 2016)
|
4
31
|
|
5
32
|
Minor enhancements:
|
6
33
|
* Refactored app/service profile templates initialization
|
@@ -15,13 +42,15 @@ Minor enhancements:
|
|
15
42
|
|
16
43
|
## Version 0.5.1 (Jun 24, 2016)
|
17
44
|
|
18
|
-
|
45
|
+
New features:
|
19
46
|
* Added subcommands #init to initialize deployment application/service profiles
|
47
|
+
|
48
|
+
Minor enhancements:
|
20
49
|
* Added .gitignore file to the deployment project skeleton
|
21
50
|
|
22
51
|
## Version 0.5.0 (Jun 22, 2016)
|
23
52
|
|
24
|
-
|
53
|
+
New features:
|
25
54
|
* Added a series of subcommands, #init to
|
26
55
|
* Initialize a Luban deployment project
|
27
56
|
* Initialize a Luban deployment application
|
data/README.md
CHANGED
@@ -30,7 +30,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
30
30
|
|
31
31
|
## Contributing
|
32
32
|
|
33
|
-
1. Fork it ( https://github.com/
|
33
|
+
1. Fork it ( https://github.com/lubanrb/luban/fork )
|
34
34
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
35
35
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
36
36
|
4. Push to the branch (`git push origin my-new-feature`)
|
@@ -69,60 +69,87 @@ module Luban
|
|
69
69
|
opts[:roles] << scm_role unless scm_role.nil?
|
70
70
|
promptless_authen!(args: args, opts: opts)
|
71
71
|
end
|
72
|
+
dispatch_task :public_key!, to: :authenticator, as: :public_key, locally: true
|
73
|
+
dispatch_task :promptless_authen!, to: :authenticator, as: :promptless_authen
|
72
74
|
|
73
75
|
def setup(args:, opts:)
|
74
76
|
show_app_environment
|
75
77
|
promptless_authen(args: args, opts: opts)
|
76
78
|
setup!(args: args, opts: opts)
|
77
79
|
end
|
80
|
+
dispatch_task :setup!, to: :constructor, as: :setup
|
78
81
|
|
79
82
|
def build(args:, opts:)
|
80
83
|
show_app_environment
|
81
|
-
install_all(args: args, opts: opts)
|
84
|
+
install_all!(args: args, opts: opts)
|
82
85
|
build_repositories(args: args, opts: opts)
|
83
86
|
end
|
84
87
|
|
85
88
|
def destroy(args:, opts:)
|
86
|
-
uninstall_all(args: args, opts: opts)
|
89
|
+
uninstall_all!(args: args, opts: opts)
|
87
90
|
destroy!(args: args, opts: opts)
|
88
91
|
end
|
89
92
|
|
93
|
+
def destroy_project(args:, opts:)
|
94
|
+
show_app_environment
|
95
|
+
destroy!(args: args, opts: opts.merge(destroy_project: true))
|
96
|
+
end
|
97
|
+
dispatch_task :destroy!, to: :constructor, as: :destroy
|
98
|
+
|
90
99
|
%i(install_all uninstall_all).each do |action|
|
91
|
-
define_method(action) do |args:, opts:|
|
92
|
-
packages.each_value { |p| p.send(
|
100
|
+
define_method("#{action}!") do |args:, opts:|
|
101
|
+
packages.each_value { |p| p.send(action, args: args, opts: opts) }
|
93
102
|
end
|
103
|
+
protected "#{action}!"
|
94
104
|
end
|
95
105
|
|
96
|
-
(Luban::Deployment::Command::Tasks::Install::Actions -
|
97
|
-
%i(setup build destroy)).each do |action|
|
106
|
+
(Luban::Deployment::Command::Tasks::Install::Actions - %i(setup build destroy)).each do |action|
|
98
107
|
define_method(action) do |args:, opts:|
|
99
108
|
show_app_environment
|
100
|
-
|
109
|
+
send("#{action}!", args: args, opts: opts)
|
101
110
|
end
|
102
|
-
end
|
103
111
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
112
|
+
define_method("#{action}!") do |args:, opts:|
|
113
|
+
packages.each_value { |p| p.send(action, args: args, opts: opts) }
|
114
|
+
end
|
115
|
+
protected "#{action}!"
|
108
116
|
end
|
109
117
|
|
110
|
-
|
111
|
-
|
112
|
-
|
118
|
+
alias_method :cleanup_packages!, :cleanup!
|
119
|
+
def cleanup!(args:, opts:)
|
120
|
+
cleanup_packages!(args: args, opts: opts)
|
121
|
+
cleanup_application!(args: args, opts: opts)
|
113
122
|
end
|
123
|
+
protected :cleanup!
|
124
|
+
dispatch_task :cleanup_application!, to: :constructor, as: :cleanup
|
114
125
|
|
115
126
|
def deploy(args:, opts:)
|
116
127
|
show_app_environment
|
128
|
+
if has_source?
|
129
|
+
release = deploy_release(args: args, opts: opts)
|
130
|
+
opts = opts.merge(release: release)
|
131
|
+
end
|
117
132
|
deploy_profile(args: args, opts: opts) if has_profile?
|
118
|
-
deploy_release(args: args, opts: opts) if has_source?
|
119
133
|
end
|
120
134
|
|
121
135
|
Luban::Deployment::Command::Tasks::Control::Actions.each do |action|
|
122
136
|
define_method(action) do |args:, opts:|
|
123
137
|
show_app_environment
|
124
|
-
|
138
|
+
send("#{action}!", args: args, opts: opts)
|
139
|
+
end
|
140
|
+
|
141
|
+
define_method("#{action}!") do |args:, opts:|
|
142
|
+
send("application_#{action}!", args: args, opts: opts) if has_source?
|
143
|
+
send("service_#{action}!", args: args, opts: opts)
|
144
|
+
end
|
145
|
+
protected "#{action}!"
|
146
|
+
|
147
|
+
dispatch_task "application_#{action}!", to: :controller, as: action
|
148
|
+
|
149
|
+
define_method("service_#{action}!") do |args:, opts:|
|
150
|
+
services.each_value { |s| s.send(action, args: args, opts: opts) }
|
125
151
|
end
|
152
|
+
protected "service_#{action}!"
|
126
153
|
end
|
127
154
|
|
128
155
|
def init_profiles(args:, opts:)
|
@@ -136,6 +163,7 @@ module Luban
|
|
136
163
|
init_profile!(args: args, opts: opts.merge(default_templates: default_templates))
|
137
164
|
end
|
138
165
|
end
|
166
|
+
dispatch_task :init_profile!, to: :configurator, as: :init_profile, locally: true
|
139
167
|
|
140
168
|
def init_service_profiles(args:, opts:)
|
141
169
|
return if opts[:app]
|
@@ -171,6 +199,11 @@ module Luban
|
|
171
199
|
set_default_profile
|
172
200
|
end
|
173
201
|
|
202
|
+
def set_default_application_parameters
|
203
|
+
super
|
204
|
+
linked_dirs.push('log', 'pids')
|
205
|
+
end
|
206
|
+
|
174
207
|
def set_default_profile
|
175
208
|
if config_finder[:application].has_profile?
|
176
209
|
profile(config_finder[:application].stage_profile_path, scm: :rsync)
|
@@ -204,7 +237,7 @@ module Luban
|
|
204
237
|
end
|
205
238
|
|
206
239
|
def compose_task_options(opts)
|
207
|
-
super.merge(name:
|
240
|
+
super.merge(name: name.to_s, packages: packages).tap do |o|
|
208
241
|
o.merge!(version: source_version) if has_source?
|
209
242
|
end
|
210
243
|
end
|
@@ -213,14 +246,11 @@ module Luban
|
|
213
246
|
puts "#{display_name} in #{parent.class.name}"
|
214
247
|
end
|
215
248
|
|
216
|
-
%i(setup destroy cleanup).each do |task|
|
217
|
-
dispatch_task "#{task}!", to: :constructor, as: task
|
218
|
-
end
|
219
|
-
|
220
249
|
def build_repositories(args:, opts:)
|
221
250
|
build_repository!(args: args, opts: opts.merge(repository: profile)) if has_profile?
|
222
251
|
build_repository!(args: args, opts: opts.merge(repository: source)) if has_source?
|
223
252
|
end
|
253
|
+
dispatch_task :build_repository!, to: :repository, as: :build, locally: true
|
224
254
|
|
225
255
|
def deploy_profile(args:, opts:)
|
226
256
|
update_profile(args: args, opts: opts)
|
@@ -231,9 +261,12 @@ module Luban
|
|
231
261
|
update_profile!(args: args, opts: opts)
|
232
262
|
services.each_value { |s| s.send(:update_profile, args: args, opts: opts) }
|
233
263
|
end
|
264
|
+
dispatch_task :update_profile!, to: :configurator, as: :update_profile, locally: true
|
234
265
|
|
235
266
|
def deploy_release(args:, opts:)
|
236
|
-
deploy_release!(args: args, opts: opts.merge(repository: source))
|
267
|
+
deploy_release!(args: args, opts: opts.merge(repository: source)).tap do
|
268
|
+
binstubs!(args: args, opts: opts)
|
269
|
+
end
|
237
270
|
end
|
238
271
|
|
239
272
|
def deploy_release!(args:, opts:)
|
@@ -244,12 +277,6 @@ module Luban
|
|
244
277
|
end
|
245
278
|
end
|
246
279
|
alias_method :deploy_profile!, :deploy_release!
|
247
|
-
|
248
|
-
dispatch_task :promptless_authen!, to: :authenticator, as: :promptless_authen
|
249
|
-
dispatch_task :public_key!, to: :authenticator, as: :public_key, locally: true
|
250
|
-
dispatch_task :init_profile!, to: :configurator, as: :init_profile, locally: true
|
251
|
-
dispatch_task :update_profile!, to: :configurator, as: :update_profile, locally: true
|
252
|
-
dispatch_task :build_repository!, to: :repository, as: :build, locally: true
|
253
280
|
dispatch_task :package_release!, to: :repository, as: :package, locally: true
|
254
281
|
dispatch_task :publish_release!, to: :publisher, as: :publish
|
255
282
|
end
|
@@ -3,6 +3,13 @@ module Luban
|
|
3
3
|
class Application
|
4
4
|
class Configurator < Worker
|
5
5
|
include Luban::Deployment::Service::Configurator::Base
|
6
|
+
|
7
|
+
def release_type; task.opts.release[:type]; end
|
8
|
+
def release_tag; task.opts.release[:tag]; end
|
9
|
+
|
10
|
+
def release_path
|
11
|
+
@release_path ||= releases_path.join(release_type, release_tag)
|
12
|
+
end
|
6
13
|
end
|
7
14
|
end
|
8
15
|
end
|
@@ -43,11 +43,11 @@ module Luban
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def bundle_path
|
46
|
-
@bundle_path ||= shared_path.join('vendor'
|
46
|
+
@bundle_path ||= shared_path.join('vendor', 'bundle')
|
47
47
|
end
|
48
48
|
|
49
49
|
def gems_cache_path
|
50
|
-
@gems_cache_path ||= shared_path.join('vendor'
|
50
|
+
@gems_cache_path ||= shared_path.join('vendor', 'cache')
|
51
51
|
end
|
52
52
|
|
53
53
|
def bundle_without
|
@@ -118,7 +118,6 @@ module Luban
|
|
118
118
|
|
119
119
|
def create_symlinks
|
120
120
|
send("create_#{release_type}_symlinks")
|
121
|
-
create_shared_symlinks_for(:directory, linked_dirs)
|
122
121
|
create_shared_symlinks_for(:directory, bundle_linked_dirs) if file?(gemfile)
|
123
122
|
end
|
124
123
|
|
@@ -129,7 +128,7 @@ module Luban
|
|
129
128
|
|
130
129
|
def create_app_symlinks
|
131
130
|
create_release_symlink(app_path)
|
132
|
-
create_shared_symlinks_for(:directory, %w(profile))
|
131
|
+
create_shared_symlinks_for(:directory, linked_dirs | %w(profile))
|
133
132
|
create_shared_symlinks_for(:file, linked_files)
|
134
133
|
end
|
135
134
|
|
@@ -23,11 +23,11 @@ module Luban
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def clone_path
|
26
|
-
@clone_path ||= workspace_path.join('repositories'
|
26
|
+
@clone_path ||= workspace_path.join('repositories', type)
|
27
27
|
end
|
28
28
|
|
29
29
|
def releases_path
|
30
|
-
@releases_path ||= workspace_path.join('releases'
|
30
|
+
@releases_path ||= workspace_path.join('releases', type)
|
31
31
|
end
|
32
32
|
|
33
33
|
def release_package_path
|
@@ -67,7 +67,7 @@ module Luban
|
|
67
67
|
# release: copy the contents of cloned repository onto the release path
|
68
68
|
[:available?, :cloned?, :fetch_revision, :clone, :update, :release].each do |method|
|
69
69
|
define_method(method) do
|
70
|
-
raise NotImplementedError, "
|
70
|
+
raise NotImplementedError, "#{self.class.name}##{__method__} is an abstract method."
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
@@ -75,12 +75,12 @@ module Luban
|
|
75
75
|
assure_dirs(clone_path, releases_path)
|
76
76
|
if cloned? and !force?
|
77
77
|
update_revision
|
78
|
-
update_result "Skipped! Local #{type} repository has been built ALREADY.", status: :skipped
|
78
|
+
update_result "Skipped! Local #{type} repository has been built ALREADY (#{revision}).", status: :skipped
|
79
79
|
else
|
80
80
|
if available?
|
81
81
|
if build!
|
82
82
|
update_revision
|
83
|
-
update_result "Successfully built local #{type} repository."
|
83
|
+
update_result "Successfully built local #{type} repository (#{revision})."
|
84
84
|
else
|
85
85
|
update_result "FAILED to build local #{type} repository!", status: :failed, level: :error
|
86
86
|
end
|
@@ -182,4 +182,4 @@ module Luban
|
|
182
182
|
end
|
183
183
|
end
|
184
184
|
end
|
185
|
-
end
|
185
|
+
end
|
@@ -22,7 +22,7 @@ module Luban
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def fetch_revision
|
25
|
-
within(clone_path) { capture(git_cmd, "rev-parse --short=#{rev_size} #{ref}") }
|
25
|
+
within(clone_path) { capture(git_cmd, "rev-parse --short=#{rev_size} #{ref} 2>/dev/null") }
|
26
26
|
#within(clone_path) { capture(git_cmd, "rev-list --max-count=1 --abbrev-commit --abbrev=rev_size #{ref}") }
|
27
27
|
end
|
28
28
|
|
@@ -5,16 +5,21 @@ module Luban
|
|
5
5
|
include Luban::Deployment::Worker::Paths::Remote
|
6
6
|
include Luban::Deployment::Service::Worker::Base
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
%i(name full_name version major_version patch_level).each do |method|
|
9
|
+
define_method("application_#{method}") { send("target_#{method}") }
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
|
12
|
+
def packages; task.opts.packages; end
|
13
|
+
|
14
|
+
def package_version(package_name); packages[package_name.to_sym].current_version; end
|
15
|
+
|
16
|
+
def package_path(package_name)
|
17
|
+
@package_path ||= luban_install_path.join('pkg', package_name.to_s, 'versions',
|
18
|
+
package_version(package_name))
|
14
19
|
end
|
15
20
|
|
16
|
-
def
|
17
|
-
@
|
21
|
+
def package_bin_path(package_name)
|
22
|
+
@package_bin_path ||= package_path(package_name).join('bin')
|
18
23
|
end
|
19
24
|
end
|
20
25
|
end
|
@@ -177,6 +177,8 @@ module Luban
|
|
177
177
|
run_task(cmd: as, args: args, opts: opts, locally: locally,
|
178
178
|
worker_class: self.class.worker_class(to), &blk)
|
179
179
|
end
|
180
|
+
|
181
|
+
protected task
|
180
182
|
end
|
181
183
|
end
|
182
184
|
|
@@ -204,11 +206,15 @@ module Luban
|
|
204
206
|
end
|
205
207
|
mutex.synchronize { result << r }
|
206
208
|
end
|
207
|
-
print_task_result
|
209
|
+
print_task_result(result) if opts[:format] == :blackhole
|
208
210
|
locally ? result.first[:__return__] : result
|
209
211
|
end
|
210
212
|
|
211
|
-
def default_templates_path
|
213
|
+
def default_templates_path(base_path = nil)
|
214
|
+
return @default_templates_path if base_path.nil?
|
215
|
+
path = Pathname.new(base_path).dirname.join('templates')
|
216
|
+
@default_templates_path ||= path.exist? ? path.realpath : nil
|
217
|
+
end
|
212
218
|
|
213
219
|
def default_templates
|
214
220
|
default_templates_path.nil? ? [] : default_templates_path.children
|
@@ -316,7 +322,7 @@ module Luban
|
|
316
322
|
def compose_task_options(opts); opts.clone; end
|
317
323
|
|
318
324
|
def run(roles: luban_roles, hosts: nil, once: false,
|
319
|
-
dry_run: false, format
|
325
|
+
dry_run: false, format:, verbosity:, **opts)
|
320
326
|
configure_backend(dry_run: dry_run, format: format, verbosity: verbosity)
|
321
327
|
hosts = Array(hosts)
|
322
328
|
servers = select_servers(roles, hosts)
|
@@ -49,7 +49,7 @@ module Luban
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def install_log_path
|
52
|
-
@install_log_path ||= package_path.join('log'
|
52
|
+
@install_log_path ||= package_path.join('log', package_full_name)
|
53
53
|
end
|
54
54
|
|
55
55
|
def install_log_file_path
|
@@ -62,4 +62,4 @@ module Luban
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
65
|
-
end
|
65
|
+
end
|
@@ -26,12 +26,9 @@ module Luban
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
def package_version; task.opts.version; end
|
33
|
-
def package_major_version; task.opts.major_version; end
|
34
|
-
def package_patch_level; task.opts.patch_level; end
|
29
|
+
%i(name full_name version major_version patch_level).each do |method|
|
30
|
+
define_method("package_#{method}") { send("target_#{method}") }
|
31
|
+
end
|
35
32
|
|
36
33
|
def parent; task.opts.parent; end
|
37
34
|
def child?; !parent.nil?; end
|
@@ -34,8 +34,7 @@ module Luban
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def monitor_executable
|
37
|
-
@monitor_executable ||= env_path.join("#{stage}.#{process_monitor[:env]}")
|
38
|
-
join('bin').join(process_monitor[:name])
|
37
|
+
@monitor_executable ||= env_path.join("#{stage}.#{process_monitor[:env]}", 'bin', process_monitor[:name])
|
39
38
|
end
|
40
39
|
|
41
40
|
def monitor_command
|
@@ -174,11 +173,11 @@ module Luban
|
|
174
173
|
|
175
174
|
def check_process!
|
176
175
|
if pid_file_missing?
|
177
|
-
"#{service_full_name}: started but PID file
|
176
|
+
"#{service_full_name}: started but PID file(s) do NOT exist in #{pids_path}"
|
178
177
|
elsif process_started?
|
179
|
-
"#{service_full_name}: started (
|
178
|
+
"#{service_full_name}: started - PID(s) #{pid})"
|
180
179
|
elsif pid_file_orphaned?
|
181
|
-
"#{service_full_name}: stopped but PID file
|
180
|
+
"#{service_full_name}: stopped but PID file(s) exist in #{pids_path}"
|
182
181
|
else
|
183
182
|
"#{service_full_name}: stopped"
|
184
183
|
end
|
@@ -209,6 +208,37 @@ module Luban
|
|
209
208
|
end
|
210
209
|
end
|
211
210
|
|
211
|
+
module Cluster
|
212
|
+
def pid_file_pattern
|
213
|
+
raise NotImplementedError, "#{self.class.name}#pid_file_pattern is an abstract method."
|
214
|
+
end
|
215
|
+
|
216
|
+
def pid_files_path
|
217
|
+
pids_path.join(pid_file_pattern)
|
218
|
+
end
|
219
|
+
|
220
|
+
def pid_files
|
221
|
+
capture(:ls, "-A #{pid_files_path} 2>/dev/null").split.map do |f|
|
222
|
+
Pathname.new(f)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
def pids
|
227
|
+
pid_files.collect { |pid_file| capture(:cat, "#{pid_file} 2>/dev/null") }
|
228
|
+
end
|
229
|
+
|
230
|
+
def pid; pids; end
|
231
|
+
|
232
|
+
def pid_file_exists?
|
233
|
+
# Any pid file is NOT zero size
|
234
|
+
pid_files.any? { |pid_file| file?(pid_file, "-s") }
|
235
|
+
end
|
236
|
+
|
237
|
+
def remove_orphaned_pid_file
|
238
|
+
rm(pid_files_path) if pid_file_orphaned?
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
212
242
|
include Base
|
213
243
|
end
|
214
244
|
end
|
@@ -3,16 +3,8 @@ module Luban
|
|
3
3
|
module Service
|
4
4
|
class Worker < Luban::Deployment::Package::Worker
|
5
5
|
module Base
|
6
|
-
|
7
|
-
|
8
|
-
end
|
9
|
-
|
10
|
-
def service_version
|
11
|
-
@service_version ||= package_version
|
12
|
-
end
|
13
|
-
|
14
|
-
def service_full_name
|
15
|
-
@service_full_name ||= package_full_name
|
6
|
+
%i(name full_name version major_version patch_level).each do |method|
|
7
|
+
define_method("service_#{method}") { send("target_#{method}") }
|
16
8
|
end
|
17
9
|
|
18
10
|
def service_entry
|
@@ -20,7 +12,7 @@ module Luban
|
|
20
12
|
end
|
21
13
|
|
22
14
|
def profile_path
|
23
|
-
@profile_path ||= shared_path.join('profile'
|
15
|
+
@profile_path ||= shared_path.join('profile', service_name)
|
24
16
|
end
|
25
17
|
|
26
18
|
def log_path
|
@@ -45,7 +45,7 @@ module Luban
|
|
45
45
|
|
46
46
|
def skeletons_path
|
47
47
|
@skeletons_path ||=
|
48
|
-
Pathname.new(__FILE__).dirname.join('..'
|
48
|
+
Pathname.new(__FILE__).dirname.join('..', 'templates').realpath
|
49
49
|
end
|
50
50
|
|
51
51
|
def copy_dir(src_path, dst_path, stages: [], depth: 1)
|
@@ -123,12 +123,12 @@ module Luban
|
|
123
123
|
@application_target_path ||= apps_path.join(application)
|
124
124
|
end
|
125
125
|
|
126
|
-
def
|
126
|
+
def application_class_name
|
127
127
|
"#{project}:#{application}".camelcase
|
128
128
|
end
|
129
129
|
|
130
130
|
def create_application_skeleton
|
131
|
-
puts "Creating skeleton for #{stage} application #{
|
131
|
+
puts "Creating skeleton for #{stage} application #{application_class_name}"
|
132
132
|
copy_dir(application_skeleton_path, application_target_path, stages: [stage])
|
133
133
|
end
|
134
134
|
end
|
@@ -67,8 +67,6 @@ module Luban
|
|
67
67
|
parameter :sshkit_backend
|
68
68
|
parameter :authen_key_type
|
69
69
|
parameter :default_env
|
70
|
-
parameter :log_format
|
71
|
-
parameter :log_level
|
72
70
|
parameter :pty
|
73
71
|
parameter :connection_timeout
|
74
72
|
parameter :ssh_options
|
@@ -81,8 +79,6 @@ module Luban
|
|
81
79
|
set_default :sshkit_backend, SSHKit::Backend::Netssh
|
82
80
|
set_default :authen_key_type, 'rsa'
|
83
81
|
set_default :default_env, { path: '$PATH:/usr/local/bin' }
|
84
|
-
set_default :log_format, :pretty
|
85
|
-
set_default :log_level, :info
|
86
82
|
set_default :pty, false
|
87
83
|
set_default :connection_timeout, 30 # second
|
88
84
|
set_default :ssh_options, {}
|
@@ -1 +1 @@
|
|
1
|
-
# Deployment configuration for application <%=
|
1
|
+
# Deployment configuration for application <%= application_class_name %>
|
@@ -29,6 +29,13 @@ module Luban
|
|
29
29
|
@env_name ||= "#{stage}.#{project}/#{application}"
|
30
30
|
end
|
31
31
|
|
32
|
+
def target_name; task.opts.name; end
|
33
|
+
def target_full_name; "#{target_name}-#{target_version}"; end
|
34
|
+
|
35
|
+
def target_version; task.opts.version; end
|
36
|
+
def target_major_version; task.opts.major_version || target_version; end
|
37
|
+
def target_patch_level; task.opts.patch_level || ''; end
|
38
|
+
|
32
39
|
def run
|
33
40
|
update_result(__return__: @run_blk ? run_with_block : run_with_command).to_h
|
34
41
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: luban
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rubyist Lei
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: luban-cli
|