omf_rc 6.0.4.pre.1 → 6.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/bin/omf_rc +195 -126
- data/lib/omf_rc/resource_proxy/application.rb +6 -10
- data/lib/omf_rc/version.rb +1 -1
- data/omf_rc.gemspec +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
Y2E5YTUyM2U4OWQzYjk2Y2RlMTBlMDZiOGJmYmY5ZTg3MTY0ZTJiOQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MGQ2YmY4ZTY1NTM3ZjQyNjNhZjU0NTVmYjc4YzM4ZmVhNTlmNzg4Zg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZDEyM2VmZDViZDRkOTM0ZTZhYjY2YmQ2OGNmMGY1MzgzZDEwZjMzMjZiNTYy
|
10
|
+
MmRiMzY4ZmIxMmIxZTU5MGNkMDlkNDVlOTY2ZjRkODcyMTNjMzFmYmM4NmU2
|
11
|
+
YmI2YjhlNGMxYmEzOTdjYTg2MmJiYjg3ZTg3ZTkzYmU2ODc5NmY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MDQ3ZmEyMTlkNDhhMGI4NTRkY2IyY2UyZGYxNTIwOTU0ZmU0Mjk3M2E5NjA4
|
14
|
+
NTQxNTNiYjhlNmMxZGFjZTc1ODdkNTkxZTk0MWZkMTQ5MzRkMDQ3YzljMTk1
|
15
|
+
OGMwOTcwOGQxZjgyNTc4NDJjODIxMmVkZWY4ZWMzOWM3ZDA0Y2Q=
|
data/bin/omf_rc
CHANGED
@@ -2,150 +2,219 @@
|
|
2
2
|
|
3
3
|
abort "Please use Ruby 1.9.3 or higher" if RUBY_VERSION < "1.9.3"
|
4
4
|
|
5
|
+
# The following is to work around a bug in activesupport triggered by
|
6
|
+
# the JWT library which is used only in the AMQP transport, os it
|
7
|
+
# fails quietly if that library is not installed in XMPP deployments
|
8
|
+
begin; require 'json/jwt'; rescue Exception; end
|
9
|
+
|
5
10
|
require 'optparse'
|
6
|
-
require 'erb'
|
7
11
|
require 'socket'
|
8
12
|
|
9
13
|
require 'omf_rc'
|
10
14
|
require 'omf_rc/resource_factory'
|
11
15
|
|
12
16
|
$stdout.sync = true
|
13
|
-
options = {}
|
14
|
-
executable_name = File.basename($PROGRAM_NAME)
|
15
|
-
oml_enabled = false
|
16
|
-
gem_version = Gem::Specification.find_by_name('omf_rc').version.to_s
|
17
|
-
|
18
|
-
begin
|
19
|
-
oml_enabled = OML4R::init(ARGV, appName: executable_name) do |opts|
|
20
|
-
opts.banner = "OMF Resource Controller version '#{gem_version}'\n"
|
21
|
-
opts.banner += "Usage: #{executable_name} [options]"
|
22
|
-
|
23
|
-
opts.on("-c CONFIGFILE", "Configuration File") do |file|
|
24
|
-
options[:configfile] = file
|
25
|
-
end
|
26
17
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
18
|
+
#
|
19
|
+
# Class to start an OMF RC. The configuration parameters can be set
|
20
|
+
# in decreasing priority through the command line, configuration
|
21
|
+
# file and default settings (see @def_opts).
|
22
|
+
#
|
23
|
+
# For historic reasons and to make this implementation more interesting
|
24
|
+
# there are two different config file formats. A 'normal' one inherited from
|
25
|
+
# earlier version of OMF, and an 'advanced' one which is identical to the
|
26
|
+
# format accepted by OmfCommon.init(). To maintain some level of sanity,
|
27
|
+
# only one configuration file is accepted.
|
28
|
+
#
|
29
|
+
# Having said that, there is one exception and that relates to the 'oml'
|
30
|
+
# configuration which is stripped out first and handed to the OML4R library
|
31
|
+
# during command line parsing.
|
32
|
+
#
|
33
|
+
class OmfRcRunner
|
34
|
+
def initialize()
|
35
|
+
@options = {}
|
36
|
+
@executable_name = File.basename($PROGRAM_NAME)
|
37
|
+
@oml_enabled = false
|
38
|
+
@gem_version = Gem::Specification.find_by_name('omf_rc').version.to_s
|
39
|
+
|
40
|
+
@node_id = Socket.gethostname
|
41
|
+
|
42
|
+
@def_opts = {
|
43
|
+
uid: @node_id,
|
44
|
+
uri: "xmpp:#{@node_id}-#{Process.pid}:#{@node_id}-#{Process.pid}@localhost",
|
45
|
+
environment: 'production',
|
46
|
+
debug: false
|
47
|
+
}
|
48
|
+
@copts = {}
|
49
|
+
|
50
|
+
@gopts = {
|
51
|
+
config_file: nil,
|
52
|
+
adv_config_file: nil,
|
53
|
+
logging_configfile: nil,
|
54
|
+
environment: nil
|
55
|
+
}
|
56
|
+
|
57
|
+
@opts = {}
|
58
|
+
@omlopts = {appName: @executable_name}
|
59
|
+
end
|
60
|
+
|
61
|
+
def run()
|
62
|
+
setup()
|
63
|
+
OmfCommon::Measure.enable if @oml_enabled
|
64
|
+
|
65
|
+
OmfCommon.init(@gopts[:environment], @opts) do |el|
|
66
|
+
# Load a customised logging set up if provided
|
67
|
+
OmfCommon.load_logging_config(@gopts[:logging_configfile]) if @gopts[:logging_configfile]
|
68
|
+
|
69
|
+
info "Starting OMF Resource Controller version '#{@gem_version}'"
|
70
|
+
|
71
|
+
#el.on_int_signal do # Implementation missing
|
72
|
+
Signal.trap("SIGINT") do
|
73
|
+
# TODO: Should release resources first
|
74
|
+
info "Stopping ..."
|
75
|
+
el.stop
|
76
|
+
end
|
77
|
+
|
78
|
+
# Load extensions
|
79
|
+
if @opts[:add_default_factories] != false
|
80
|
+
OmfRc::ResourceFactory.load_default_resource_proxies
|
81
|
+
end
|
82
|
+
|
83
|
+
@opts[:factories].each do |f|
|
84
|
+
if (req = f[:require])
|
85
|
+
begin
|
86
|
+
info "Try to load resource module '#{req}'"
|
87
|
+
require(req)
|
88
|
+
rescue LoadError => e
|
89
|
+
error e.message
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
OmfCommon.comm.on_connected do |comm|
|
95
|
+
info "Connected using #{comm.conn_info}"
|
96
|
+
|
97
|
+
#if @opts[:auth] && @optss[:auth][:root_cert_dir]
|
98
|
+
# OmfCommon::Auth::CertificateStore.instance.register_default_certs(@opts[:auth][:root_cert_dir])
|
99
|
+
#end
|
100
|
+
#OmfCommon::Auth::CertificateStore.instance.register(entity) if entity
|
101
|
+
|
102
|
+
@opts[:resources].each do |res_opts|
|
103
|
+
rtype = res_opts.delete(:type)
|
104
|
+
res_creation_opts = res_opts.delete(:creation_opts)
|
105
|
+
res_creation_opts ||= res_opts.delete(:create_opts)
|
106
|
+
res_creation_opts ||= {}
|
107
|
+
#res_opts[:certificate] = entity if entity
|
108
|
+
begin
|
109
|
+
OmfRc::ResourceFactory.create(rtype, res_opts, res_creation_opts)
|
110
|
+
rescue => e
|
111
|
+
error "#{e.message}\n#{e.backtrace.join("\n")}"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
33
116
|
end
|
34
|
-
|
35
|
-
|
36
|
-
|
117
|
+
info "Stopping OMF Resource Controller version '#{@gem_version}'"
|
118
|
+
end
|
119
|
+
|
120
|
+
def setup()
|
121
|
+
oml_init() # calls parse_config_files()
|
122
|
+
unless @opts[:communication][:url]
|
123
|
+
puts "Error: Missing parameters to connect to a PubSub Server (see --help)"
|
124
|
+
exit(1)
|
37
125
|
end
|
38
|
-
|
39
|
-
opts
|
40
|
-
|
126
|
+
|
127
|
+
opts = @opts
|
128
|
+
# TODO: This needs to be fixed
|
129
|
+
if opts[:auth]
|
130
|
+
if File.exist?(opts[:auth][:entity_cert]) && File.exist?(opts[:auth][:entity_key])
|
131
|
+
entity = OmfCommon::Auth::Certificate.create_from_x509(File.read(opts[:auth][:entity_cert]),
|
132
|
+
File.read(opts[:auth][:entity_key]))
|
133
|
+
end
|
41
134
|
end
|
42
|
-
|
43
|
-
|
44
|
-
|
135
|
+
opts[:communication][:auth] = {} if entity
|
136
|
+
end
|
137
|
+
|
138
|
+
def parse_config_files()
|
139
|
+
@opts = {communication: {}, resources: [], factories: [], add_default_factories: true}
|
140
|
+
config_file = @gopts[:config_file]
|
141
|
+
adv_config_file = @gopts[:adv_config_file]
|
142
|
+
if config_file && adv_config_file
|
143
|
+
puts "To avoid any unexpected surprises, you should stick to one form of config file"
|
144
|
+
exit(1)
|
45
145
|
end
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
146
|
+
|
147
|
+
if config_file
|
148
|
+
cfg_opts = OmfCommon.load_yaml(config_file, symbolize_keys: true, erb_process: true)
|
149
|
+
copts = @def_opts.merge(cfg_opts.merge(@copts))
|
150
|
+
@opts[:communication][:url] = copts[:uri]
|
151
|
+
@opts[:resources] = copts[:resources] || [{ type: :node, uid: copts[:uid] }]
|
152
|
+
@opts[:factories] = copts[:factories] if copts[:factories]
|
153
|
+
if copts[:add_default_factories] == false
|
154
|
+
@opts[:add_default_factories] = false
|
155
|
+
end
|
156
|
+
@gopts[:environment] ||= copts[:environment]
|
157
|
+
@omlopts.merge(copts[:oml] || {}) {|k, v1, v2| v1 } # merge in place as OML may hold @omlopts
|
50
158
|
end
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
159
|
+
|
160
|
+
if adv_config_file
|
161
|
+
aopts = OmfCommon.load_yaml(adv_config_file, symbolize_keys: true, erb_process: true)
|
162
|
+
aenv = aopts.delete(:environment)
|
163
|
+
@gopts[:environment] ||= @copts[:environment] || aenv || @def_opts[:environment]
|
164
|
+
@opts.merge!(aopts)
|
165
|
+
# need to do a merge! to update the hash passed into OML.init already
|
166
|
+
@omlopts.merge!(@opts.delete(:oml) || {}) {|k, v1, v2| v1 || v2 } # merge in place as OML may hold @omlopts
|
55
167
|
end
|
56
168
|
end
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
end
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
end
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
end
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
File.read(options[:auth][:entity_key]))
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
common_options[:communication][:auth] = {} if entity
|
102
|
-
|
103
|
-
OmfCommon.init(options[:environment].to_sym, common_options) do |el|
|
104
|
-
# Load a customised logging set up if provided
|
105
|
-
OmfCommon.load_logging_config(options[:logging_configfile])
|
106
|
-
|
107
|
-
# Load extensions
|
108
|
-
if options[:add_default_factories] != false
|
109
|
-
OmfRc::ResourceFactory.load_default_resource_proxies
|
110
|
-
end
|
111
|
-
|
112
|
-
if options[:factories]
|
113
|
-
options[:factories].each do |f|
|
114
|
-
if (req = f[:require])
|
115
|
-
begin
|
116
|
-
info "Try to load resource module '#{req}'"
|
117
|
-
require(req)
|
118
|
-
rescue LoadError => e
|
119
|
-
error e.message
|
169
|
+
|
170
|
+
def oml_init
|
171
|
+
begin
|
172
|
+
@omlopts[:afterParse] = lambda {|o| parse_config_files() }
|
173
|
+
@oml_enabled = OML4R::init(ARGV, @omlopts) do |op|
|
174
|
+
op.banner = "OMF Resource Controller version '#{@gem_version}'\n"
|
175
|
+
op.banner += "Usage: #{@executable_name} [options]"
|
176
|
+
|
177
|
+
op.on("-c CONFIGFILE", "Configuration File") do |file|
|
178
|
+
@gopts[:config_file] = file
|
179
|
+
end
|
180
|
+
|
181
|
+
op.on("-a ADVANCED_CONFIGFILE", "Advanced Configuration File") do |file|
|
182
|
+
@gopts[:adv_config_file] = file
|
183
|
+
end
|
184
|
+
|
185
|
+
op.on("--log_config CONFIGFILE", "Logging Configuration File") do |file|
|
186
|
+
@gopts[:logging_configfile] = file
|
187
|
+
end
|
188
|
+
|
189
|
+
op.on("-u URI", "Communication URI [#{@def_opts[:uri]}") do |uri|
|
190
|
+
@copts[:uri] = uri
|
191
|
+
end
|
192
|
+
|
193
|
+
op.on("-e ENVIRONMENT", "Environment (development, production ...) [#{@def_opts[:environment]}]") do |e|
|
194
|
+
@gopts[:environment] = e
|
195
|
+
end
|
196
|
+
|
197
|
+
op.on("-i UID", "UID (and pubsub topic) of the resource, [#{@def_opts[:uid]}]") do |uid|
|
198
|
+
@copts[:uid] = uid
|
199
|
+
end
|
200
|
+
|
201
|
+
op.on("-v", "--version", "Show version") do
|
202
|
+
puts "OMF Resource Controller version '#{@gem_version}'"
|
203
|
+
exit
|
204
|
+
end
|
205
|
+
|
206
|
+
op.on("-h", "--help", "Show this message") do
|
207
|
+
puts opts
|
208
|
+
exit
|
120
209
|
end
|
121
210
|
end
|
211
|
+
rescue OML4R::MissingArgumentException => e
|
212
|
+
puts "Warning: #{e.message} to instrument this RC, so it will run without instrumentation. (see --oml-help)"
|
213
|
+
rescue => e
|
214
|
+
puts e.message
|
215
|
+
exit(1)
|
122
216
|
end
|
123
217
|
end
|
124
|
-
|
125
|
-
info "Starting OMF Resource Controller version '#{gem_version}'"
|
126
|
-
|
127
|
-
OmfCommon.comm.on_connected do |comm|
|
128
|
-
info "Connected using #{comm.conn_info}"
|
129
|
-
|
130
|
-
if options[:auth] && options[:auth][:root_cert_dir]
|
131
|
-
OmfCommon::Auth::CertificateStore.instance.register_default_certs(options[:auth][:root_cert_dir])
|
132
|
-
end
|
133
|
-
OmfCommon::Auth::CertificateStore.instance.register(entity) if entity
|
134
|
-
|
135
|
-
options[:resources].each do |res_opts|
|
136
|
-
rtype = res_opts.delete(:type)
|
137
|
-
res_creation_opts = res_opts.delete(:creation_opts)
|
138
|
-
res_creation_opts ||= res_opts.delete(:create_opts)
|
139
|
-
res_creation_opts ||= {}
|
140
|
-
res_opts[:certificate] = entity if entity
|
141
|
-
begin
|
142
|
-
OmfRc::ResourceFactory.create(rtype, res_opts, res_creation_opts)
|
143
|
-
rescue => e
|
144
|
-
error "#{e.message}\n#{e.backtrace.join("\n")}"
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
end
|
149
218
|
end
|
150
|
-
info "Stopping OMF Resource Controller version '#{gem_version}'"
|
151
219
|
|
220
|
+
OmfRcRunner.new().run()
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# By downloading or using this software you accept the terms and the liability disclaimer in the License.
|
5
5
|
|
6
6
|
# This module defines a Resource Proxy (RP) for an Application.
|
7
|
-
# For a detailed usage tutorial see {file:doc/
|
7
|
+
# For a detailed usage tutorial see {file:doc/DEVELOPERS.mkd Resource Proxy tutorial}
|
8
8
|
#
|
9
9
|
# Utility dependencies: platform_toos, common_tools
|
10
10
|
#
|
@@ -15,7 +15,7 @@
|
|
15
15
|
# - pkg_ubuntu (String) the name of the Ubuntu package for this app
|
16
16
|
# - pkg_fedora (String) the name of the Fedora package for this app
|
17
17
|
# - state (String) the state of this Application RP
|
18
|
-
# (stopped, running, paused, installed
|
18
|
+
# (stopped, running, paused, installed)
|
19
19
|
# - installed (Boolean) is this application installed? (default false)
|
20
20
|
# - force_tarball_install (Boolean) if true then force the installation
|
21
21
|
# from tarball even if other distribution-specific installation are
|
@@ -150,7 +150,7 @@ module OmfRc::ResourceProxy::Application
|
|
150
150
|
event_type.to_s.include?('EXIT') &&
|
151
151
|
msg == "0"
|
152
152
|
if event_type == 'EXIT'
|
153
|
-
res.property.state =
|
153
|
+
res.property.state = :stopped
|
154
154
|
res.inform(:status, {
|
155
155
|
status_type: 'APP_EVENT',
|
156
156
|
event: event_type.to_s.upcase,
|
@@ -249,10 +249,6 @@ module OmfRc::ResourceProxy::Application
|
|
249
249
|
# stopped, running, paused, installing. The semantic of each states are:
|
250
250
|
#
|
251
251
|
# - stopped: the initial state for an Application RP
|
252
|
-
# - completed: the final state for an application RP. When the application
|
253
|
-
# has been executed and its execution is finished, it enters this state.
|
254
|
-
# When the application is completed it cannot change state again
|
255
|
-
# TODO: maybe in future OMF, we could consider allowing an app to be reset?
|
256
252
|
# - running: upon entering in this state, a new instance of the application is
|
257
253
|
# started, the Application RP stays in this state until the
|
258
254
|
# application instance is finished or paused. The Application RP can
|
@@ -342,9 +338,9 @@ module OmfRc::ResourceProxy::Application
|
|
342
338
|
ExecApp[id].signal('TERM')
|
343
339
|
sleep 4
|
344
340
|
# finally, try sending KILL signal
|
345
|
-
ExecApp[id].
|
341
|
+
ExecApp[id].signal('KILL') unless ExecApp[id].nil?
|
346
342
|
end
|
347
|
-
res.property.state = :
|
343
|
+
res.property.state = :stopped
|
348
344
|
rescue => err
|
349
345
|
end
|
350
346
|
end
|
@@ -376,7 +372,7 @@ module OmfRc::ResourceProxy::Application
|
|
376
372
|
res.property.state = :running
|
377
373
|
# do more things here...
|
378
374
|
else
|
379
|
-
# cannot run as we are still installing
|
375
|
+
# cannot run as we are still installing
|
380
376
|
res.log_inform_warn "Cannot switch to running state as current state is '#{res.property.state}'"
|
381
377
|
end
|
382
378
|
end
|
data/lib/omf_rc/version.rb
CHANGED
data/omf_rc.gemspec
CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.add_development_dependency "em-minitest-spec", "~> 1.1.1"
|
26
26
|
s.add_development_dependency "pry"
|
27
27
|
s.add_development_dependency "simplecov"
|
28
|
-
s.add_runtime_dependency "omf_common", "~> 6.0.4
|
28
|
+
s.add_runtime_dependency "omf_common", "~> 6.0.4"
|
29
29
|
s.add_runtime_dependency "cocaine", "~> 0.3.0"
|
30
30
|
s.add_runtime_dependency "mocha"
|
31
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omf_rc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.4
|
4
|
+
version: 6.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- NICTA
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-09-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 6.0.4
|
75
|
+
version: 6.0.4
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 6.0.4
|
82
|
+
version: 6.0.4
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: cocaine
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -199,9 +199,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
199
199
|
version: 1.9.3
|
200
200
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
201
201
|
requirements:
|
202
|
-
- - ! '
|
202
|
+
- - ! '>='
|
203
203
|
- !ruby/object:Gem::Version
|
204
|
-
version:
|
204
|
+
version: '0'
|
205
205
|
requirements: []
|
206
206
|
rubyforge_project: omf_rc
|
207
207
|
rubygems_version: 2.0.7
|