rs-api-tools 0.0.11 → 0.0.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c854b79a460b0c432cd8bbfb7e260fd630ecafa
4
- data.tar.gz: db3e2c9037c24a6f96452324690b50c5c27c60a4
3
+ metadata.gz: c6c61c438074f0ea0b7f9768be0e3177bb5b13ec
4
+ data.tar.gz: b3037bfb6c61cae09b1bc3d881be120a470dc8ea
5
5
  SHA512:
6
- metadata.gz: d6004ac7c3848bf1ca5b75f3889588d98a1a3b5a0f1edaf99285f29a38532297a31aa469f3174e6d9a105efffcfbd1f282d7b34187753765fb06c3dd98ef6d9f
7
- data.tar.gz: 62fb5384c226a47b2041e40182dca7fb5c06e8db61072d18f8ebd61f08200e97fd1d4a0e174639b7e888f7b99ad1a7ebbb298237417ea8770e9a36e6f619318a
6
+ metadata.gz: 981c1fd8c80e2892b5b91b1a7010f694f22df5ae419f0cd02bca7980a2a6100078ebd35bae9869e6bb8f8de7ea39d2a94d3b7500823918cff618ba18ab64be50
7
+ data.tar.gz: 6c37c1710ca89b89ce904ae9a43f68eaa91785f3ac23f56cb1189d902baec0fff11f554aba66d1022e21d35bddc172c89881c0c9e89d6ab7cba680695828b0c0
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/ruby
2
2
 
3
+ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
4
+
3
5
  def usage
4
6
  puts "usage: rs-create-deployment"
5
7
  puts ''
@@ -15,30 +17,38 @@ def help_info
15
17
  puts ''
16
18
  puts "Creates a RightScale Deployment."
17
19
  puts ''
18
- puts "examples: rs-create-deployment"
20
+ puts "examples: rs-create-deployment --name Gremlins"
21
+ puts " rs-create-deployment --metadata https://raw.github.com/rightscale-meta/deployments/master/base_servertemplate_for_linux_v13.5.yaml --edit"
22
+ puts " rs-create-deployment --metadata rightscale.yaml"
19
23
  puts ''
20
24
  end
21
25
 
22
26
  require 'rubygems'
23
27
  require 'getoptlong'
28
+ require 'yesno'
29
+ require 'yaml'
30
+ require 'rightscale_metadata'
24
31
 
25
32
  deployment = Hash.new
26
- deployment['description'] = ''
27
33
  deployment['name'] = false
34
+ deployment['description'] = ''
28
35
  deployment['server_tag_scope'] = 'account'
36
+ deployment['metadata_source'] = false
29
37
 
30
- metadata = false
31
- interactive = true
32
- verbose = false
33
- dry = false
34
- debug = false
35
- help = false
38
+ settings = Hash.new
39
+ settings['interactive'] = true
40
+ settings['verbose'] = false
41
+ settings['dry'] = false
42
+ settings['edit'] = false
43
+ settings['debug'] = false
44
+ settings['help'] = false
36
45
 
