rs-api-tools 0.0.1 → 0.0.2
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/rs-create-alert-spec +91 -0
- data/bin/rs-describe-alerts +4 -4
- data/bin/rs-describe-ec2-ebs-snapshots +3 -3
- data/bin/rs-describe-ec2-ebs-volumes +34 -8
- data/bin/rs-describe-key +49 -0
- data/bin/rs-describe-server +28 -24
- data/bin/rs-describe-servers +63 -10
- data/bin/rs-fetch-executables +115 -0
- data/bin/rs-fetch-rightscripts +2 -125
- data/bin/rs-lock-server +77 -0
- data/bin/rs-query-cloud +27 -0
- data/bin/rs-run-recipe +80 -0
- data/bin/rs-search-tags +9 -2
- data/bin/rs-tag-array +39 -0
- data/bin/rs-terminate-self +2 -6
- data/bin/rs-unlock-server +77 -0
- data/bin/rs-update-server-array +1 -1
- metadata +17 -64
- data/bin/.DS_Store +0 -0
@@ -0,0 +1,91 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
# rs-create-alert-spec <alert spec params>
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'getoptlong'
|
7
|
+
require 'json'
|
8
|
+
require 'rest_connection'
|
9
|
+
require 'active_support' #for to_xml()
|
10
|
+
require 'xmlsimple'
|
11
|
+
|
12
|
+
def usage
|
13
|
+
puts("#{$0} [--xml] [--json]")
|
14
|
+
puts "Example:"
|
15
|
+
puts "rs-create-alert-spec --name 'foobar alert' --file 'processes-java/ps_count' --variable 'processes' --condition '>' --threshold '25.0' --escalation-name 'critical' --duration 60 --subject-type ServerTemplate --action escalate"
|
16
|
+
exit
|
17
|
+
end
|
18
|
+
|
19
|
+
def usage_exit
|
20
|
+
usage; exit
|
21
|
+
end
|
22
|
+
|
23
|
+
json = false
|
24
|
+
xml = false
|
25
|
+
verbose = false
|
26
|
+
alert_spec_params = Hash.new
|
27
|
+
|
28
|
+
usage_exit if ARGV.length < 18 # (9 required options, but this should not be checked so arbitrarily)
|
29
|
+
|
30
|
+
opts = GetoptLong.new(
|
31
|
+
[ '--name', '-n', GetoptLong::REQUIRED_ARGUMENT ],
|
32
|
+
[ '--file', '-f', GetoptLong::REQUIRED_ARGUMENT ],
|
33
|
+
[ '--variable', '-v', GetoptLong::REQUIRED_ARGUMENT ],
|
34
|
+
[ '--condition', '-c', GetoptLong::REQUIRED_ARGUMENT ],
|
35
|
+
[ '--threshold', '-t', GetoptLong::REQUIRED_ARGUMENT ],
|
36
|
+
[ '--escalation-name', '-e', GetoptLong::REQUIRED_ARGUMENT ],
|
37
|
+
[ '--duration', '-d', GetoptLong::REQUIRED_ARGUMENT ],
|
38
|
+
[ '--description', '-D', GetoptLong::OPTIONAL_ARGUMENT ],
|
39
|
+
[ '--subject-type', '-s', GetoptLong::REQUIRED_ARGUMENT ],
|
40
|
+
[ '--subject-href', '-S', GetoptLong::OPTIONAL_ARGUMENT ],
|
41
|
+
[ '--action', '-a', GetoptLong::REQUIRED_ARGUMENT ],
|
42
|
+
[ '--vote-tag', GetoptLong::OPTIONAL_ARGUMENT ],
|
43
|
+
[ '--vote-type', GetoptLong::OPTIONAL_ARGUMENT ],
|
44
|
+
[ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
|
45
|
+
[ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ],
|
46
|
+
[ '--verbose', '-V', GetoptLong::OPTIONAL_ARGUMENT ],
|
47
|
+
[ '--help', '-h', GetoptLong::NO_ARGUMENT ]
|
48
|
+
)
|
49
|
+
|
50
|
+
opts.each do |opt, arg|
|
51
|
+
case opt
|
52
|
+
when '--help'
|
53
|
+
usage; exit
|
54
|
+
when '--name'
|
55
|
+
alert_spec_params['name'] = arg
|
56
|
+
when '--file'
|
57
|
+
alert_spec_params['file'] = arg
|
58
|
+
when '--variable'
|
59
|
+
alert_spec_params['variable'] = arg
|
60
|
+
when '--condition'
|
61
|
+
alert_spec_params['condition'] = arg
|
62
|
+
when '--threshold'
|
63
|
+
alert_spec_params['threshold'] = arg
|
64
|
+
when '--duration'
|
65
|
+
alert_spec_params['duration'] = arg
|
66
|
+
when '--description'
|
67
|
+
alert_spec_params['description'] = arg
|
68
|
+
when '--subject-type'
|
69
|
+
alert_spec_params['subject_type'] = arg
|
70
|
+
when '--subject-href'
|
71
|
+
alert_spec_params['subject_href'] = arg
|
72
|
+
when '--action'
|
73
|
+
alert_spec_params['action'] = arg
|
74
|
+
when '--vote-tag'
|
75
|
+
alert_spec_params['vote_tag'] = arg
|
76
|
+
when '--vote-type'
|
77
|
+
alert_spec_params['vote_tpe'] = arg
|
78
|
+
when '--json'
|
79
|
+
json = true
|
80
|
+
when '--verbose'
|
81
|
+
verbose = true
|
82
|
+
when '--xml'
|
83
|
+
xml = true
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
puts alert_spec_params.to_yaml if verbose
|
88
|
+
|
89
|
+
#AlertSpec.attach(alert_spec_params)
|
90
|
+
|
91
|
+
puts 'This command is unfinished. Please contrib via pull request.'
|
data/bin/rs-describe-alerts
CHANGED
@@ -4,10 +4,6 @@
|
|
4
4
|
|
5
5
|
require 'rubygems'
|
6
6
|
require 'getoptlong'
|
7
|
-
require 'json'
|
8
|
-
require 'rest_connection'
|
9
|
-
require 'active_support' #for to_xml()
|
10
|
-
require 'xmlsimple'
|
11
7
|
|
12
8
|
def usage
|
13
9
|
puts("#{$0} [--xml] [--json]")
|
@@ -31,11 +27,15 @@ opts.each do |opt, arg|
|
|
31
27
|
end
|
32
28
|
end
|
33
29
|
|
30
|
+
require 'json'
|
31
|
+
require 'rest_connection'
|
32
|
+
|
34
33
|
alerts = AlertSpec.find_all()
|
35
34
|
|
36
35
|
if json
|
37
36
|
puts alerts.to_json
|
38
37
|
elsif xml
|
38
|
+
require 'xmlsimple'
|
39
39
|
puts JSON.parse(alerts.to_json).to_xml(:root => 'deployments', :skip_instruct => true)
|
40
40
|
else
|
41
41
|
puts alerts.to_yaml
|
@@ -4,9 +4,6 @@
|
|
4
4
|
|
5
5
|
require 'rubygems'
|
6
6
|
require 'getoptlong'
|
7
|
-
require 'json'
|
8
|
-
require 'rest_connection'
|
9
|
-
require 'active_support' #for to_xml()
|
10
7
|
|
11
8
|
def usage
|
12
9
|
puts("#{$0} [--xml] [--json]")
|
@@ -30,6 +27,9 @@ opts.each do |opt, arg|
|
|
30
27
|
end
|
31
28
|
end
|
32
29
|
|
30
|
+
require 'json'
|
31
|
+
require 'rest_connection'
|
32
|
+
|
33
33
|
ebs_snapshots = Ec2EbsSnapshot.find_all()
|
34
34
|
|
35
35
|
if json
|
@@ -1,41 +1,67 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
2
|
|
3
|
-
# rs-describe-ec2-ebs-volumes
|
3
|
+
# rs-describe-ec2-ebs-volumes [--cloud <cloud_id>] [--json] [--xml] [--help]
|
4
4
|
|
5
5
|
require 'rubygems'
|
6
6
|
require 'getoptlong'
|
7
|
-
require 'json'
|
8
|
-
require 'rest_connection'
|
9
|
-
require 'active_support' #for to_xml()
|
10
|
-
require 'xmlsimple'
|
11
7
|
|
12
8
|
def usage
|
13
|
-
puts("#{$0} [--xml] [--json]")
|
9
|
+
puts("#{$0} [--cloud] [--help] [--xml] [--json]")
|
14
10
|
exit
|
15
11
|
end
|
16
12
|
|
17
13
|
opts = GetoptLong.new(
|
14
|
+
[ '--cloud', '-c', GetoptLong::OPTIONAL_ARGUMENT ],
|
18
15
|
[ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
|
19
|
-
[ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ]
|
16
|
+
[ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ],
|
17
|
+
[ '--help', '-h', GetoptLong::OPTIONAL_ARGUMENT ]
|
20
18
|
)
|
21
19
|
|
22
20
|
json = false
|
23
21
|
xml = false
|
22
|
+
cloud_id = false
|
24
23
|
|
25
24
|
opts.each do |opt, arg|
|
26
25
|
case opt
|
26
|
+
when '--cloud'
|
27
|
+
cloud_id = arg
|
27
28
|
when '--json'
|
28
29
|
json = true
|
29
30
|
when '--xml'
|
30
31
|
xml = true
|
32
|
+
when '--help'
|
33
|
+
usage; exit
|
31
34
|
end
|
32
35
|
end
|
33
36
|
|
34
|
-
|
37
|
+
# RightScale (public) cloud IDs
|
38
|
+
rs_clouds = Array.new
|
39
|
+
rs_clouds.push({:cloud_id => 1, :name => "AWS US-East", :region => "us-east-1"})
|
40
|
+
rs_clouds.push({:cloud_id => 2, :name => "AWS EU", :region => "eu-west-1"})
|
41
|
+
rs_clouds.push({:cloud_id => 3, :name => "AWS US-West", :region => "us-west-1"})
|
42
|
+
rs_clouds.push({:cloud_id => 4, :name => "AWS AP-Singapore", :region => "ap-southeast-1"})
|
43
|
+
rs_clouds.push({:cloud_id => 5, :name => "AWS AP-Tokyo", :region => "ap-northeast-1"})
|
44
|
+
rs_clouds.push({:cloud_id => 6, :name => "AWS AP-Oregon", :region => "us-west-2"})
|
45
|
+
rs_clouds.push({:cloud_id => 7, :name => "AWS SA-Sao Paulo", :region => "sa-east-1"})
|
46
|
+
|
47
|
+
require 'rest_connection'
|
48
|
+
|
49
|
+
ebs_volumes = Array.new
|
50
|
+
|
51
|
+
if cloud_id
|
52
|
+
ebs_volumes += Ec2EbsVolume.find_by_cloud_id(cloud_id)
|
53
|
+
else
|
54
|
+
rs_clouds.each { |cloud|
|
55
|
+
puts "Fetching from #{cloud[:name]} (#{cloud[:region]})."
|
56
|
+
ebs_volumes += Ec2EbsVolume.find_by_cloud_id(cloud[:cloud_id])
|
57
|
+
}
|
58
|
+
end
|
35
59
|
|
36
60
|
if json
|
61
|
+
require 'json'
|
37
62
|
puts ebs_volumes.to_json
|
38
63
|
elsif xml
|
64
|
+
require 'active_support' #for to_xml()
|
39
65
|
puts JSON.parse(ebs_volumes.to_json).to_xml(:root => 'ec2-ebs-volumes', :skip_instruct => true)
|
40
66
|
else
|
41
67
|
puts ebs_volumes.to_yaml
|
data/bin/rs-describe-key
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
# rs-describe-key
|
4
|
+
|
5
|
+
puts 'This operation is not currently permitted with the RightScale API (will return HTTP code: 401: Permission denied).'
|
6
|
+
exit 1
|
7
|
+
|
8
|
+
require 'rubygems'
|
9
|
+
require 'getoptlong'
|
10
|
+
|
11
|
+
def usage
|
12
|
+
puts("#{$0} --id <ec2_ssh_key_id> [--xml] [--json]")
|
13
|
+
exit
|
14
|
+
end
|
15
|
+
|
16
|
+
opts = GetoptLong.new(
|
17
|
+
[ '--id', '-i', GetoptLong::REQUIRED_ARGUMENT ],
|
18
|
+
[ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
|
19
|
+
[ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ]
|
20
|
+
)
|
21
|
+
|
22
|
+
key_id = nil
|
23
|
+
json = false
|
24
|
+
xml = false
|
25
|
+
|
26
|
+
opts.each do |opt, arg|
|
27
|
+
case opt
|
28
|
+
when '--id'
|
29
|
+
key_id = arg
|
30
|
+
when '--json'
|
31
|
+
json = true
|
32
|
+
when '--xml'
|
33
|
+
xml = true
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
require 'json'
|
38
|
+
require 'rest_connection'
|
39
|
+
|
40
|
+
key = Ec2SshKey.find(key_id)
|
41
|
+
|
42
|
+
if json
|
43
|
+
puts key.to_json
|
44
|
+
elsif xml
|
45
|
+
require 'xmlsimple'
|
46
|
+
puts JSON.parse(key.to_json).to_xml(:root => 'ec2_ssh_key', :skip_instruct => true)
|
47
|
+
else
|
48
|
+
puts key.to_yaml
|
49
|
+
end
|
data/bin/rs-describe-server
CHANGED
@@ -4,13 +4,9 @@
|
|
4
4
|
|
5
5
|
require 'rubygems'
|
6
6
|
require 'getoptlong'
|
7
|
-
require 'json'
|
8
|
-
require 'rest_connection'
|
9
|
-
require 'active_support' #for to_xml()
|
10
|
-
require 'xmlsimple'
|
11
7
|
|
12
8
|
def usage
|
13
|
-
puts("usage: rs-describe-server --settings [current] [--
|
9
|
+
puts("usage: rs-describe-server --settings [current] [--name <server_nickname> | --id <server_id>]")
|
14
10
|
puts(" [[--verbose]]")
|
15
11
|
end
|
16
12
|
|
@@ -21,15 +17,15 @@ end
|
|
21
17
|
def help
|
22
18
|
usage
|
23
19
|
puts ''
|
24
|
-
puts '
|
20
|
+
puts 'Describes a RightScale server.'
|
25
21
|
puts ''
|
26
|
-
puts "examples: rs-
|
22
|
+
puts "examples: rs-describe-server --id 836587 --settings current"
|
27
23
|
puts ''
|
28
24
|
exit
|
29
25
|
end
|
30
26
|
|
31
27
|
opts = GetoptLong.new(
|
32
|
-
[ '--
|
28
|
+
[ '--name', '-n', GetoptLong::OPTIONAL_ARGUMENT ],
|
33
29
|
[ '--settings', '-s', GetoptLong::OPTIONAL_ARGUMENT ],
|
34
30
|
[ '--id', '-i', GetoptLong::OPTIONAL_ARGUMENT ],
|
35
31
|
[ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
|
@@ -42,10 +38,11 @@ settings = false
|
|
42
38
|
json = false
|
43
39
|
xml = false
|
44
40
|
verbose = false
|
41
|
+
server = false
|
45
42
|
|
46
43
|
opts.each do |opt, arg|
|
47
44
|
case opt
|
48
|
-
when '--
|
45
|
+
when '--name'
|
49
46
|
server_name = arg
|
50
47
|
when '--settings'
|
51
48
|
settings = arg
|
@@ -63,35 +60,42 @@ end
|
|
63
60
|
|
64
61
|
usage_exit if !(server_name || server_id)
|
65
62
|
|
63
|
+
require 'json'
|
64
|
+
require 'rest_connection'
|
65
|
+
|
66
66
|
# get server
|
67
67
|
if server_name
|
68
68
|
puts "Finding server: '%#{server_name}%'"
|
69
69
|
server = Server.find(:first) { |s| s.nickname =~ /#{server_name}/ }
|
70
|
-
#puts "Found server, '#{server.nickname}'."
|
71
70
|
elsif server_id
|
72
71
|
server = Server.find(server_id.to_i)
|
73
72
|
else
|
74
73
|
usage_exit
|
75
74
|
end
|
76
75
|
|
76
|
+
if server
|
77
|
+
puts "Found server, '#{server.nickname}'."
|
78
|
+
else
|
79
|
+
puts "No server found!"
|
80
|
+
end
|
81
|
+
|
77
82
|
if settings
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
83
|
+
if settings == 'next'
|
84
|
+
server_settings = server.settings
|
85
|
+
elsif settings == 'current'
|
86
|
+
server.reload_current
|
87
|
+
server_settings = server.settings
|
88
|
+
end
|
89
|
+
api_result = server_settings
|
85
90
|
else
|
86
|
-
|
91
|
+
api_result = server
|
87
92
|
end
|
88
93
|
|
89
94
|
if json
|
90
|
-
puts
|
95
|
+
puts api_result.to_json
|
91
96
|
elsif xml
|
92
|
-
|
97
|
+
require 'xmlsimple'
|
98
|
+
puts JSON.parse(api_result.to_json).to_xml(:root => 'servers', :skip_instruct => true)
|
93
99
|
else
|
94
|
-
puts
|
95
|
-
end
|
96
|
-
|
97
|
-
|
100
|
+
puts api_result.to_yaml
|
101
|
+
end
|
data/bin/rs-describe-servers
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
2
|
|
3
|
-
# rs-describe-servers
|
3
|
+
# rs-describe-servers [--filter <filter>]
|
4
|
+
|
5
|
+
# e.g. rs-describe-servers
|
6
|
+
# rs-describe-servers --filter "ip_address=44.1.2.3" # server-side filter
|
7
|
+
# rs-describe-servers --filter "state=operational" # client-side filter
|
4
8
|
|
5
9
|
require 'rubygems'
|
6
10
|
require 'getoptlong'
|
7
|
-
require 'json'
|
8
|
-
require 'rest_connection'
|
9
|
-
require 'active_support' #for to_xml()
|
10
|
-
require 'xmlsimple'
|
11
11
|
|
12
12
|
def usage
|
13
13
|
puts("#{$0} [--xml] [--json]")
|
@@ -15,28 +15,81 @@ def usage
|
|
15
15
|
end
|
16
16
|
|
17
17
|
opts = GetoptLong.new(
|
18
|
+
[ '--filter', '-f', GetoptLong::OPTIONAL_ARGUMENT ],
|
19
|
+
[ '--current', '-c', GetoptLong::OPTIONAL_ARGUMENT ],
|
20
|
+
[ '--field', '-F', GetoptLong::OPTIONAL_ARGUMENT ],
|
21
|
+
[ '--raw', '-r', GetoptLong::OPTIONAL_ARGUMENT ],
|
18
22
|
[ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
|
19
23
|
[ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ]
|
20
24
|
)
|
21
25
|
|
26
|
+
filter = false
|
22
27
|
json = false
|
23
28
|
xml = false
|
29
|
+
raw = false
|
30
|
+
field = false
|
24
31
|
|
25
32
|
opts.each do |opt, arg|
|
26
33
|
case opt
|
34
|
+
when '--filter'
|
35
|
+
filter = arg.split('=')
|
27
36
|
when '--json'
|
28
37
|
json = true
|
29
38
|
when '--xml'
|
30
39
|
xml = true
|
31
|
-
|
40
|
+
when '--raw'
|
41
|
+
raw = true
|
42
|
+
when '--field'
|
43
|
+
field = arg
|
44
|
+
end
|
32
45
|
end
|
33
46
|
|
34
|
-
|
47
|
+
filters = [ 'aws_id', 'created_at', 'deployment_href', 'ip_address', 'nickname', 'private_ip_address', 'updated_at' ]
|
48
|
+
|
49
|
+
require 'rest_connection'
|
50
|
+
require 'json'
|
51
|
+
|
52
|
+
if filter
|
53
|
+
if filters.include? filter[0]
|
54
|
+
# server-side filter
|
55
|
+
servers = Server.find_with_filter(filter[0] => filter[1])
|
56
|
+
else
|
57
|
+
# client-side filter
|
58
|
+
servers = Server.find(:all) {|server| server.params[filter[0]] == filter[1]}
|
59
|
+
end
|
60
|
+
else
|
61
|
+
servers = Server.find_all()
|
62
|
+
end
|
35
63
|
|
36
64
|
if json
|
37
|
-
|
65
|
+
servers_formatted = Array.new
|
66
|
+
servers.each do |server|
|
67
|
+
servers_formatted.push(server.params)
|
68
|
+
end
|
69
|
+
puts JSON.pretty_generate(servers_formatted)
|
38
70
|
elsif xml
|
39
|
-
|
71
|
+
require "active_support/core_ext"
|
72
|
+
puts "<servers>"
|
73
|
+
servers.each do |server|
|
74
|
+
puts JSON.parse(server.params.to_json).to_xml(:root => 'server', :skip_instruct => true)
|
75
|
+
end
|
76
|
+
puts "</servers>"
|
77
|
+
elsif raw
|
78
|
+
servers.each do |server|
|
79
|
+
#print server.state
|
80
|
+
if server.state == ('operational'||'stranded'||'booting'||'decommissioning')
|
81
|
+
#puts server.state
|
82
|
+
server.reload_as_current
|
83
|
+
#puts server.settings.to_yaml
|
84
|
+
#server.reload_as_current
|
85
|
+
#puts server.to_yaml
|
86
|
+
if field
|
87
|
+
puts server.settings[field]
|
88
|
+
else
|
89
|
+
puts server
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
40
93
|
else
|
41
|
-
puts servers.to_yaml
|
94
|
+
puts servers.to_yaml # output yaml by default for readability
|
42
95
|
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
# rs-fetch-rightscripts
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'getoptlong'
|
7
|
+
|
8
|
+
def usage
|
9
|
+
puts("rs-fetch-rightscripts [ --id <server_template_id> | --name <server_template_name>] [ OPTIONS ]")
|
10
|
+
puts("e.g. rs-fetch-rightscripts --name 'RightScale Linux Server RL 5.8' -v --xml")
|
11
|
+
exit
|
12
|
+
end
|
13
|
+
|
14
|
+
opts = GetoptLong.new(
|
15
|
+
[ '--id', '-i', GetoptLong::OPTIONAL_ARGUMENT ],
|
16
|
+
[ '--name', '-n', GetoptLong::OPTIONAL_ARGUMENT ],
|
17
|
+
[ '--verbose', '-v', GetoptLong::OPTIONAL_ARGUMENT ],
|
18
|
+
[ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ],
|
19
|
+
[ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ]
|
20
|
+
)
|
21
|
+
|
22
|
+
name = false
|
23
|
+
id = false
|
24
|
+
show_help = false
|
25
|
+
verbose = false
|
26
|
+
xml = false
|
27
|
+
json = false
|
28
|
+
server_template = false
|
29
|
+
|
30
|
+
opts.each do |opt, arg|
|
31
|
+
case opt
|
32
|
+
when '--name'
|
33
|
+
name = arg
|
34
|
+
when '--id'
|
35
|
+
id = arg
|
36
|
+
when '--verbose'
|
37
|
+
verbose = true
|
38
|
+
when '--json'
|
39
|
+
json = true
|
40
|
+
require 'json'
|
41
|
+
when '--xml'
|
42
|
+
xml = true
|
43
|
+
require 'xmlsimple'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
usage if !(name || id)
|
48
|
+
|
49
|
+
def sanitize_filename(filename)
|
50
|
+
filename.strip do |name|
|
51
|
+
# NOTE: File.basename doesn't work right with Windows paths on Unix
|
52
|
+
# get only the filename, not the whole path
|
53
|
+
name.gsub! /^.*(\\|\/)/, ''
|
54
|
+
|
55
|
+
# Finally, replace all non alphanumeric, underscore
|
56
|
+
# or periods with underscore
|
57
|
+
# name.gsub! /[^\w\.\-]/, '_'
|
58
|
+
# Basically strip out the non-ascii alphabets too
|
59
|
+
# and replace with x.
|
60
|
+
# You don't want all _ :)
|
61
|
+
name.gsub!(/[^0-9A-Za-z.\-]/, 'x')
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
require 'rest_connection'
|
66
|
+
|
67
|
+
# get servertemplate
|
68
|
+
if name
|
69
|
+
puts "Finding ServerTemplate: '%#{name}%'." if verbose
|
70
|
+
server_template = ServerTemplate.find(:first) { |s| s.nickname =~ /#{name}/ }
|
71
|
+
elsif id
|
72
|
+
puts "Fetching ServerTemplate, ID: #{id}." if verbose
|
73
|
+
server_template = ServerTemplate.find(id.to_i)
|
74
|
+
end
|
75
|
+
|
76
|
+
if server_template
|
77
|
+
puts "Located ServerTemplate, '#{server_template.nickname}'." if verbose
|
78
|
+
puts server_template.to_yaml if verbose
|
79
|
+
else
|
80
|
+
puts "No ServerTemplate found."
|
81
|
+
exit 1
|
82
|
+
end
|
83
|
+
|
84
|
+
# get executables (RightScripts or Chef recipes) of the ServerTemplate
|
85
|
+
executables = server_template.fetch_executables
|
86
|
+
|
87
|
+
if json
|
88
|
+
# TODO: proper processing
|
89
|
+
executables.each do |exec|
|
90
|
+
puts exec.to_s.to_json
|
91
|
+
end
|
92
|
+
elsif xml
|
93
|
+
require 'cgi'
|
94
|
+
puts "<executables>"
|
95
|
+
executables.each do |exec|
|
96
|
+
puts " <executable>"
|
97
|
+
puts " <position>#{exec.position}</position>"
|
98
|
+
puts " <name>#{exec.name}</name>"
|
99
|
+
puts " <recipe>#{! exec.recipe.to_s.empty? ? exec.recipe : 'n/a'}</recipe>"
|
100
|
+
puts " <href>#{exec.href}</href>"
|
101
|
+
puts " <phase>#{exec.apply}</phase>"
|
102
|
+
if exec.right_script?
|
103
|
+
puts " <description>#{exec.right_script.description}</description>"
|
104
|
+
puts " <created_at>#{exec.right_script.created_at}</created_at>"
|
105
|
+
puts " <updated_at>#{exec.right_script.updated_at}</updated_at>"
|
106
|
+
puts " <version>#{exec.right_script.version == 0 ? 'HEAD' : exec.right_script.version}</version>"
|
107
|
+
puts " <filename>#{sanitize_filename(exec.name).gsub(' ', '_')}</filename>"
|
108
|
+
puts " <script>#{CGI.escapeHTML(exec.right_script['script'])}</script>"
|
109
|
+
end
|
110
|
+
puts " </executable>"
|
111
|
+
end
|
112
|
+
puts "</executables>"
|
113
|
+
else
|
114
|
+
puts executables.to_yaml
|
115
|
+
end
|
data/bin/rs-fetch-rightscripts
CHANGED
@@ -1,126 +1,3 @@
|
|
1
|
-
#!/
|
1
|
+
#!/bin/sh
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
require 'rubygems'
|
6
|
-
require 'getoptlong'
|
7
|
-
require 'json'
|
8
|
-
require 'rest_connection'
|
9
|
-
require 'activesupport' #for to_xml()
|
10
|
-
require 'xmlsimple'
|
11
|
-
|
12
|
-
def usage
|
13
|
-
puts("rs-fetch-rightscripts [ --id <server_template_id> | --name <server_template_name>] [ OPTIONS ]")
|
14
|
-
puts("e.g. rs-fetch-rightscripts --name 'RightScale Linux Server RL 5.7 -v --xml'")
|
15
|
-
exit
|
16
|
-
end
|
17
|
-
|
18
|
-
opts = GetoptLong.new(
|
19
|
-
[ '--id', '-i', GetoptLong::OPTIONAL_ARGUMENT ],
|
20
|
-
[ '--name', '-n', GetoptLong::OPTIONAL_ARGUMENT ],
|
21
|
-
[ '--verbose', '-v', GetoptLong::OPTIONAL_ARGUMENT ],
|
22
|
-
[ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ],
|
23
|
-
[ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
|
24
|
-
)
|
25
|
-
|
26
|
-
name = false
|
27
|
-
id = false
|
28
|
-
show_help = false
|
29
|
-
verbose = false
|
30
|
-
xml = false
|
31
|
-
json = false
|
32
|
-
|
33
|
-
opts.each do |opt, arg|
|
34
|
-
case opt
|
35
|
-
when '--name'
|
36
|
-
name = arg
|
37
|
-
when '--id'
|
38
|
-
id = arg
|
39
|
-
when '--verbose'
|
40
|
-
verbose = true
|
41
|
-
when '--json'
|
42
|
-
json = true
|
43
|
-
when '--xml'
|
44
|
-
xml = true
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
usage if !(name || id)
|
49
|
-
|
50
|
-
def sanitize_filename(filename)
|
51
|
-
filename.strip do |name|
|
52
|
-
# NOTE: File.basename doesn't work right with Windows paths on Unix
|
53
|
-
# get only the filename, not the whole path
|
54
|
-
name.gsub! /^.*(\\|\/)/, ''
|
55
|
-
|
56
|
-
# Finally, replace all non alphanumeric, underscore
|
57
|
-
# or periods with underscore
|
58
|
-
# name.gsub! /[^\w\.\-]/, '_'
|
59
|
-
# Basically strip out the non-ascii alphabets too
|
60
|
-
# and replace with x.
|
61
|
-
# You don't want all _ :)
|
62
|
-
name.gsub!(/[^0-9A-Za-z.\-]/, 'x')
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
# Awesome truncate
|
67
|
-
# First regex truncates to the length, plus the rest of that word, if any.
|
68
|
-
# Second regex removes any trailing whitespace or punctuation (except ;).
|
69
|
-
# Unlike the regular truncate method, this avoids the problem with cutting
|
70
|
-
# in the middle of an entity ex.: truncate("this & that",9) => "this &am..."
|
71
|
-
# though it will not be the exact length.
|
72
|
-
def awesome_truncate(text, length = 30, truncate_string = "...")
|
73
|
-
return if text.nil?
|
74
|
-
l = length - truncate_string.mb_chars.length
|
75
|
-
text.mb_chars.length > length ? text[/\A.{#{l}}\w*\;?/m][/.*[\w\;]/m] + truncate_string : text
|
76
|
-
end
|
77
|
-
|
78
|
-
server_template = false
|
79
|
-
|
80
|
-
# get servertemplate
|
81
|
-
if name
|
82
|
-
puts "Finding ServerTemplate: '%#{name}%'." unless ! verbose
|
83
|
-
server_template = ServerTemplate.find(:first) { |s| s.nickname =~ /#{name}/ }
|
84
|
-
elsif id
|
85
|
-
puts "Fetching ServerTemplate; ID: #{id}." unless ! verbose
|
86
|
-
server_template = ServerTemplate.find(id.to_i)
|
87
|
-
end
|
88
|
-
|
89
|
-
if server_template
|
90
|
-
puts "Located ServerTemplate, '#{server_template.nickname}'." unless ! verbose
|
91
|
-
puts server_template.to_yaml unless ! verbose
|
92
|
-
else
|
93
|
-
puts "No ServerTemplate found."
|
94
|
-
exit 1
|
95
|
-
end
|
96
|
-
|
97
|
-
# get executables (RightScripts) of template
|
98
|
-
executables = server_template.fetch_executables
|
99
|
-
|
100
|
-
if json
|
101
|
-
puts executables.to_json
|
102
|
-
elsif xml
|
103
|
-
#puts JSON.parse(executables.to_json).to_xml(:root => 'right_scripts', :skip_instruct => true)
|
104
|
-
executables.each do |exec|
|
105
|
-
puts "<right_script>"
|
106
|
-
puts " <position>#{exec.position}</position>"
|
107
|
-
puts " <name>#{exec.name}</name>"
|
108
|
-
puts " <recipe>#{! exec.recipe.to_s.empty? ? exec.recipe : 'n/a'}</recipe>"
|
109
|
-
puts " <href>#{exec.href}</href>"
|
110
|
-
puts " <description>#{exec.right_script.description}</description>"
|
111
|
-
puts " <created_at>#{exec.right_script.created_at}</created_at>"
|
112
|
-
puts " <updated_at>#{exec.right_script.updated_at}</updated_at>"
|
113
|
-
puts " <version>#{exec.right_script.version == 0 ? 'HEAD' : exec.right_script.version}</version>"
|
114
|
-
puts " <phase>#{exec.apply}</phase>"
|
115
|
-
puts " <filename>#{sanitize_filename(exec.name).gsub(' ', '_')}</filename>"
|
116
|
-
puts " <script>#{awesome_truncate(exec.right_script.script)}</script>"
|
117
|
-
puts "</right_script>"
|
118
|
-
end
|
119
|
-
# puts "--- #{exec.position} #{! exec.recipe.to_s.empty? ? exec.recipe : '*'} #{exec.name} #{exec.right_script.version == 0 ? 'HEAD' : 'rev'+exec.right_script.version.to_s} #{exec.description} #{exec.href} #{exec.right_script.created_at} #{exec.right_script.updated_at} #{exec.apply}"
|
120
|
-
# puts "- #{sanitize_filename(exec.name)}: "
|
121
|
-
# puts "#{awesome_truncate(exec.right_script.script)}"
|
122
|
-
# puts '---'
|
123
|
-
# puts
|
124
|
-
else
|
125
|
-
puts executables.to_yaml
|
126
|
-
end
|
3
|
+
rs-fetch-executables "$@"
|
data/bin/rs-lock-server
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
# rs-lock-server
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'getoptlong'
|
7
|
+
|
8
|
+
def usage
|
9
|
+
puts("usage: rs-lock-server [--name <server_name> | --id <server_id>]")
|
10
|
+
puts(" [[--verbose]]")
|
11
|
+
end
|
12
|
+
|
13
|
+
def usage_exit
|
14
|
+
usage; exit
|
15
|
+
end
|
16
|
+
|
17
|
+
def help
|
18
|
+
usage
|
19
|
+
puts ''
|
20
|
+
puts 'Locks a RightScale server.'
|
21
|
+
puts ''
|
22
|
+
puts "examples: rs-lock-server --name 'Back to earth'"
|
23
|
+
puts ''
|
24
|
+
exit
|
25
|
+
end
|
26
|
+
|
27
|
+
opts = GetoptLong.new(
|
28
|
+
[ '--name', '-n', GetoptLong::OPTIONAL_ARGUMENT ],
|
29
|
+
[ '--id', '-i', GetoptLong::OPTIONAL_ARGUMENT ],
|
30
|
+
[ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
|
31
|
+
[ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ],
|
32
|
+
[ '--help', '-h', GetoptLong::OPTIONAL_ARGUMENT ],
|
33
|
+
[ '--verbose', '-v', GetoptLong::OPTIONAL_ARGUMENT ]
|
34
|
+
)
|
35
|
+
|
36
|
+
server_name = false
|
37
|
+
server_id = false
|
38
|
+
show_help = false
|
39
|
+
verbose = false
|
40
|
+
|
41
|
+
opts.each do |opt, arg|
|
42
|
+
case opt
|
43
|
+
when '--name'
|
44
|
+
server_name = arg
|
45
|
+
when '--id'
|
46
|
+
server_id = arg
|
47
|
+
when '--help'
|
48
|
+
show_help = true
|
49
|
+
when '--verbose'
|
50
|
+
verbose = true
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
help if show_help
|
55
|
+
|
56
|
+
require 'json'
|
57
|
+
require 'rest_connection'
|
58
|
+
|
59
|
+
usage_exit if !(server_name || server_id)
|
60
|
+
|
61
|
+
# get server
|
62
|
+
if server_name
|
63
|
+
puts "Finding server: '%#{server_name}%'"
|
64
|
+
server = Server.find(:first) { |s| s.nickname =~ /#{server_name}/ }
|
65
|
+
puts "Found server, '#{server.nickname}'."
|
66
|
+
puts server.to_yaml if verbose
|
67
|
+
elsif server_id
|
68
|
+
server = Server.find(server_id.to_i)
|
69
|
+
else
|
70
|
+
usage_exit
|
71
|
+
end
|
72
|
+
|
73
|
+
# lock server
|
74
|
+
puts "Locking server, '#{server.nickname}'."
|
75
|
+
server.reload_as_current
|
76
|
+
server.settings["locked"] = 'true'
|
77
|
+
server.save
|
data/bin/rs-query-cloud
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
# rs-query-cloud
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'getoptlong'
|
7
|
+
require 'json'
|
8
|
+
require 'rest_connection'
|
9
|
+
|
10
|
+
def usage
|
11
|
+
puts("#{$0} [--cloud]")
|
12
|
+
exit
|
13
|
+
end
|
14
|
+
|
15
|
+
opts = GetoptLong.new(
|
16
|
+
[ '--cloud', '-c', GetoptLong::REQUIRED_ARGUMENT ]
|
17
|
+
)
|
18
|
+
|
19
|
+
cloud_id = false
|
20
|
+
|
21
|
+
opts.each do |opt, arg|
|
22
|
+
case opt
|
23
|
+
when '--cloud'
|
24
|
+
cloud_id = arg
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
data/bin/rs-run-recipe
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
# rs-run-recipe
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'getoptlong'
|
7
|
+
|
8
|
+
def usage
|
9
|
+
puts("usage: rs-run-recipe [--name <recipe_name>]")
|
10
|
+
puts(" [--server-name <server_name> | --server-id <server_id>]")
|
11
|
+
end
|
12
|
+
|
13
|
+
def usage_exit
|
14
|
+
usage; exit
|
15
|
+
end
|
16
|
+
|
17
|
+
def help
|
18
|
+
usage
|
19
|
+
puts ''
|
20
|
+
puts 'Run a Chef recipe on a RightScale server.'
|
21
|
+
puts ''
|
22
|
+
puts "examples: rs-run-recipe --name 'helloworld::goodbye_world' --server 'Messy Sandbox'"
|
23
|
+
puts ''
|
24
|
+
exit
|
25
|
+
end
|
26
|
+
|
27
|
+
opts = GetoptLong.new(
|
28
|
+
[ '--name', '-n', GetoptLong::OPTIONAL_ARGUMENT ],
|
29
|
+
[ '--server-name', '-s', GetoptLong::OPTIONAL_ARGUMENT ],
|
30
|
+
[ '--server-id', '-S', GetoptLong::OPTIONAL_ARGUMENT ],
|
31
|
+
[ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
|
32
|
+
[ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ],
|
33
|
+
[ '--help', '-h', GetoptLong::OPTIONAL_ARGUMENT ],
|
34
|
+
[ '--verbose', '-v', GetoptLong::OPTIONAL_ARGUMENT ]
|
35
|
+
)
|
36
|
+
|
37
|
+
recipe_name = false
|
38
|
+
server_name = false
|
39
|
+
server_id = false
|
40
|
+
show_help = false
|
41
|
+
verbose = false
|
42
|
+
|
43
|
+
opts.each do |opt, arg|
|
44
|
+
case opt
|
45
|
+
when '--name'
|
46
|
+
recipe_name = arg
|
47
|
+
when '--server-name'
|
48
|
+
server_name = arg
|
49
|
+
when '--server-id'
|
50
|
+
server_id = arg
|
51
|
+
when '--help'
|
52
|
+
show_help = true
|
53
|
+
when '--verbose'
|
54
|
+
verbose = true
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
help if show_help
|
59
|
+
|
60
|
+
require 'json'
|
61
|
+
require 'rest_connection'
|
62
|
+
|
63
|
+
usage_exit if !(recipe_name)
|
64
|
+
|
65
|
+
# get server
|
66
|
+
if server_name
|
67
|
+
puts "Finding server: '%#{server_name}%'"
|
68
|
+
server = Server.find(:first) { |s| s.nickname =~ /#{server_name}/ }
|
69
|
+
puts "Found server, '#{server.nickname}'."
|
70
|
+
puts server.to_yaml if verbose
|
71
|
+
elsif server_id
|
72
|
+
server = Server.find(server_id.to_i)
|
73
|
+
else
|
74
|
+
usage_exit
|
75
|
+
end
|
76
|
+
|
77
|
+
puts "Running Chef Recipe, '#{recipe_name}' on server, '#{server.nickname}'."
|
78
|
+
recipe_executable = Executable.new(recipe_name)
|
79
|
+
state = server.run_executable(recipe_executable)
|
80
|
+
state.wait_for_completed
|
data/bin/rs-search-tags
CHANGED
@@ -16,9 +16,12 @@ end
|
|
16
16
|
def help
|
17
17
|
usage
|
18
18
|
puts ''
|
19
|
-
puts 'Searches for
|
19
|
+
puts 'Searches for resources with a specific RightScale tag.'
|
20
20
|
puts ''
|
21
21
|
puts "examples: rs-search-tags --resource Ec2Instance \"foo:bar=foobar\""
|
22
|
+
puts " - Searches for all EC2 instances with the tag, \"foo:bar=foobar\""
|
23
|
+
puts " rs-search-tags --resource Server \"rs_agent_dev:log_level=DEBUG\""
|
24
|
+
puts " - Searches for all Servers (next instance) with the tag, \"rs_agent_dev:log_level=DEBUG\""
|
22
25
|
puts ''
|
23
26
|
exit
|
24
27
|
end
|
@@ -32,6 +35,7 @@ opts = GetoptLong.new(
|
|
32
35
|
[ '--resource', '-r', GetoptLong::REQUIRED_ARGUMENT ],
|
33
36
|
[ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
|
34
37
|
[ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ],
|
38
|
+
[ '--help', '-h', GetoptLong::OPTIONAL_ARGUMENT ],
|
35
39
|
[ '--verbose', '-v', GetoptLong::OPTIONAL_ARGUMENT ]
|
36
40
|
)
|
37
41
|
|
@@ -45,6 +49,8 @@ opts.each do |opt, arg|
|
|
45
49
|
xml = true
|
46
50
|
when '--verbose'
|
47
51
|
verbose = true
|
52
|
+
when '--help'
|
53
|
+
help; exit
|
48
54
|
end
|
49
55
|
end
|
50
56
|
|
@@ -56,13 +62,14 @@ require 'rest_connection'
|
|
56
62
|
|
57
63
|
tags_search = Array.new
|
58
64
|
tags_search.push(tag)
|
59
|
-
#puts Gem.datadir('rest_connection')
|
60
65
|
|
61
66
|
servers = Tag.search(resource, ["#{tag}"])
|
62
67
|
|
63
68
|
if json
|
64
69
|
puts servers.to_json
|
65
70
|
elsif xml
|
71
|
+
require 'active_support'
|
72
|
+
#require 'active_support/core_ext'
|
66
73
|
puts JSON.parse(servers.to_json).to_xml(:root => 'servers', :skip_instruct => true)
|
67
74
|
else
|
68
75
|
puts servers.to_yaml
|
data/bin/rs-tag-array
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
# rs-tag-array
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'getoptlong'
|
7
|
+
|
8
|
+
def usage
|
9
|
+
puts("#{$0} --id <server_array_id> --tag <tag_foo>")
|
10
|
+
exit
|
11
|
+
end
|
12
|
+
|
13
|
+
# taggable resources
|
14
|
+
# 'Server', 'Ec2EbsSnapshot', 'Ec2EbsVolume', 'Ec2Image', 'Image', 'ServerArray', 'Ec2Instance', 'Instance', 'Deployment', 'ServerTemplate', 'Ec2ServerTemplate'
|
15
|
+
|
16
|
+
opts = GetoptLong.new(
|
17
|
+
[ '--id', '-i', GetoptLong::REQUIRED_ARGUMENT ],
|
18
|
+
[ '--tag', '-t', GetoptLong::REQUIRED_ARGUMENT ],
|
19
|
+
)
|
20
|
+
|
21
|
+
array_id = false
|
22
|
+
tag = false
|
23
|
+
|
24
|
+
opts.each do |opt, arg|
|
25
|
+
case opt
|
26
|
+
when '--id'
|
27
|
+
array_id = arg
|
28
|
+
when '--tag'
|
29
|
+
tag = true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
usage unless (array_id and tag)
|
34
|
+
|
35
|
+
require 'rest_connection'
|
36
|
+
|
37
|
+
server_array = Ec2ServerArray.find('server_arrays/'+array_id)
|
38
|
+
|
39
|
+
Tag.set(server_array.href, tag)
|
data/bin/rs-terminate-self
CHANGED
@@ -0,0 +1,77 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
# rs-unlock-server
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'getoptlong'
|
7
|
+
|
8
|
+
def usage
|
9
|
+
puts("usage: rs-unlock-server [--name <server_name> | --id <server_id>]")
|
10
|
+
puts(" [[--verbose]]")
|
11
|
+
end
|
12
|
+
|
13
|
+
def usage_exit
|
14
|
+
usage; exit
|
15
|
+
end
|
16
|
+
|
17
|
+
def help
|
18
|
+
usage
|
19
|
+
puts ''
|
20
|
+
puts 'Unlocks a RightScale server.'
|
21
|
+
puts ''
|
22
|
+
puts "examples: rs-unlock-server --name 'Back to earth'"
|
23
|
+
puts ''
|
24
|
+
exit
|
25
|
+
end
|
26
|
+
|
27
|
+
opts = GetoptLong.new(
|
28
|
+
[ '--name', '-n', GetoptLong::OPTIONAL_ARGUMENT ],
|
29
|
+
[ '--id', '-i', GetoptLong::OPTIONAL_ARGUMENT ],
|
30
|
+
[ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
|
31
|
+
[ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ],
|
32
|
+
[ '--help', '-h', GetoptLong::OPTIONAL_ARGUMENT ],
|
33
|
+
[ '--verbose', '-v', GetoptLong::OPTIONAL_ARGUMENT ]
|
34
|
+
)
|
35
|
+
|
36
|
+
server_name = false
|
37
|
+
server_id = false
|
38
|
+
show_help = false
|
39
|
+
verbose = false
|
40
|
+
|
41
|
+
opts.each do |opt, arg|
|
42
|
+
case opt
|
43
|
+
when '--name'
|
44
|
+
server_name = arg
|
45
|
+
when '--id'
|
46
|
+
server_id = arg
|
47
|
+
when '--help'
|
48
|
+
show_help = true
|
49
|
+
when '--verbose'
|
50
|
+
verbose = true
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
help if show_help
|
55
|
+
|
56
|
+
require 'json'
|
57
|
+
require 'rest_connection'
|
58
|
+
|
59
|
+
usage_exit if !(server_name || server_id)
|
60
|
+
|
61
|
+
# get server
|
62
|
+
if server_name
|
63
|
+
puts "Finding server: '%#{server_name}%'"
|
64
|
+
server = Server.find(:first) { |s| s.nickname =~ /#{server_name}/ }
|
65
|
+
puts "Found server, '#{server.nickname}'."
|
66
|
+
puts server.to_yaml if verbose
|
67
|
+
elsif server_id
|
68
|
+
server = Server.find(server_id.to_i)
|
69
|
+
else
|
70
|
+
usage_exit
|
71
|
+
end
|
72
|
+
|
73
|
+
# unlock server
|
74
|
+
puts "Unlocking server, '#{server.nickname}'."
|
75
|
+
#server.reload_as_current
|
76
|
+
server.settings["locked"] = 'false'
|
77
|
+
server.save
|
data/bin/rs-update-server-array
CHANGED
@@ -45,7 +45,7 @@ if nickname
|
|
45
45
|
server_array = Ec2ServerArray.find(:first) { |s| s.nickname =~ /#{nickname}/ }
|
46
46
|
puts server.to_yaml if verbose
|
47
47
|
elsif id
|
48
|
-
server =
|
48
|
+
server = Ec2ServerArray.find(server_id.to_i)
|
49
49
|
end
|
50
50
|
puts "Found server array, '#{server_array.nickname}'."
|
51
51
|
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rs-api-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
4
|
+
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Chris Fordham
|
@@ -15,17 +14,16 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date:
|
17
|
+
date: 2013-06-12 00:00:00 -07:00
|
18
|
+
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: json
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
-
none: false
|
25
24
|
requirements:
|
26
25
|
- - ">="
|
27
26
|
- !ruby/object:Gem::Version
|
28
|
-
hash: 15
|
29
27
|
segments:
|
30
28
|
- 1
|
31
29
|
- 4
|
@@ -33,7 +31,6 @@ dependencies:
|
|
33
31
|
version: 1.4.4
|
34
32
|
- - <=
|
35
33
|
- !ruby/object:Gem::Version
|
36
|
-
hash: 13
|
37
34
|
segments:
|
38
35
|
- 1
|
39
36
|
- 6
|
@@ -45,11 +42,9 @@ dependencies:
|
|
45
42
|
name: rest_connection
|
46
43
|
prerelease: false
|
47
44
|
requirement: &id002 !ruby/object:Gem::Requirement
|
48
|
-
none: false
|
49
45
|
requirements:
|
50
46
|
- - ">="
|
51
47
|
- !ruby/object:Gem::Version
|
52
|
-
hash: 3
|
53
48
|
segments:
|
54
49
|
- 0
|
55
50
|
version: "0"
|
@@ -58,10 +53,10 @@ dependencies:
|
|
58
53
|
description: RightScale API Command Line Tools.
|
59
54
|
email: chris@xhost.com.au
|
60
55
|
executables:
|
61
|
-
- .DS_Store
|
62
56
|
- rs-clone-deployment
|
63
57
|
- rs-clone-rightscript
|
64
58
|
- rs-clone-server
|
59
|
+
- rs-create-alert-spec
|
65
60
|
- rs-describe-alerts
|
66
61
|
- rs-describe-attached-vols
|
67
62
|
- rs-describe-deployment
|
@@ -69,6 +64,7 @@ executables:
|
|
69
64
|
- rs-describe-ec2-ebs-snapshots
|
70
65
|
- rs-describe-ec2-ebs-volumes
|
71
66
|
- rs-describe-ec2-security-groups
|
67
|
+
- rs-describe-key
|
72
68
|
- rs-describe-keys
|
73
69
|
- rs-describe-multi-cloud-images
|
74
70
|
- rs-describe-rightscript
|
@@ -79,6 +75,7 @@ executables:
|
|
79
75
|
- rs-describe-server-self
|
80
76
|
- rs-describe-server-templates
|
81
77
|
- rs-describe-servers
|
78
|
+
- rs-fetch-executables
|
82
79
|
- rs-fetch-rightscripts
|
83
80
|
- rs-get-array-instances
|
84
81
|
- rs-get-server-input
|
@@ -86,22 +83,27 @@ executables:
|
|
86
83
|
- rs-get-server-sketchy-data
|
87
84
|
- rs-launch-deployment
|
88
85
|
- rs-launch-server
|
86
|
+
- rs-lock-server
|
89
87
|
- rs-ping-active-servers
|
88
|
+
- rs-query-cloud
|
90
89
|
- rs-reboot-deployment
|
91
90
|
- rs-reboot-server
|
92
91
|
- rs-relaunch-deployment
|
93
92
|
- rs-relaunch-server
|
94
93
|
- rs-run-all-boot-executables
|
94
|
+
- rs-run-recipe
|
95
95
|
- rs-run-rightscript
|
96
96
|
- rs-search-tags
|
97
97
|
- rs-start-deployment
|
98
98
|
- rs-start-server
|
99
99
|
- rs-stop-deployment
|
100
100
|
- rs-stop-server
|
101
|
+
- rs-tag-array
|
101
102
|
- rs-terminate-all
|
102
103
|
- rs-terminate-deployment
|
103
104
|
- rs-terminate-self
|
104
105
|
- rs-terminate-server
|
106
|
+
- rs-unlock-server
|
105
107
|
- rs-update-input
|
106
108
|
- rs-update-inputs
|
107
109
|
- rs-update-server-array
|
@@ -109,54 +111,9 @@ extensions: []
|
|
109
111
|
|
110
112
|
extra_rdoc_files: []
|
111
113
|
|
112
|
-
files:
|
113
|
-
|
114
|
-
|
115
|
-
- bin/rs-clone-rightscript
|
116
|
-
- bin/rs-clone-server
|
117
|
-
- bin/rs-describe-alerts
|
118
|
-
- bin/rs-describe-attached-vols
|
119
|
-
- bin/rs-describe-deployment
|
120
|
-
- bin/rs-describe-deployments
|
121
|
-
- bin/rs-describe-ec2-ebs-snapshots
|
122
|
-
- bin/rs-describe-ec2-ebs-volumes
|
123
|
-
- bin/rs-describe-ec2-security-groups
|
124
|
-
- bin/rs-describe-keys
|
125
|
-
- bin/rs-describe-multi-cloud-images
|
126
|
-
- bin/rs-describe-rightscript
|
127
|
-
- bin/rs-describe-rightscripts
|
128
|
-
- bin/rs-describe-server
|
129
|
-
- bin/rs-describe-server-array
|
130
|
-
- bin/rs-describe-server-arrays
|
131
|
-
- bin/rs-describe-server-self
|
132
|
-
- bin/rs-describe-server-templates
|
133
|
-
- bin/rs-describe-servers
|
134
|
-
- bin/rs-fetch-rightscripts
|
135
|
-
- bin/rs-get-array-instances
|
136
|
-
- bin/rs-get-server-input
|
137
|
-
- bin/rs-get-server-monitoring
|
138
|
-
- bin/rs-get-server-sketchy-data
|
139
|
-
- bin/rs-launch-deployment
|
140
|
-
- bin/rs-launch-server
|
141
|
-
- bin/rs-ping-active-servers
|
142
|
-
- bin/rs-reboot-deployment
|
143
|
-
- bin/rs-reboot-server
|
144
|
-
- bin/rs-relaunch-deployment
|
145
|
-
- bin/rs-relaunch-server
|
146
|
-
- bin/rs-run-all-boot-executables
|
147
|
-
- bin/rs-run-rightscript
|
148
|
-
- bin/rs-search-tags
|
149
|
-
- bin/rs-start-deployment
|
150
|
-
- bin/rs-start-server
|
151
|
-
- bin/rs-stop-deployment
|
152
|
-
- bin/rs-stop-server
|
153
|
-
- bin/rs-terminate-all
|
154
|
-
- bin/rs-terminate-deployment
|
155
|
-
- bin/rs-terminate-self
|
156
|
-
- bin/rs-terminate-server
|
157
|
-
- bin/rs-update-input
|
158
|
-
- bin/rs-update-inputs
|
159
|
-
- bin/rs-update-server-array
|
114
|
+
files: []
|
115
|
+
|
116
|
+
has_rdoc: true
|
160
117
|
homepage: https://github.com/flaccid/rs-api-tools
|
161
118
|
licenses: []
|
162
119
|
|
@@ -166,27 +123,23 @@ rdoc_options: []
|
|
166
123
|
require_paths:
|
167
124
|
- lib
|
168
125
|
required_ruby_version: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
126
|
requirements:
|
171
127
|
- - ">="
|
172
128
|
- !ruby/object:Gem::Version
|
173
|
-
hash: 3
|
174
129
|
segments:
|
175
130
|
- 0
|
176
131
|
version: "0"
|
177
132
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
|
-
none: false
|
179
133
|
requirements:
|
180
134
|
- - ">="
|
181
135
|
- !ruby/object:Gem::Version
|
182
|
-
hash: 3
|
183
136
|
segments:
|
184
137
|
- 0
|
185
138
|
version: "0"
|
186
139
|
requirements: []
|
187
140
|
|
188
141
|
rubyforge_project:
|
189
|
-
rubygems_version: 1.
|
142
|
+
rubygems_version: 1.3.6
|
190
143
|
signing_key:
|
191
144
|
specification_version: 3
|
192
145
|
summary: rs-api-tools
|
data/bin/.DS_Store
DELETED
Binary file
|