cloud66_agent 0.0.1.pre6 → 0.0.1.pre7
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.
- data/bin/cloud66_agent +46 -61
- data/lib/cloud66_agent/commands/address.rb +1 -1
- data/lib/cloud66_agent/commands/configure.rb +6 -6
- data/lib/cloud66_agent/commands/job_end.rb +6 -6
- data/lib/cloud66_agent/commands/job_start.rb +2 -2
- data/lib/cloud66_agent/commands/pulse.rb +1 -1
- data/lib/cloud66_agent/commands/vitals.rb +1 -1
- data/lib/cloud66_agent/utils/config.rb +17 -38
- data/lib/cloud66_agent/utils/server.rb +6 -6
- data/lib/cloud66_agent/utils/version.rb +1 -1
- data/lib/cloud66_agent/utils/vital_signs.rb +1 -12
- data/lib/cloud66_agent.rb +7 -12
- metadata +1 -1
data/bin/cloud66_agent
CHANGED
@@ -8,82 +8,67 @@ require 'cloud66_agent'
|
|
8
8
|
# global config variable
|
9
9
|
$config = Cloud66::Utils::Config.new
|
10
10
|
|
11
|
+
# deal with global options
|
11
12
|
OptionParser.new do |opts|
|
12
|
-
opts.banner = "Cloud 66 Agent v#{Cloud66::Utils::Version.current}"
|
13
|
+
opts.banner = "Cloud 66 Agent v#{Cloud66::Utils::Version.current} (#{$config.is_agent_configured? ? 'Configured' : 'Not Configured'})"
|
14
|
+
opts.on('--version', 'Agent version', '-v') { |v| puts "Cloud 66 Agent v#{Cloud66::Utils::Version.current} (#{$config.is_agent_configured? ? 'Configured' : 'Not Configured'})"; exit 0 }
|
15
|
+
opts.on('--log [LOG]', 'Log output') { |v| $config.log = (v == "STDOUT") ? STDOUT : v }
|
16
|
+
opts.on('--log-level [LOG_LEVEL]', 'Log level (int)') { |v| $config.log_level = v.to_i }
|
17
|
+
end.order!
|
13
18
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
$config.api_key = v
|
23
|
-
end
|
24
|
-
opts.on('--secret-key SECRETKEY', 'Secret Key') do |v|
|
25
|
-
$config.secret_key = v
|
26
|
-
end
|
27
|
-
opts.on('--server SERVERUID', 'Server id') do |v|
|
28
|
-
@server_uid = v
|
29
|
-
end
|
30
|
-
|
31
|
-
# respond to version requests
|
32
|
-
opts.on('--version') do |v|
|
33
|
-
puts "Cloud 66 Agent #{Cloud66::Utils::Version.current}"
|
34
|
-
exit 0
|
35
|
-
end
|
36
|
-
|
37
|
-
# logging configuration
|
38
|
-
opts.on('--log LOG', 'Log file path') do |v|
|
39
|
-
v == "STDOUT" ? $config.log_path = STDOUT : $config.log_path = v
|
40
|
-
end
|
41
|
-
opts.on('--log_level LOGLEVEL', 'Log level (int)') do |v|
|
42
|
-
$config.log_level = v.to_i
|
43
|
-
end
|
44
|
-
end.parse!
|
45
|
-
|
46
|
-
#pick up the command used
|
47
|
-
command = ARGV[0].downcase unless ARGV[0].nil?
|
19
|
+
command = ARGV.shift
|
20
|
+
# ensure we have a command
|
21
|
+
if command.nil?
|
22
|
+
puts "Cloud 66 Agent v#{Cloud66::Utils::Version.current} (#{$config.is_agent_configured? ? 'Configured' : 'Not Configured'})"
|
23
|
+
exit 0
|
24
|
+
else
|
25
|
+
command = command.downcase
|
26
|
+
end
|
48
27
|
|
49
28
|
# prepare the global logger (can't have stdout logging for job_start command - as the stdout result is used)
|
50
|
-
$config.
|
51
|
-
$logger = Logger.new($config.
|
29
|
+
$config.log = "/var/log/cloud66_agent.log" if command == 'job_start' && $config.log == STDOUT
|
30
|
+
$logger = Logger.new($config.log)
|
52
31
|
$logger.level = $config.log_level
|
53
32
|
|
33
|
+
# nothing allowed while disabled
|
54
34
|
if $config.disabled
|
55
|
-
# no other commands allowed while disabled
|
56
35
|
$logger.error "This agent had been disabled. Please contact Cloud 66 if you think this is in error"
|
57
|
-
exit
|
58
|
-
|
59
|
-
|
60
|
-
if command.nil? || command.empty?
|
61
|
-
$logger.debug("Cloud 66 Agent v#{Cloud66::Utils::Version.current} (#{$config.is_agent_configured? ? 'Configured' : 'Not Configured'})")
|
62
|
-
exit 0
|
63
|
-
end
|
64
|
-
|
65
|
-
if !$config.is_agent_configured? && command != 'configure'
|
36
|
+
exit 86
|
37
|
+
elsif !$config.is_agent_configured? && command != 'configure'
|
66
38
|
# no other commands allowed while not configured
|
67
39
|
$logger.error "Can only do command \"configure\" (until its been configured!)"
|
68
40
|
exit -1
|
69
41
|
end
|
70
42
|
|
71
43
|
# handle commands
|
72
|
-
$logger.info "
|
73
|
-
if command ==
|
74
|
-
|
44
|
+
$logger.info "Attempting: \"#{command}\""
|
45
|
+
if command == 'configure'
|
46
|
+
OptionParser.new do |opts|
|
47
|
+
opts.on('--api-url [URL]', 'API URL') { |v| $config.api_url = v }
|
48
|
+
opts.on('--api-key API_KEY', 'API key') { |v| $config.api_key = v }
|
49
|
+
opts.on('--secret-key SECRET_KEY', 'Secret key') { |v| $config.secret_key = v }
|
50
|
+
opts.on('--server-uid SERVER_UID', 'Server UID') { |v| @server_uid = v }
|
51
|
+
end.order!
|
52
|
+
Cloud66Agent.configure(@server_uid)
|
53
|
+
elsif command == 'job_start'
|
54
|
+
OptionParser.new do |opts|
|
55
|
+
opts.on('--job-uid JOB_UID', 'Job UID') { |v| @job_uid = v }
|
56
|
+
end.order!
|
57
|
+
Cloud66Agent.job_start(@job_uid)
|
58
|
+
elsif command == 'job_end'
|
59
|
+
OptionParser.new do |opts|
|
60
|
+
opts.on('--job-uid JOB_UID', 'Job UID') { |v| @job_uid = v }
|
61
|
+
opts.on('--run-uid RUN_UID', 'Run UID') { |v| @run_uid = v }
|
62
|
+
opts.on('--run-status RUN_STATUS', 'Status') { |v| @run_status = v }
|
63
|
+
opts.on('--run-time RUN_TIME', 'Execution time') { |v| @run_time = v }
|
64
|
+
opts.on('--results-file RESULTS_FILE', 'Results file') { |v| @results_file = v }
|
65
|
+
end.order!
|
66
|
+
Cloud66Agent.job_end(@job_uid, @run_uid, @run_status, @run_time, @results_file)
|
75
67
|
else
|
76
68
|
begin
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
else
|
81
|
-
Cloud66Agent.send(command, arguments)
|
82
|
-
end
|
83
|
-
rescue ArgumentError
|
84
|
-
$logger.error "Invalid command/arguments: #{command} #{arguments}"
|
69
|
+
Cloud66Agent.send command
|
70
|
+
rescue
|
71
|
+
$logger.error "Invalid command: #{command}"
|
85
72
|
exit -1
|
86
73
|
end
|
87
|
-
end
|
88
|
-
exit 0
|
89
|
-
|
74
|
+
end
|
@@ -11,21 +11,21 @@ module Cloud66
|
|
11
11
|
data = {
|
12
12
|
:timezone => Time.new.zone,
|
13
13
|
:server_uid => server_uid,
|
14
|
-
:
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
14
|
+
:ext_ipv4 => address_info[:ext_ipv4],
|
15
|
+
:int_ipv4 => address_info[:int_ipv4],
|
16
|
+
:ext_ipv6 => address_info[:ext_ipv6],
|
17
|
+
:int_ipv6 => address_info[:int_ipv6],
|
18
18
|
:version => Utils::Version.current,
|
19
19
|
:system => Utils::VitalSigns.system_info }
|
20
20
|
rescue => exc
|
21
21
|
data = { error: exc.message }
|
22
22
|
end
|
23
23
|
result = Utils::Server.send_configure data
|
24
|
-
$config.agent_uid = result['
|
24
|
+
$config.agent_uid = result['agent_uid']
|
25
25
|
$config.save
|
26
26
|
exit 0
|
27
27
|
rescue => exc
|
28
|
-
$logger.error "
|
28
|
+
$logger.error "Command \"configure\" failed: #{exc.message}"
|
29
29
|
exit -1
|
30
30
|
end
|
31
31
|
|
@@ -3,17 +3,17 @@ require 'cloud66_agent/utils/server'
|
|
3
3
|
module Cloud66
|
4
4
|
module Commands
|
5
5
|
class JobEnd
|
6
|
-
def self.perform(
|
7
|
-
|
6
|
+
def self.perform(job_uid, run_uid, run_status, run_time, results_file)
|
7
|
+
run_data = File.exists?(results_file) ? IO.readlines(results_file) : []
|
8
8
|
data = {
|
9
|
-
|
10
|
-
|
9
|
+
run_uid: run_uid,
|
10
|
+
run_status: run_status,
|
11
11
|
run_time: run_time,
|
12
|
-
|
12
|
+
run_data: run_data
|
13
13
|
}
|
14
14
|
Utils::Server.send_job_end(job_uid, data)
|
15
15
|
rescue => exc
|
16
|
-
$logger.error "
|
16
|
+
$logger.error "Command \"job_end\" failed: #{exc.message}"
|
17
17
|
exit -1
|
18
18
|
ensure
|
19
19
|
# get rid of the old results
|
@@ -6,10 +6,10 @@ module Cloud66
|
|
6
6
|
def self.perform(job_uid)
|
7
7
|
result = Utils::Server.send_job_start job_uid
|
8
8
|
# this is the only time we need a response value from the client
|
9
|
-
puts result['
|
9
|
+
puts result['run_uid']
|
10
10
|
exit 0
|
11
11
|
rescue => exc
|
12
|
-
$logger.error "
|
12
|
+
$logger.error "Command \"job_start\" failed: #{exc.message}"
|
13
13
|
exit -1
|
14
14
|
end
|
15
15
|
end
|
@@ -5,24 +5,22 @@ module Cloud66
|
|
5
5
|
# default conf dir
|
6
6
|
CONFIG_PATH = "/etc/cloud66/cloud66_agent.yml"
|
7
7
|
|
8
|
-
attr_accessor :
|
9
|
-
:
|
8
|
+
attr_accessor :api_url,
|
9
|
+
:api_key,
|
10
10
|
:secret_key,
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
14
|
-
:
|
15
|
-
:disabled
|
11
|
+
:agent_uid,
|
12
|
+
:disabled,
|
13
|
+
:log,
|
14
|
+
:log_level
|
16
15
|
|
17
16
|
# load up the config at startup
|
18
17
|
def initialize
|
19
18
|
load if File.exists?(CONFIG_PATH)
|
20
19
|
|
21
20
|
# set defaults
|
22
|
-
@
|
21
|
+
@log = @log.nil? || @log.to_s.strip.empty? || @log == "STDOUT" ? STDOUT : @log
|
23
22
|
@log_level ||= 2
|
24
|
-
@
|
25
|
-
@faye_url ||= 'https://sockets.cloud66.com/push'
|
23
|
+
@api_url ||= 'https://api.cloud66.com'
|
26
24
|
@disabled ||= false
|
27
25
|
end
|
28
26
|
|
@@ -35,18 +33,14 @@ module Cloud66
|
|
35
33
|
|
36
34
|
File.open(CONFIG_PATH, 'w+') do |out|
|
37
35
|
data = {
|
36
|
+
'api_url' => @api_url,
|
38
37
|
'api_key' => @api_key,
|
39
|
-
'agent_uid' => @agent_uid,
|
40
38
|
'secret_key' => @secret_key,
|
41
|
-
'
|
42
|
-
'
|
43
|
-
'
|
39
|
+
'agent_uid' => @agent_uid,
|
40
|
+
'disabled' => @disabled,
|
41
|
+
'log' => @log == STDOUT ? "STDOUT" : @log,
|
42
|
+
'log_level' => @log_level
|
44
43
|
}
|
45
|
-
# store the url if it is different
|
46
|
-
data['url'] = @url if @url != 'https://api.cloud66.com'
|
47
|
-
# store the faye url if it is different
|
48
|
-
data['faye_url'] = @faye_url if @faye_url != 'https://sockets.cloud66.com/push'
|
49
|
-
|
50
44
|
YAML::dump(data, out)
|
51
45
|
end
|
52
46
|
end
|
@@ -60,29 +54,14 @@ module Cloud66
|
|
60
54
|
def load
|
61
55
|
raise "config not found" unless File.exists?(CONFIG_PATH)
|
62
56
|
config = YAML::load(File.open(CONFIG_PATH))
|
63
|
-
|
57
|
+
@api_url = config['api_url']
|
64
58
|
@api_key = config['api_key']
|
65
|
-
@agent_uid = config['agent_uid']
|
66
59
|
@secret_key = config['secret_key']
|
67
|
-
|
68
|
-
|
69
|
-
config_url = config['url']
|
70
|
-
@url = config_url if !config_url.nil? && !config_url.strip.empty?
|
71
|
-
|
72
|
-
# get if it exists in the config
|
73
|
-
config_faye_url = config['faye_url']
|
74
|
-
@faye_url = config_faye_url if !config_faye_url.nil? && !config_faye_url.strip.empty?
|
75
|
-
|
76
|
-
# get if it exists in the config
|
77
|
-
config_log_path = config['log_path']
|
78
|
-
@log_path = config_log_path if !config_log_path.nil? && !config_log_path.strip.empty?
|
79
|
-
|
60
|
+
@agent_uid = config['agent_uid']
|
61
|
+
@log = config['log']
|
80
62
|
# get if it exists in the config
|
81
63
|
config_log_level = config['log_level']
|
82
|
-
@log_level = config_log_level.to_i
|
83
|
-
|
84
|
-
disabled = config['disabled']
|
85
|
-
@disabled = disabled if !disabled.nil?
|
64
|
+
@log_level = config_log_level.to_i if config_log_level
|
86
65
|
rescue
|
87
66
|
# we can't load the file
|
88
67
|
end
|
@@ -24,11 +24,11 @@ module Cloud66
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def self.send_job_start(job_uid)
|
27
|
-
process(do_get("/
|
27
|
+
process(do_get("/job/#{job_uid}/start.json", build_content))
|
28
28
|
end
|
29
29
|
|
30
30
|
def self.send_job_end(job_uid, data)
|
31
|
-
process(do_post("/
|
31
|
+
process(do_post("/job/#{job_uid}/end.json", build_content(data)))
|
32
32
|
end
|
33
33
|
|
34
34
|
private
|
@@ -61,7 +61,7 @@ module Cloud66
|
|
61
61
|
$logger.debug "Sending (post) request..."
|
62
62
|
$logger.debug "Request url: #{url}"
|
63
63
|
$logger.debug "Request content: #{content}"
|
64
|
-
base_uri $config.
|
64
|
+
base_uri $config.api_url
|
65
65
|
post(url, content)
|
66
66
|
end
|
67
67
|
|
@@ -69,7 +69,7 @@ module Cloud66
|
|
69
69
|
$logger.debug "Sending (delete) request..."
|
70
70
|
$logger.debug "Request url: #{url}"
|
71
71
|
$logger.debug "Request content: #{content}"
|
72
|
-
base_uri $config.
|
72
|
+
base_uri $config.api_url
|
73
73
|
delete(url, content)
|
74
74
|
end
|
75
75
|
|
@@ -77,7 +77,7 @@ module Cloud66
|
|
77
77
|
$logger.debug "Sending (get) request..."
|
78
78
|
$logger.debug "Request url: #{url}"
|
79
79
|
$logger.debug "Request content: #{content}"
|
80
|
-
base_uri $config.
|
80
|
+
base_uri $config.api_url
|
81
81
|
get(url, content)
|
82
82
|
end
|
83
83
|
|
@@ -85,7 +85,7 @@ module Cloud66
|
|
85
85
|
$logger.debug "Sending (put) request..."
|
86
86
|
$logger.debug "Request url: #{url}"
|
87
87
|
$logger.debug "Request content: #{content}"
|
88
|
-
base_uri $config.
|
88
|
+
base_uri $config.api_url
|
89
89
|
put(url, content)
|
90
90
|
end
|
91
91
|
|
@@ -6,26 +6,15 @@ module Cloud66
|
|
6
6
|
class VitalSigns
|
7
7
|
|
8
8
|
def self.system_info
|
9
|
-
return { ext_ipv4: "123.123.123.123",
|
10
|
-
int_ipv4: "123.123.123.123",
|
11
|
-
ext_ipv6: "123.123.123.123",
|
12
|
-
int_ipv6: "123.123.123.123" } if RUBY_PLATFORM.include?('darwin')
|
13
|
-
|
14
9
|
# system info
|
15
|
-
return parse_data(`
|
10
|
+
return parse_data(`facter`)
|
16
11
|
end
|
17
12
|
|
18
13
|
def self.address_info
|
19
|
-
return { ext_ipv4: "123.123.123.123",
|
20
|
-
int_ipv4: "123.123.123.123",
|
21
|
-
ext_ipv6: "123.123.123.123",
|
22
|
-
int_ipv6: "123.123.123.123" } if RUBY_PLATFORM.include?('darwin')
|
23
|
-
|
24
14
|
# address information
|
25
15
|
hash = parse_data(`facter ipaddress ec2_public_ipv4 ipaddress_eth0 ipaddress6 ipaddress6_eth0`)
|
26
16
|
|
27
17
|
result = {}
|
28
|
-
|
29
18
|
if hash.has_key?('ec2_public_ipv4')
|
30
19
|
# return ec2 info first (most specific)
|
31
20
|
result[:ext_ipv4] = hash['ec2_public_ipv4']
|
data/lib/cloud66_agent.rb
CHANGED
@@ -3,7 +3,8 @@ Dir.glob(File.dirname(File.absolute_path(__FILE__)) + '/cloud66_agent/commands/*
|
|
3
3
|
|
4
4
|
class Cloud66Agent
|
5
5
|
def self.configure(server_uid)
|
6
|
-
|
6
|
+
raise ArgumentError.new if server_uid.nil?
|
7
|
+
Cloud66::Commands::Configure.perform(server_uid)
|
7
8
|
end
|
8
9
|
|
9
10
|
def self.pulse
|
@@ -18,19 +19,13 @@ class Cloud66Agent
|
|
18
19
|
Cloud66::Commands::Address.perform
|
19
20
|
end
|
20
21
|
|
21
|
-
def self.job_start(
|
22
|
-
job_uid = args[0]
|
22
|
+
def self.job_start(job_uid)
|
23
23
|
raise ArgumentError.new if job_uid.nil?
|
24
|
-
Cloud66::Commands::JobStart.perform
|
24
|
+
Cloud66::Commands::JobStart.perform(job_uid)
|
25
25
|
end
|
26
26
|
|
27
|
-
def self.job_end(
|
28
|
-
|
29
|
-
job_uid
|
30
|
-
session_uid = args[2]
|
31
|
-
run_time = args[3]
|
32
|
-
results_file = args[4]
|
33
|
-
raise ArgumentError.new if status.nil? || job_uid.nil? || session_uid.nil? || run_time.nil? || results_file.nil?
|
34
|
-
Cloud66::Commands::JobEnd.perform(status, job_uid, session_uid, run_time, results_file)
|
27
|
+
def self.job_end(job_uid, run_uid, run_status, run_time, results_file)
|
28
|
+
raise ArgumentError.new if run_status.nil? || job_uid.nil? || run_uid.nil? || run_time.nil? || results_file.nil?
|
29
|
+
Cloud66::Commands::JobEnd.perform(job_uid, run_uid, run_status, run_time, results_file)
|
35
30
|
end
|
36
31
|
end
|