37
46
  opts = GetoptLong.new(
38
47
  [ '--name', '-n', GetoptLong::REQUIRED_ARGUMENT ],
39
48
  [ '--description', '-d', GetoptLong::OPTIONAL_ARGUMENT ],
40
49
  [ '--metadata', '-m', GetoptLong::OPTIONAL_ARGUMENT ],
41
50
  [ '--non-interactive', GetoptLong::NO_ARGUMENT ],
51
+ [ '--edit', GetoptLong::NO_ARGUMENT ],
42
52
  [ '--verbose', '-v', GetoptLong::NO_ARGUMENT ],
43
53
  [ '--debug', '-D', GetoptLong::NO_ARGUMENT ],
44
54
  [ '--dry', GetoptLong::NO_ARGUMENT ],
@@ -52,68 +62,58 @@ opts.each do |opt, arg|
52
62
  when '--description'
53
63
  deployment['description'] = arg
54
64
  when '--metadata'
55
- metadata = arg
65
+ deployment['metadata_source'] = arg
56
66
  when '--non-interactive'
57
- interactive = false
67
+ settings['interactive'] = false
58
68
  when '--help'
59
- help = true
69
+ settings['help'] = true
60
70
  when '--verbose'
61
- verbose = true
71
+ settings['verbose'] = true
62
72
  when '--debug'
63
- debug = true
73
+ settings['debug'] = true
64
74
  when '--dry'
65
- dry = true
75
+ settings['dry'] = true
76
+ when '--edit'
77
+ settings['edit'] = true
66
78
  end
67
79
  end
68
80
 
69
- if help
81
+ if settings['help']
70
82
  help_info
71
83
  exit
72
84
  end
73
85
 
74
- usage_exit if !(deployment['name'] || metadata)
75
-
76
- def yesno
77
- begin
78
- system("stty raw -echo")
79
- str = STDIN.getc
80
- ensure
81
- system("stty -raw echo")
82
- end
83
- if str.downcase == "y"
84
- return true
85
- elsif str.downcase == "n"
86
- return false
87
- else
88
- raise "Invalid response. Please enter y/n."
89
- end
90
- end
86
+ puts settings if (settings['debug'] || settings['verbose'])
87
+ usage_exit if !(deployment['name'] || deployment['metadata_source'])
91
88
 
92
- require 'yaml'
93
89
  require 'right_api_client'
94
90
  rightscale = RightApi::Client.new(YAML.load_file(File.join(ENV['HOME'], '.rightscale', 'right_api_client.yml')))
95
91
 
96
- require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'rightscale_metadata'))
97
-
98
92
  # creation via supply of metadata file
99
- if metadata
100
- require 'net/http'
101
- require 'uri'
102
- require 'yaml'
103
-
104
- uri = URI.parse(metadata)
105
- if %w( http https ).include?(uri.scheme)
106
- metadata = YAML.load(Net::HTTP.get(uri))
107
- else
108
- metadata = YAML.load_file(metadata)
93
+ if deployment['metadata_source']
94
+ metadata = RightScaleMetadata.new(deployment['metadata_source']).metadata
95
+ if settings['edit']
96
+ require 'securerandom'
97
+
98
+ def editor_command
99
+ ENV.fetch('EDITOR') { 'vi' }
100
+ end
101
+ temp_path = "/tmp/rs-meta-#{Process.pid}-#{SecureRandom.hex}"
102
+ puts "metadata tempfile: #{temp_path}" if settings['debug'] if settings['debug']
103
+ IO.write(temp_path, YAML::dump(metadata))
104
+ system("#{editor_command} #{temp_path}")
105
+ metadata = RightScaleMetadata.new(temp_path).metadata
109
106
  end
110
- deployment = deployment.merge(metadata['deployment'])
111
107
  end
112
108
 
109
+ deployment.merge!(metadata['deployment'])
110
+
111
+ puts deployment if settings['debug']
112
+
113
113
  puts "Creating deployment, '#{deployment['name']}'."
114
- puts deployment if (verbose || debug)
114
+ puts deployment if (settings['verbose'] || settings['debug'])
115
115
 
116
- if dry
116
+ if settings['dry']
117
117
  puts 'Dry run, skipping creation of deployment.'
118
118
  exit
119
119
  else
@@ -121,9 +121,9 @@ else
121
121
  puts "Success, resource href: #{created_deployment.href}."
122
122
  end
123
123
 
124
- if metadata
124
+ if deployment['metadata_source']
125
125
  puts 'Creating servers...'
126
- puts deployment['servers'] if debug
126
+ puts deployment['servers'] if settings['debug']
127
127
  deployment['servers'].each { |server|
128
128
  server['instance'] = Hash.new
129
129
  server['deployment_href'] = created_deployment.href
@@ -145,7 +145,8 @@ if metadata
145
145
  server['instance']['cloud_href'] = "/api/clouds/#{server['cloud_id']}"
146
146
 
147
147
  puts 'Creating server.'
148
- puts "server: #{server}" if (debug || verbose)
149
- rightscale.servers.create({ :server => server })
148
+ puts "server: #{server}" if (settings['debug'] || settings['verbose'])
149
+ created_server = rightscale.servers.create({ :server => server })
150
+ puts "Success, resource href: #{created_server.href}."
150
151
  }
