rs-api-tools 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/bin/.DS_Store +0 -0
  2. data/bin/rs-clone-deployment +58 -0
  3. data/bin/rs-clone-rightscript +79 -0
  4. data/bin/rs-clone-server +2 -0
  5. data/bin/rs-describe-alerts +42 -0
  6. data/bin/rs-describe-attached-vols +83 -0
  7. data/bin/rs-describe-deployment +85 -0
  8. data/bin/rs-describe-deployments +42 -0
  9. data/bin/rs-describe-ec2-ebs-snapshots +41 -0
  10. data/bin/rs-describe-ec2-ebs-volumes +42 -0
  11. data/bin/rs-describe-ec2-security-groups +42 -0
  12. data/bin/rs-describe-keys +42 -0
  13. data/bin/rs-describe-multi-cloud-images +42 -0
  14. data/bin/rs-describe-rightscript +81 -0
  15. data/bin/rs-describe-rightscripts +42 -0
  16. data/bin/rs-describe-server +97 -0
  17. data/bin/rs-describe-server-array +80 -0
  18. data/bin/rs-describe-server-arrays +42 -0
  19. data/bin/rs-describe-server-self +67 -0
  20. data/bin/rs-describe-server-templates +42 -0
  21. data/bin/rs-describe-servers +42 -0
  22. data/bin/rs-fetch-rightscripts +126 -0
  23. data/bin/rs-get-array-instances +64 -0
  24. data/bin/rs-get-server-input +2 -0
  25. data/bin/rs-get-server-monitoring +64 -0
  26. data/bin/rs-get-server-sketchy-data +42 -0
  27. data/bin/rs-launch-deployment +2 -0
  28. data/bin/rs-launch-server +2 -0
  29. data/bin/rs-ping-active-servers +44 -0
  30. data/bin/rs-reboot-deployment +2 -0
  31. data/bin/rs-reboot-server +75 -0
  32. data/bin/rs-relaunch-deployment +2 -0
  33. data/bin/rs-relaunch-server +74 -0
  34. data/bin/rs-run-all-boot-executables +94 -0
  35. data/bin/rs-run-rightscript +98 -0
  36. data/bin/rs-search-tags +69 -0
  37. data/bin/rs-start-deployment +2 -0
  38. data/bin/rs-start-server +75 -0
  39. data/bin/rs-stop-deployment +2 -0
  40. data/bin/rs-stop-server +2 -0
  41. data/bin/rs-terminate-all +2 -0
  42. data/bin/rs-terminate-deployment +2 -0
  43. data/bin/rs-terminate-self +70 -0
  44. data/bin/rs-terminate-server +90 -0
  45. data/bin/rs-update-input +71 -0
  46. data/bin/rs-update-inputs +71 -0
  47. data/bin/rs-update-server-array +63 -0
  48. metadata +194 -0
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # rs-describe-server-self [--settings]
4
+
5
+ require 'rubygems'
6
+ require 'getoptlong'
7
+ require 'json'
8
+ require 'rest_connection'
9
+
10
+ def usage
11
+ puts("usage: rs-describe-server-self [[--settings]]")
12
+ puts(" [[--verbose]]")
13
+ end
14
+
15
+ def usage_exit
16
+ usage; exit
17
+ end
18
+
19
+ def help
20
+ usage
21
+ puts ''
22
+ puts 'Describes the server from the aws-id of the local instance.'
23
+ puts ''
24
+ puts "examples: rs-describe-server-self --settings"
25
+ puts ''
26
+ exit
27
+ end
28
+
29
+ opts = GetoptLong.new(
30
+ [ '--settings', '-s', GetoptLong::OPTIONAL_ARGUMENT ],
31
+ [ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
32
+ [ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ]
33
+ )
34
+
35
+ settings = false
36
+ json = false
37
+ xml = false
38
+ verbose = false
39
+
40
+ opts.each do |opt, arg|
41
+ case opt
42
+ when '--settings'
43
+ settings = ".settings"
44
+ when '--verbose'
45
+ verbose = true
46
+ end
47
+ end
48
+
49
+ instance_id = File.read('/var/spool/cloud/meta-data/instance-id')
50
+
51
+ # server-side filtering
52
+ if settings
53
+ server = Server.find_with_filter('aws_id' => "#{instance_id}")[0].settings
54
+ else
55
+ server = Server.find_with_filter('aws_id' => "#{instance_id}")[0]
56
+ end
57
+
58
+ # client-side filtering=expensive and lengthy on accounts with many servers
59
+ #server = Server.find(:all) {|server| server.settings['aws-id'] == "#{instance_id}"}
60
+
61
+ if server
62
+ puts "Found server, '#{server['nickname']}'."
63
+ puts server.to_yaml
64
+ else
65
+ puts 'Server not found, exiting.'
66
+ exit 1
67
+ end
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # rs-describe-server-templates
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
+ exit
15
+ end
16
+
17
+ opts = GetoptLong.new(
18
+ [ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
19
+ [ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ]
20
+ )
21
+
22
+ json = false
23
+ xml = false
24
+
25
+ opts.each do |opt, arg|
26
+ case opt
27
+ when '--json'
28
+ json = true
29
+ when '--xml'
30
+ xml = true
31
+ end
32
+ end
33
+
34
+ server_templates = ServerTemplate.find_all()
35
+
36
+ if json
37
+ puts server_templates.to_json
38
+ elsif xml
39
+ puts JSON.parse(server_templates.to_json).to_xml(:root => 'server_template', :skip_instruct => true)
40
+ else
41
+ puts server_templates.to_yaml
42
+ end
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # rs-describe-servers
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
+ exit
15
+ end
16
+
17
+ opts = GetoptLong.new(
18
+ [ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
19
+ [ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ]
20
+ )
21
+
22
+ json = false
23
+ xml = false
24
+
25
+ opts.each do |opt, arg|
26
+ case opt
27
+ when '--json'
28
+ json = true
29
+ when '--xml'
30
+ xml = true
31
+ end
32
+ end
33
+
34
+ servers = Server.find_all()
35
+
36
+ if json
37
+ puts servers.to_json
38
+ elsif xml
39
+ puts JSON.parse(servers.to_json).to_xml(:root => 'servers', :skip_instruct => true)
40
+ else
41
+ puts servers.to_yaml
42
+ end
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # rs-fetch-rightscripts
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 &amp; 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
@@ -0,0 +1,64 @@
1
+ #! /usr/bin/ruby
2
+
3
+ # rs-get-array-instances
4
+
5
+ require 'rubygems'
6
+ require 'getoptlong'
7
+ require 'json'
8
+ require 'rest_connection'
9
+ #require 'active_support' #for to_xml()
10
+
11
+ def usage
12
+ puts("#{$0} [--xml] [--json]")
13
+ exit
14
+ end
15
+
16
+ opts = GetoptLong.new(
17
+ [ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
18
+ [ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ],
19
+ [ '--api', '-a', GetoptLong::OPTIONAL_ARGUMENT ],
20
+ [ '--id', '-i', GetoptLong::OPTIONAL_ARGUMENT ]
21
+ )
22
+
23
+ json = false
24
+ xml = false
25
+ id = false
26
+ api_version = '1.0'
27
+
28
+ opts.each do |opt, arg|
29
+ case opt
30
+ when '--json'
31
+ json = true
32
+ when '--xml'
33
+ xml = true
34
+ when '--id'
35
+ id = arg
36
+ when '--api'
37
+ api_version = arg
38
+ end
39
+ end
40
+
41
+ unless id
42
+ puts 'No server array ID provided, exiting.'
43
+ usage
44
+ end
45
+
46
+ puts "Getting server array, #{id}."
47
+ unless api_version == '1.5'
48
+ array = Ec2ServerArray.find(id.to_i)
49
+ puts 'Fetching current array instances.'
50
+ array_instances = array.instances
51
+ else
52
+ array = McServerArray.find(id.to_i)
53
+ puts 'Fetching current array instances.'
54
+ array_instances = array.current_instances
55
+ end
56
+ puts array.to_yaml
57
+
58
+ if json
59
+ puts array_instances.to_json
60
+ elsif xml
61
+ puts JSON.parse(array_instances.to_json).to_xml(:root => 'ec2-instances', :skip_instruct => true)
62
+ else
63
+ puts array_instances.to_yaml
64
+ end
@@ -0,0 +1,2 @@
1
+ #!/bin/sh
2
+ echo 'This command is todo; please feel free to submit it via a GitHub pull request.'
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # rs-get-server-monitoring
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
+ exit
15
+ end
16
+
17
+ opts = GetoptLong.new(
18
+ [ '--name', '-n', GetoptLong::OPTIONAL_ARGUMENT ],
19
+ [ '--id', '-i', GetoptLong::OPTIONAL_ARGUMENT ],
20
+ [ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
21
+ [ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ]
22
+ )
23
+
24
+ server_name = false
25
+ server_id = false
26
+ show_help = false
27
+ verbose = false
28
+ json = false
29
+ xml = false
30
+
31
+ opts.each do |opt, arg|
32
+ case opt
33
+ when '--name'
34
+ server_name = arg
35
+ when '--id'
36
+ server_id = arg
37
+ when '--json'
38
+ json = true
39
+ when '--xml'
40
+ xml = true
41
+ end
42
+ end
43
+
44
+ # get server
45
+ if server_name
46
+ puts "Finding server: '%#{server_name}%'"
47
+ server = Server.find(:first) { |s| s.nickname =~ /#{server_name}/ }
48
+ puts "Found server, '#{server.nickname}'."
49
+ puts server.to_yaml if verbose
50
+ elsif server_id
51
+ server = Server.find(server_id.to_i)
52
+ else
53
+ usage_exit
54
+ end
55
+
56
+ monitoring = server.monitoring
57
+
58
+ if json
59
+ puts monitoring.to_json
60
+ elsif xml
61
+ puts JSON.parse(monitoring.to_json).to_xml(:root => 'monitoring', :skip_instruct => true)
62
+ else
63
+ puts monitoring.to_yaml
64
+ end
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # rs-describe-deployments
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
+ exit
15
+ end
16
+
17
+ opts = GetoptLong.new(
18
+ [ '--xml', '-x', GetoptLong::OPTIONAL_ARGUMENT ],
19
+ [ '--json', '-j', GetoptLong::OPTIONAL_ARGUMENT ]
20
+ )
21
+
22
+ json = false
23
+ xml = false
24
+
25
+ opts.each do |opt, arg|
26
+ case opt
27
+ when '--json'
28
+ json = true
29
+ when '--xml'
30
+ xml = true
31
+ end
32
+ end
33
+
34
+ deployments = Deployment.find_all()
35
+
36
+ if json
37
+ puts deployments.to_json
38
+ elsif xml
39
+ puts JSON.parse(deployments.to_json).to_xml(:root => 'deployments', :skip_instruct => true)
40
+ else
41
+ puts deployments.to_yaml
42
+ end