omf_rc 6.0.4.pre.1 → 6.0.4
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 +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
|