151
152
  end
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/ruby
2
+
3
+ def usage
4
+ puts "usage: rs-describe-instance-self"
5
+ puts ''
6
+ end
7
+
8
+ def usage_exit
9
+ usage; exit
10
+ end
11
+
12
+ def help_info
13
+ puts("#{$0}")
14
+ puts ''
15
+ puts "Describes the RightScale instance using the instance-facing API."
16
+ puts ''
17
+ puts 'Note: this can only be run on a RightScale-managed server.)'
18
+ puts ''
19
+ puts "examples: rs-describe-instance-self"
20
+ puts ''
21
+ end
22
+
23
+ require 'rubygems'
24
+ require 'getoptlong'
25
+ require 'yaml'
26
+
27
+ settings = Hash.new
28
+ settings['output'] = 'yaml'
29
+ settings['silent'] = false
30
+ settings['verbose'] = false
31
+ settings['debug'] = false
32
+ settings['help'] = false
33
+ settings['silent'] = false
34
+
35
+ opts = GetoptLong.new(
36
+ [ '--xml', '-x', GetoptLong::NO_ARGUMENT ],
37
+ [ '--json', '-j', GetoptLong::NO_ARGUMENT ],
38
+ [ '--verbose', '-v', GetoptLong::NO_ARGUMENT ],
39
+ [ '--debug', '-D', GetoptLong::NO_ARGUMENT ],
40
+ [ '--silent', '-s', GetoptLong::NO_ARGUMENT ],
41
+ [ '--help', '-h', GetoptLong::NO_ARGUMENT ]
42
+ )
43
+
44
+ opts.each do |opt, arg|
45
+ case opt
46
+ when '--xml'
47
+ settings['output'] = 'xml'
48
+ when '--json'
49
+ settings['output'] = 'json'
50
+ when '--help'
51
+ settings['help'] = true
52
+ when '--verbose'
53
+ settings['verbose'] = true
54
+ when '--debug'
55
+ settings['debug'] = true
56
+ when '--silent'
57
+ settings['silent'] = true
58
+ end
59
+ end
60
+
61
+ if settings['help']
62
+ help_info
63
+ exit
64
+ end
65
+
66
+ puts settings if settings['debug']
67
+
68
+ require '/var/spool/cloud/user-data.rb'
69
+ require 'right_api_client'
70
+
71
+ account_id, instance_token = ENV['RS_API_TOKEN'].split /:/
72
+
73
+ puts 'Getting instance...' unless settings['silent']
74
+ instance = RightApi::Client.new(:instance_token => instance_token, :account_id => account_id).get_instance.raw
75
+
76
+ case settings['output']
77
+ when 'xml'
78
+ require "active_support/core_ext"
79
+ puts instance.to_xml(:root => 'instance')
80
+ when 'json'
81
+ require 'json'
82
+ puts JSON.pretty_generate(instance)
83
+ when 'yaml'
84
+ puts instance.to_yaml
85
+ end
@@ -0,0 +1,15 @@
1
+ def yesno
2
+ begin
3
+ system("stty raw -echo")
4
+ str = STDIN.getc
5
+ ensure
6
+ system("stty -raw echo")
7
+ end
8
+ if str.downcase == "y"
9
+ return true
10
+ elsif str.downcase == "n"
11
+ return false
12
+ else
13
+ raise "Invalid response. Please enter y/n."
14
+ end
15
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rs-api-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Fordham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-08 00:00:00.000000000 Z
11
+ date: 2013-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -116,6 +116,7 @@ executables:
116
116
  - rs-describe-ec2-ebs-volumes
117
117
  - rs-bind-executable
118
118
  - rs-terminate-server
119
+ - rs-describe-instance-self
119
120
  - rs-run-recipe
120
121
  - rs-describe-servertemplates
121
122
  - rs-search-tags
@@ -162,6 +163,7 @@ extensions: []
162
163
  extra_rdoc_files: []
163
164
  files:
164
165
  - lib/librarian_chef_dsl_parser.rb
166
+ - lib/yesno.rb
165
167
  - lib/rightscale_metadata.rb
166
168
  - bin/rs-create-alert
167
169
  - bin/rs-describe-rightscripts
@@ -196,6 +198,7 @@ files:
196
198
  - bin/rs-describe-ec2-ebs-volumes
197
199
  - bin/rs-bind-executable
198
200
  - bin/rs-terminate-server
201
+ - bin/rs-describe-instance-self
199
202
  - bin/rs-run-recipe
200
203
  - bin/rs-describe-servertemplates
201
204
  - bin/rs-search-tags