sfpagent 0.4.6 → 0.4.7
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sfpagent might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/VERSION +1 -1
- data/lib/sfpagent/agent.rb +6 -5
- data/lib/sfpagent/bsig.rb +34 -23
- metadata +27 -20
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 756db80c9a4995bba51be6402b3ed1589d4dc48a
|
4
|
+
data.tar.gz: a723b67ba8d1f649f8c4c2c01c9682581721970e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0db50466b23803da4ee8a613d0c506d85c0866715831d54eb6375ad4d794ab69a253060aa0ceb66348204598a9b0a0a741680dd2ba6daee3a4b4fb6216ad276f
|
7
|
+
data.tar.gz: 404edcde4d8942123e912ac130d6a015a7a3317a5c565ed074732979a5bc9f13e6ff6994d09c083239e342cac0a7db38601592daf3eb3d22d1b5530d91544455
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.7
|
data/lib/sfpagent/agent.rb
CHANGED
@@ -603,11 +603,12 @@ module Sfp
|
|
603
603
|
agents = (json == '' ? {} : JSON[json])
|
604
604
|
current_hash = agents.hash
|
605
605
|
|
606
|
-
data.each { |k,v|
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
}
|
606
|
+
#data.each { |k,v|
|
607
|
+
# if !agents.has_key?(k) or v.nil? or agents[k].hash != v.hash
|
608
|
+
# agents[k] = v
|
609
|
+
# end
|
610
|
+
#}
|
611
|
+
agents.merge!(data)
|
611
612
|
agents.keys.each { |k| agents.delete(k) if agents[k].nil? }
|
612
613
|
|
613
614
|
if current_hash != agents.hash
|
data/lib/sfpagent/bsig.rb
CHANGED
@@ -17,7 +17,6 @@ class Sfp::BSig
|
|
17
17
|
@enabled = false
|
18
18
|
@status = :stopped
|
19
19
|
@lock_postprocess = Mutex.new
|
20
|
-
@locked_operators = []
|
21
20
|
end
|
22
21
|
|
23
22
|
def stop
|
@@ -32,21 +31,26 @@ class Sfp::BSig
|
|
32
31
|
}
|
33
32
|
|
34
33
|
Thread.new {
|
35
|
-
|
34
|
+
begin
|
35
|
+
register_satisfier_thread(:reset)
|
36
36
|
|
37
|
-
|
38
|
-
|
37
|
+
system("rm -f #{Home}/operator.*.lock")
|
38
|
+
system("rm -f #{Home}/bsig.satisfier.lock.*")
|
39
39
|
|
40
|
-
|
40
|
+
Sfp::Agent.logger.info "[main] BSig engine is running."
|
41
41
|
|
42
|
-
|
43
|
-
|
42
|
+
puts "BSig Engine is running with PID #{$$}"
|
43
|
+
File.open(Sfp::Agent::BSigPIDFile, 'w') { |f| f.write($$.to_s) }
|
44
44
|
|
45
|
-
|
45
|
+
self.execute_model
|
46
46
|
|
47
|
-
|
48
|
-
|
47
|
+
File.delete(SatisfierLockFile) if File.exist?(SatisfierLockFile)
|
48
|
+
Sfp::Agent.logger.info "[main] BSig engine has stopped."
|
49
49
|
|
50
|
+
rescue Exception => exp
|
51
|
+
Sfp::Agent.logger.error "Cannot start BSig engine => #{exp}\n#{exp.backtrace.join("\n")}"
|
52
|
+
end
|
53
|
+
|
50
54
|
@status = :stopped
|
51
55
|
}
|
52
56
|
end
|
@@ -154,8 +158,13 @@ class Sfp::BSig
|
|
154
158
|
lock = Mutex.new
|
155
159
|
operators.each do |operator|
|
156
160
|
Thread.new {
|
157
|
-
|
158
|
-
|
161
|
+
begin
|
162
|
+
stat = execute_operator(operator, id, operators, mode)
|
163
|
+
Sfp::Agent.logger.info "[#{mode}] Execute_operator: #{operator['name']}#{JSON.generate(operator['parameters'])} => #{stat}"
|
164
|
+
rescue Exception => exp
|
165
|
+
stat = :failure
|
166
|
+
Sfp::Agent.logger.error "[#{mode}] Execute_operator: #{operator['name']}#{JSON.generate(operator['parameters'])} => #{stat} - #{exp}\n#{exp.backtrace.join("\n")}"
|
167
|
+
end
|
159
168
|
lock.synchronize { status << stat }
|
160
169
|
}
|
161
170
|
end
|
@@ -229,8 +238,13 @@ class Sfp::BSig
|
|
229
238
|
agents_goal = split_goal_by_agent(goal)
|
230
239
|
agents_goal.each do |agent_name,agent_goal|
|
231
240
|
Thread.new {
|
232
|
-
|
233
|
-
|
241
|
+
begin
|
242
|
+
stat = achieve_remote_agent_goal(agents, agent_name, agent_goal, id, pi, mode)
|
243
|
+
Sfp::Agent.logger.info "[#{mode}] remote goal => #{agent_name}: #{agent_goal.inspect} - #{stat}"
|
244
|
+
rescue Exception => exp
|
245
|
+
stat = false
|
246
|
+
Sfp::Agent.logger.error "[#{mode}] remote goal => #{agent_name}: #{agent_goal.inspect} - #{stat} - #{exp}\n#{exp.backtrace.join("\n")}"
|
247
|
+
end
|
234
248
|
lock.synchronize { status << stat }
|
235
249
|
}
|
236
250
|
end
|
@@ -321,7 +335,6 @@ class Sfp::BSig
|
|
321
335
|
operator_lock_file = "#{Home}/operator.#{operator['id']}.#{operator['name']}.lock"
|
322
336
|
return false if File.exist?(operator_lock_file)
|
323
337
|
File.open(operator_lock_file, 'w') { |f| f.write('1') }
|
324
|
-
@locked_operators << operator
|
325
338
|
return true
|
326
339
|
}
|
327
340
|
end
|
@@ -335,7 +348,6 @@ class Sfp::BSig
|
|
335
348
|
@lock.synchronize {
|
336
349
|
operator_lock_file = "#{Home}/operator.#{operator['id']}.#{operator['name']}.lock"
|
337
350
|
File.delete(operator_lock_file) if File.exist?(operator_lock_file)
|
338
|
-
@lock_operators.delete(operator)
|
339
351
|
}
|
340
352
|
end
|
341
353
|
|
@@ -376,7 +388,7 @@ class Sfp::BSig
|
|
376
388
|
ref = "#{cloud_ref}.vms"
|
377
389
|
vms = state.at?(ref)
|
378
390
|
vms.each { |name,status| vms[name] = {'created' => true} } if vms.is_a?(Hash)
|
379
|
-
}
|
391
|
+
} if Sfp::Agent.runtime
|
380
392
|
if not vms.has_key?(agent_name)
|
381
393
|
state = {agent_name => {'created' => false, 'in_cloud' => nil}}
|
382
394
|
goal.each { |var,val| return false if state.at?(var) != val }
|
@@ -402,7 +414,7 @@ class Sfp::BSig
|
|
402
414
|
'sfpPort' => Sfp::Agent::DefaultPort }
|
403
415
|
}
|
404
416
|
end
|
405
|
-
}
|
417
|
+
} if Sfp::Agent.runtime
|
406
418
|
|
407
419
|
state
|
408
420
|
end
|
@@ -441,9 +453,8 @@ class Sfp::BSig
|
|
441
453
|
repaired = {}
|
442
454
|
operators.each do |op|
|
443
455
|
next if op['pi'] < pi
|
444
|
-
if can_repair?(op, flaws) and
|
445
|
-
not
|
446
|
-
not threat?(op, @locked_operators) # does the operator threat locked (being executed) operators?
|
456
|
+
if can_repair?(op, flaws) and # can the operator repair the flaws?
|
457
|
+
not threat_operators?(op, selected_operators) # does the operator threat other selected operators?
|
447
458
|
selected_operators << op
|
448
459
|
op['effect'].each { |var,val| repaired[var] = val if flaws[var] == val }
|
449
460
|
end
|
@@ -536,7 +547,7 @@ class Sfp::BSig
|
|
536
547
|
|
537
548
|
def postprocess_delete_vm(operator)
|
538
549
|
@lock_postprocess.synchronize {
|
539
|
-
_, agent_name, _ = operator['
|
550
|
+
_, agent_name, _ = operator['parameters']['$.vm'].split('.', 3)
|
540
551
|
|
541
552
|
Sfp::Agent.logger.info "Postprocess delete VM #{agent_name}"
|
542
553
|
|
@@ -611,7 +622,7 @@ class Sfp::BSig
|
|
611
622
|
modules = JSON[body]
|
612
623
|
list = ''
|
613
624
|
schemata.each { |m|
|
614
|
-
list += "#{m} " if
|
625
|
+
list += "#{m} " if File.exist?("#{modules_dir}/#{m}") and
|
615
626
|
(not modules.has_key?(m) or modules[m] != get_local_module_hash(m, modules_dir).to_s)
|
616
627
|
}
|
617
628
|
|
metadata
CHANGED
@@ -1,49 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sfpagent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
5
|
-
prerelease:
|
4
|
+
version: 0.4.7
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Herry
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-12-09 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: sfp
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 0.3.17
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.3.17
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: net-ssh
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
|
-
- -
|
31
|
+
- - '>='
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: '0'
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
36
41
|
- !ruby/object:Gem::Dependency
|
37
42
|
name: rake
|
38
|
-
requirement:
|
39
|
-
none: false
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
40
44
|
requirements:
|
41
|
-
- -
|
45
|
+
- - '>='
|
42
46
|
- !ruby/object:Gem::Version
|
43
47
|
version: '0'
|
44
48
|
type: :development
|
45
49
|
prerelease: false
|
46
|
-
version_requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
47
55
|
description: A Ruby implementation of SFP agent.
|
48
56
|
email: herry13@gmail.com
|
49
57
|
executables:
|
@@ -76,26 +84,25 @@ files:
|
|
76
84
|
homepage: https://github.com/herry13/sfpagent
|
77
85
|
licenses:
|
78
86
|
- BSD
|
87
|
+
metadata: {}
|
79
88
|
post_install_message:
|
80
89
|
rdoc_options: []
|
81
90
|
require_paths:
|
82
91
|
- lib
|
83
92
|
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
-
none: false
|
85
93
|
requirements:
|
86
|
-
- -
|
94
|
+
- - '>='
|
87
95
|
- !ruby/object:Gem::Version
|
88
96
|
version: '0'
|
89
97
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
98
|
requirements:
|
92
|
-
- -
|
99
|
+
- - '>='
|
93
100
|
- !ruby/object:Gem::Version
|
94
101
|
version: '0'
|
95
102
|
requirements: []
|
96
103
|
rubyforge_project: sfpagent
|
97
|
-
rubygems_version:
|
104
|
+
rubygems_version: 2.0.14
|
98
105
|
signing_key:
|
99
|
-
specification_version:
|
106
|
+
specification_version: 4
|
100
107
|
summary: SFP Agent
|
101
108
|
test_files: []
|