luban 0.9.9 → 0.9.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/lib/luban/deployment/cli/application/base.rb +22 -16
- data/lib/luban/deployment/cli/command.rb +6 -2
- data/lib/luban/deployment/cli/package/installer/install.rb +1 -1
- data/lib/luban/deployment/cli/project.rb +3 -9
- data/lib/luban/deployment/cli/service/base.rb +27 -10
- data/lib/luban/deployment/configuration/core.rb +5 -1
- data/lib/luban/deployment/helpers/configuration.rb +1 -1
- data/lib/luban/deployment/helpers/utils.rb +3 -3
- data/lib/luban/deployment/parameters.rb +33 -57
- data/lib/luban/deployment/version.rb +1 -1
- data/lib/luban/deployment/worker/base.rb +9 -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: 9d25dda1f3728164c6c4dbba1cbfffc26748f9ce
|
4
|
+
data.tar.gz: 2967b210dc597d9293418e9005f90f705fe4e380
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 812bbd83cc2575d2908fd1241274d069ecb60386fe1f46f07084c604fc3aede2a56d517e20e6497551358cbbc0f1ce2798bd2e0a897cac92b2a744a9f2f02e48
|
7
|
+
data.tar.gz: 7bd9bb1d13b426ac1d997d5a2c9f1c3138a2114854ccf24539623bacfc346b988db89dd949d39a391e86b09aed604498fe7a3c32e4f71b9631a64e8910a8471e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
+
## Version 0.9.10 (Oct 24, 2016)
|
4
|
+
|
5
|
+
Minor enhancements:
|
6
|
+
* Refactored and enhanced the design and implementation of parameters in a deployment project
|
7
|
+
* Supported default value for a given parameter
|
8
|
+
* set method for default value should be in the form of "set_default_for_parameter_name"
|
9
|
+
* any methods following the above convention will be called during default value setup
|
10
|
+
* Supported parameter validation by convention
|
11
|
+
* validation method name should be in the form of "validate_for_parameter_name"
|
12
|
+
* any methods following the above convention will be called during parameter validation
|
13
|
+
* Injected parameters from service package, if any, into the application
|
14
|
+
* Automated default source handling and thus no more manual set_default_source
|
15
|
+
* Two default source paths under application base path and stage config path
|
16
|
+
|
17
|
+
|
18
|
+
Bug fixes:
|
19
|
+
* Ensured linked dirs to be created in package installer
|
20
|
+
|
3
21
|
## Version 0.9.9 (Oct 20, 2016)
|
4
22
|
|
5
23
|
Bug fixes:
|
@@ -80,7 +80,10 @@ module Luban
|
|
80
80
|
command(name, base: Luban::Deployment::Package::Base.package_class(name))
|
81
81
|
end
|
82
82
|
pkg.update_package_options(version, opts.merge(packages: packages))
|
83
|
-
|
83
|
+
if pkg.is_a?(Luban::Deployment::Service::Base)
|
84
|
+
services[name] = pkg
|
85
|
+
add_service_parameters(pkg)
|
86
|
+
end
|
84
87
|
packages[name] = pkg
|
85
88
|
end
|
86
89
|
alias_method :require_package, :package
|
@@ -110,7 +113,11 @@ module Luban
|
|
110
113
|
end
|
111
114
|
|
112
115
|
def default_source_path
|
113
|
-
@default_source_path ||=
|
116
|
+
@default_source_path ||=
|
117
|
+
[config_finder[:application].stage_config_path.join('app'),
|
118
|
+
config_finder[:application].base_path.join('app')].find do |source_path|
|
119
|
+
File.directory?(source_path)
|
120
|
+
end
|
114
121
|
end
|
115
122
|
|
116
123
|
def default_source?
|
@@ -275,26 +282,19 @@ module Luban
|
|
275
282
|
@profile_opts = {}
|
276
283
|
end
|
277
284
|
|
278
|
-
def validate_parameters
|
279
|
-
super
|
280
|
-
validate_project_parameters
|
281
|
-
validate_application_parameters
|
282
|
-
end
|
283
|
-
|
284
285
|
def set_default_parameters
|
286
|
+
set :application, self.class.name.split(':').last.snakecase
|
285
287
|
super
|
286
|
-
set_default_project_parameters
|
287
|
-
set_default :application, self.class.name.split(':').last.snakecase
|
288
|
-
set_default_application_parameters
|
289
|
-
set_default_profile
|
290
288
|
end
|
291
289
|
|
292
|
-
def
|
293
|
-
|
294
|
-
|
290
|
+
def set_default_for_source
|
291
|
+
unless default_source_path.nil?
|
292
|
+
source(default_source_path, scm: :rsync)
|
293
|
+
release(stage, current: true)
|
294
|
+
end
|
295
295
|
end
|
296
296
|
|
297
|
-
def
|
297
|
+
def set_default_for_profile
|
298
298
|
if config_finder[:application].has_profile?
|
299
299
|
profile(config_finder[:application].stage_profile_path, scm: :rsync)
|
300
300
|
profile_release(stage, current: true)
|
@@ -317,6 +317,12 @@ module Luban
|
|
317
317
|
setup_crontab_tasks
|
318
318
|
end
|
319
319
|
|
320
|
+
def add_service_parameters(service)
|
321
|
+
service.class.parameters.each_pair do |param, default|
|
322
|
+
singleton_class.send(:parameter, param, default: default)
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
320
326
|
def setup_init_profiles
|
321
327
|
_services = services.keys
|
322
328
|
task :init do
|
@@ -365,13 +365,17 @@ module Luban
|
|
365
365
|
end
|
366
366
|
|
367
367
|
def set_default_parameters
|
368
|
-
|
368
|
+
find_instance_methods(/^set_default_for_/).each { |m| send(m) }
|
369
|
+
end
|
370
|
+
|
371
|
+
def find_instance_methods(pattern)
|
372
|
+
singleton_class.instance_methods.select { |m| m.to_s =~ pattern }.reverse
|
369
373
|
end
|
370
374
|
|
371
375
|
def load_configuration; end
|
372
376
|
|
373
377
|
def validate_parameters
|
374
|
-
|
378
|
+
find_instance_methods(/^validate_for_/).each { |m| send(m) }
|
375
379
|
end
|
376
380
|
|
377
381
|
def load_libraries; end
|
@@ -98,18 +98,12 @@ module Luban
|
|
98
98
|
|
99
99
|
protected
|
100
100
|
|
101
|
-
def validate_parameters
|
102
|
-
super
|
103
|
-
validate_project_parameters
|
104
|
-
end
|
105
|
-
|
106
101
|
def set_default_parameters
|
107
|
-
|
108
|
-
|
109
|
-
set_default :project, self.class.name.split('::').last.snakecase
|
110
|
-
set_default_project_parameters
|
102
|
+
set :stage, self.class.name.split('::').first.snakecase
|
103
|
+
set :project, self.class.name.split('::').last.snakecase
|
111
104
|
@passwords = {}
|
112
105
|
@passwords_mutex = Mutex.new
|
106
|
+
super
|
113
107
|
end
|
114
108
|
|
115
109
|
def load_libraries
|
@@ -5,17 +5,34 @@ module Luban
|
|
5
5
|
include Luban::Deployment::Command::Tasks::Control
|
6
6
|
include Luban::Deployment::Command::Tasks::Monitor
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
class << self
|
9
|
+
def inherited(subclass)
|
10
|
+
super
|
11
|
+
# Ensure parameters from base class
|
12
|
+
# got inherited to its subclasses
|
13
|
+
params = instance_variable_get('@parameters')
|
14
|
+
subclass.instance_variable_set('@parameters', params.nil? ? {} : params.clone)
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_reader :parameters
|
18
|
+
|
19
|
+
def parameter(param, default: nil)
|
20
|
+
super
|
21
|
+
parameters[param] = default
|
15
22
|
end
|
16
|
-
|
17
|
-
|
18
|
-
|
23
|
+
|
24
|
+
def service_action(action, dispatch_to: nil, as: action, locally: false, &blk)
|
25
|
+
define_method(action) do |args:, opts:|
|
26
|
+
if current_version
|
27
|
+
send("#{__method__}!", args: args, opts: opts.merge(version: current_version))
|
28
|
+
else
|
29
|
+
abort "Aborted! No current version of #{display_name} is specified."
|
30
|
+
end
|
31
|
+
end
|
32
|
+
unless dispatch_to.nil?
|
33
|
+
dispatch_task "#{action}!", to: dispatch_to, as: as, locally: locally, &blk
|
34
|
+
protected "#{action}!"
|
35
|
+
end
|
19
36
|
end
|
20
37
|
end
|
21
38
|
|
@@ -14,7 +14,7 @@ module Luban
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def set_default(key, value)
|
17
|
-
set(key, value)
|
17
|
+
set(key, value) if @variables[key].nil?
|
18
18
|
end
|
19
19
|
|
20
20
|
def delete(key)
|
@@ -37,6 +37,10 @@ module Luban
|
|
37
37
|
@variables.keys
|
38
38
|
end
|
39
39
|
|
40
|
+
def has_key?(key)
|
41
|
+
@variables.has_key?(key)
|
42
|
+
end
|
43
|
+
|
40
44
|
def role(name, hosts, **properties)
|
41
45
|
if name == :all
|
42
46
|
raise ArgumentError, 'Reserved role name, :all, is NOT allowed to use.'
|
@@ -157,7 +157,6 @@ module Luban
|
|
157
157
|
end
|
158
158
|
|
159
159
|
def load_stage_configuration
|
160
|
-
target.load_configuration_file(stage_config_file)
|
161
160
|
if File.directory?(stage_config_path)
|
162
161
|
["*.rb", "{packages}/**/*.rb"].each do |pattern|
|
163
162
|
Dir[stage_config_path.join(pattern)].each do |file|
|
@@ -165,6 +164,7 @@ module Luban
|
|
165
164
|
end
|
166
165
|
end
|
167
166
|
end
|
167
|
+
target.load_configuration_file(stage_config_file)
|
168
168
|
end
|
169
169
|
|
170
170
|
def find_template_file(file_name)
|
@@ -194,9 +194,9 @@ module Luban
|
|
194
194
|
Time.now().strftime("%d/%m/%Y %H:%M:%S")
|
195
195
|
end
|
196
196
|
|
197
|
-
def method_missing(sym, *args, &blk)
|
198
|
-
|
199
|
-
end
|
197
|
+
#def method_missing(sym, *args, &blk)
|
198
|
+
# backend.respond_to?(sym) ? backend.send(sym, *args, &blk) : super
|
199
|
+
#end
|
200
200
|
end
|
201
201
|
end
|
202
202
|
end
|
@@ -2,12 +2,12 @@ module Luban
|
|
2
2
|
module Deployment
|
3
3
|
module Parameters
|
4
4
|
module Base
|
5
|
-
def parameter(
|
6
|
-
|
7
|
-
|
8
|
-
value.nil? ? fetch(__method__) : set(__method__, value)
|
9
|
-
end
|
5
|
+
def parameter(param, default: nil)
|
6
|
+
define_method(param) do |value = nil|
|
7
|
+
value.nil? ? fetch(__method__) : set(__method__, value)
|
10
8
|
end
|
9
|
+
define_method("set_default_for_#{param}") { set_default param, default }
|
10
|
+
protected "set_default_for_#{param}"
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -20,37 +20,35 @@ module Luban
|
|
20
20
|
mod.extend(Base)
|
21
21
|
end
|
22
22
|
|
23
|
-
parameter :luban_roles
|
24
|
-
parameter :luban_root_path
|
23
|
+
parameter :luban_roles, default: %i(app)
|
24
|
+
parameter :luban_root_path, default: DefaultLubanRootPath
|
25
25
|
|
26
26
|
parameter :stages
|
27
27
|
parameter :applications
|
28
|
-
parameter :env_vars
|
28
|
+
parameter :env_vars, default: ->{ Hash.new }
|
29
29
|
|
30
30
|
parameter :work_dir
|
31
31
|
parameter :apps_path
|
32
32
|
parameter :project
|
33
|
-
parameter :user
|
34
|
-
parameter :config_finder
|
33
|
+
parameter :user, default: ENV['USER']
|
34
|
+
parameter :config_finder, default: ->{ Hash.new }
|
35
35
|
|
36
36
|
protected
|
37
37
|
|
38
|
-
def
|
39
|
-
set_default :luban_roles, %i(app)
|
40
|
-
set_default :luban_root_path, DefaultLubanRootPath
|
41
|
-
set_default :env_vars, {}
|
42
|
-
set_default :user, ENV['USER']
|
43
|
-
set_default :config_finder, {}
|
44
|
-
end
|
45
|
-
|
46
|
-
def validate_general_parameters
|
38
|
+
def validate_for_user
|
47
39
|
if user != ENV['USER']
|
48
40
|
abort "Aborted! Given deployment user (#{user.inspect}) is NOT the current user #{ENV['USER'].inspect}" +
|
49
41
|
"Please switch to the deployment user before any deployments."
|
50
42
|
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def validate_for_project
|
51
46
|
if project.nil?
|
52
47
|
abort "Aborted! Please specify the project name: project 'project name'"
|
53
48
|
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def validate_for_luban_root_path
|
54
52
|
if luban_root_path.is_a?(String)
|
55
53
|
luban_root_path Pathname.new(luban_root_path)
|
56
54
|
end
|
@@ -65,14 +63,14 @@ module Luban
|
|
65
63
|
|
66
64
|
parameter :stage
|
67
65
|
|
68
|
-
parameter :process_monitor
|
69
|
-
parameter :sshkit_backend
|
70
|
-
parameter :authen_key_type
|
71
|
-
parameter :default_env
|
72
|
-
parameter :pty
|
73
|
-
parameter :connection_timeout
|
74
|
-
parameter :ssh_options
|
75
|
-
parameter :use_sudo
|
66
|
+
parameter :process_monitor, default: ->{ Hash.new }
|
67
|
+
parameter :sshkit_backend, default: SSHKit::Backend::Netssh
|
68
|
+
parameter :authen_key_type, default: 'rsa'
|
69
|
+
parameter :default_env, default: ->{ { path: '$PATH:/usr/local/bin' } }
|
70
|
+
parameter :pty, default: false
|
71
|
+
parameter :connection_timeout, default: 30 # second
|
72
|
+
parameter :ssh_options, default: ->{ Hash.new }
|
73
|
+
parameter :use_sudo, default: false # Turn off sudo by default
|
76
74
|
|
77
75
|
def process_monitor_via(monitor, env: "uber/lubmon")
|
78
76
|
monitor = monitor.to_s.downcase
|
@@ -84,25 +82,12 @@ module Luban
|
|
84
82
|
|
85
83
|
protected
|
86
84
|
|
87
|
-
def
|
88
|
-
set_default :process_monitor, {}
|
89
|
-
set_default :sshkit_backend, SSHKit::Backend::Netssh
|
90
|
-
set_default :authen_key_type, 'rsa'
|
91
|
-
set_default :default_env, { path: '$PATH:/usr/local/bin' }
|
92
|
-
set_default :pty, false
|
93
|
-
set_default :connection_timeout, 30 # second
|
94
|
-
set_default :ssh_options, {}
|
95
|
-
set_default :use_sudo, false # Turn off sudo by default
|
96
|
-
|
97
|
-
setup_default_project_config_finder
|
98
|
-
end
|
99
|
-
|
100
|
-
def setup_default_project_config_finder
|
85
|
+
def set_default_for_project_config_finder
|
101
86
|
config_finder[:project] ||=
|
102
87
|
Luban::Deployment::Helpers::Configuration::Finder.project(self)
|
103
88
|
end
|
104
89
|
|
105
|
-
def
|
90
|
+
def validate_for_process_monitor
|
106
91
|
if monitor_defined?
|
107
92
|
if process_monitor[:name].nil?
|
108
93
|
abort "Aborted! Please specify the process monitor."
|
@@ -121,10 +106,10 @@ module Luban
|
|
121
106
|
DefaultLogrotateInterval = 10 # mins
|
122
107
|
|
123
108
|
parameter :application
|
124
|
-
parameter :scm_role
|
125
|
-
parameter :archive_role
|
126
|
-
parameter :logrotate_max_age
|
127
|
-
parameter :logrotate_interval
|
109
|
+
parameter :scm_role, default: :scm
|
110
|
+
parameter :archive_role, default: :archive
|
111
|
+
parameter :logrotate_max_age, default: DefaultLogrotateMaxAge
|
112
|
+
parameter :logrotate_interval, default: (ENV['LUBAN_LOGROTATE_INTERVAL'] || DefaultLogrotateInterval).to_i
|
128
113
|
|
129
114
|
def env_name
|
130
115
|
@env_name ||= "#{stage}.#{project}/#{application}"
|
@@ -144,21 +129,12 @@ module Luban
|
|
144
129
|
|
145
130
|
protected
|
146
131
|
|
147
|
-
def
|
148
|
-
set_default :scm_role, :scm
|
149
|
-
set_default :archive_role, :archive
|
150
|
-
set_default :logrotate_max_age, DefaultLogrotateMaxAge
|
151
|
-
set_default :logrotate_interval,
|
152
|
-
(ENV['LUBAN_LOGROTATE_INTERVAL'] || DefaultLogrotateInterval).to_i
|
153
|
-
setup_default_application_config_finder
|
154
|
-
end
|
155
|
-
|
156
|
-
def setup_default_application_config_finder
|
132
|
+
def set_default_for_application_config_finder
|
157
133
|
config_finder[:application] ||=
|
158
134
|
Luban::Deployment::Helpers::Configuration::Finder.application(self)
|
159
135
|
end
|
160
136
|
|
161
|
-
def
|
137
|
+
def validate_for_application
|
162
138
|
if application.nil?
|
163
139
|
abort "Aborted! Please specify the application name - application 'app name'"
|
164
140
|
end
|
@@ -38,6 +38,15 @@ module Luban
|
|
38
38
|
update_result(__return__: @run_blk ? run_with_block : run_with_command).to_h
|
39
39
|
end
|
40
40
|
|
41
|
+
def method_missing(sym, *args, &blk)
|
42
|
+
if args.empty? and blk.nil? and config.has_key?(sym)
|
43
|
+
singleton_class.send(:define_method, sym) { config.fetch(__method__) }
|
44
|
+
send(sym)
|
45
|
+
else
|
46
|
+
super
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
41
50
|
protected
|
42
51
|
|
43
52
|
def create_task(task)
|
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.9.
|
4
|
+
version: 0.9.10
|
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-10-
|
11
|
+
date: 2016-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: luban-cli
|