ncc-api 1.1.2 → 1.2.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.
- checksums.yaml +4 -4
- data/lib/ncc-api.rb +23 -25
- data/lib/ncc.rb +11 -3
- data/lib/ncc/config.rb +6 -2
- data/lib/ncc/connection.rb +17 -7
- data/lib/ncc/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff7b4ce8e75c66fa4ec2faaf1d703d5f918f7721
|
4
|
+
data.tar.gz: d6d4a5e717d9d60373561a5bb0c65b663981d439
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 886099d41691e9de1d418bd2ddcec075b1a1ee9b8b6e288523020a55bff02faf0d9534add86a58f16de42e01f6f39aa3bddf6044710266781fe22ff6ee291af3
|
7
|
+
data.tar.gz: ab9c60986b5177f960889fa0802e38daafbec3b41418f2995e4cfd9d9bfcd6000410f8d32ecf4fb1f2db00db87ce2c22bc76b2e7e3dd8a0d4fa3660ac5cfd209
|
data/lib/ncc-api.rb
CHANGED
@@ -22,13 +22,10 @@ require 'sinatra'
|
|
22
22
|
require 'fog'
|
23
23
|
require 'rack/logger'
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
set :logging, Logger::DEBUG
|
25
|
+
def ncc
|
26
|
+
$ncc ||= NCC.new(nil, :logger => logger)
|
28
27
|
end
|
29
28
|
|
30
|
-
$ncc = NCC.new
|
31
|
-
|
32
29
|
def error_message(status, err, object=nil)
|
33
30
|
status_message = case status
|
34
31
|
when 400
|
@@ -56,6 +53,7 @@ def error_message(status, err, object=nil)
|
|
56
53
|
end
|
57
54
|
body = (params.has_key?('pretty') ? (JSON.pretty_generate(data) +
|
58
55
|
"\n") : data.to_json)
|
56
|
+
logger.error "#{status_message} (#{err.class}) #{err.message}: #{err.backtrace.join("\n")}"
|
59
57
|
[status, { "content-type" => "application/json" }, body]
|
60
58
|
end
|
61
59
|
|
@@ -82,7 +80,7 @@ end
|
|
82
80
|
|
83
81
|
get '/ncc_api' do
|
84
82
|
respond 200 do
|
85
|
-
|
83
|
+
ncc.config['services'].to_hash.merge({ 'v2api' => ncc.api_url })
|
86
84
|
end
|
87
85
|
end
|
88
86
|
|
@@ -98,23 +96,23 @@ get '/ncc_api/v2' do
|
|
98
96
|
end
|
99
97
|
|
100
98
|
get '/ncc_api/v2/clouds' do
|
101
|
-
respond(200) {
|
99
|
+
respond(200) { ncc.clouds }
|
102
100
|
end
|
103
101
|
|
104
102
|
get '/ncc_api/v2/sizes' do
|
105
|
-
respond(200) {
|
103
|
+
respond(200) { ncc.sizes }
|
106
104
|
end
|
107
105
|
|
108
106
|
get '/ncc_api/v2/images' do
|
109
|
-
respond(200) {
|
107
|
+
respond(200) { ncc.images }
|
110
108
|
end
|
111
109
|
|
112
110
|
get '/ncc_api/v2/sizes/:size_id' do |size_id|
|
113
|
-
respond(200) {
|
111
|
+
respond(200) { ncc.sizes(size_id) }
|
114
112
|
end
|
115
113
|
|
116
114
|
get '/ncc_api/v2/images/:image_id' do |image_id|
|
117
|
-
respond(200) {
|
115
|
+
respond(200) { ncc.images(image_id) }
|
118
116
|
end
|
119
117
|
|
120
118
|
get '/ncc_api/v2/clouds/:cloud' do |cloud|
|
@@ -122,30 +120,30 @@ get '/ncc_api/v2/clouds/:cloud' do |cloud|
|
|
122
120
|
{
|
123
121
|
'name' => cloud,
|
124
122
|
'status' => 'ok',
|
125
|
-
'provider' =>
|
126
|
-
'service' =>
|
123
|
+
'provider' => ncc.clouds(cloud).provider,
|
124
|
+
'service' => ncc.clouds(cloud).fog.class.to_s
|
127
125
|
}
|
128
126
|
end
|
129
127
|
end
|
130
128
|
|
131
129
|
get '/ncc_api/v2/clouds/:cloud/sizes' do |cloud|
|
132
|
-
respond(200) {
|
130
|
+
respond(200) { ncc.clouds(cloud).sizes }
|
133
131
|
end
|
134
132
|
|
135
133
|
get '/ncc_api/v2/clouds/:cloud/sizes/:size_id' do |cloud, size_id|
|
136
|
-
respond(200) {
|
134
|
+
respond(200) { ncc.clouds(cloud).sizes(size_id) }
|
137
135
|
end
|
138
136
|
|
139
137
|
get '/ncc_api/v2/clouds/:cloud/images' do |cloud|
|
140
|
-
respond(200) {
|
138
|
+
respond(200) { ncc.clouds(cloud).images }
|
141
139
|
end
|
142
140
|
|
143
141
|
get '/ncc_api/v2/clouds/:cloud/images/:image_id' do |cloud, image_id|
|
144
|
-
respond(200) {
|
142
|
+
respond(200) { ncc.clouds(cloud).images(image_id) }
|
145
143
|
end
|
146
144
|
|
147
145
|
get '/ncc_api/v2/clouds/:cloud/instances' do |cloud|
|
148
|
-
respond(200) {
|
146
|
+
respond(200) { ncc.clouds(cloud).instances.map { |i| i.to_hash } }
|
149
147
|
end
|
150
148
|
|
151
149
|
|
@@ -153,13 +151,13 @@ get '/ncc_api/v2/clouds/:cloud/instances/:instance_id/console_log' do |cloud,
|
|
153
151
|
instance_id|
|
154
152
|
respond(200, 'content-type' => 'text/plain') do
|
155
153
|
# TODO influence last-modified with console log timestamp
|
156
|
-
|
154
|
+
ncc.clouds(cloud).console_log(instance_id)['output']
|
157
155
|
end
|
158
156
|
end
|
159
157
|
|
160
158
|
get '/ncc_api/v2/clouds/:cloud/instances/:instance_id/console' do |cloud,
|
161
159
|
instance_id|
|
162
|
-
respond(200) {
|
160
|
+
respond(200) { ncc.clouds(cloud).console(instance_id) }
|
163
161
|
end
|
164
162
|
|
165
163
|
post '/ncc_api/v2/clouds/:cloud/instances' do |cloud|
|
@@ -168,7 +166,7 @@ post '/ncc_api/v2/clouds/:cloud/instances' do |cloud|
|
|
168
166
|
request.body.rewind
|
169
167
|
instance_spec = JSON.parse(request.body.read)
|
170
168
|
instance_req = instance_spec
|
171
|
-
|
169
|
+
ncc.clouds(cloud).create_instance(instance_req)
|
172
170
|
rescue JSON::ParserError => e
|
173
171
|
raise NCC::Error::Client, "Error parsing request: #{e.message}"
|
174
172
|
end
|
@@ -177,7 +175,7 @@ end
|
|
177
175
|
|
178
176
|
get '/ncc_api/v2/clouds/:cloud/instances/:instance_id' do |cloud, instance_id|
|
179
177
|
respond(200) do
|
180
|
-
|
178
|
+
ncc.clouds(cloud).instances(instance_id).to_hash
|
181
179
|
end
|
182
180
|
end
|
183
181
|
|
@@ -185,14 +183,14 @@ end
|
|
185
183
|
delete '/ncc_api/v2/clouds/:cloud/instances/:instance_id' do |cloud,
|
186
184
|
instance_id|
|
187
185
|
respond 204 do
|
188
|
-
|
186
|
+
ncc.clouds(cloud).delete(instance_id)
|
189
187
|
nil
|
190
188
|
end
|
191
189
|
end
|
192
190
|
|
193
191
|
put '/ncc_api/v2/clouds/:cloud/instances/:instance_id' do |cloud, instance_id|
|
194
192
|
respond 202 do
|
195
|
-
instance =
|
193
|
+
instance = ncc.clouds(cloud).instances(instance_id)
|
196
194
|
begin
|
197
195
|
request.body.rewind
|
198
196
|
update_spec = JSON.parse(request.body.read)
|
@@ -205,7 +203,7 @@ put '/ncc_api/v2/clouds/:cloud/instances/:instance_id' do |cloud, instance_id|
|
|
205
203
|
when 'status'
|
206
204
|
if value == 'reboot'
|
207
205
|
actions << lambda { instance.status = 'reboot' }
|
208
|
-
|
206
|
+
ncc.clouds(cloud).reboot(instance.id)
|
209
207
|
else
|
210
208
|
raise NCC::Error::Client,
|
211
209
|
"Cannot update to status #{value.inspect}"
|
data/lib/ncc.rb
CHANGED
@@ -26,10 +26,11 @@ require 'ncc/version'
|
|
26
26
|
|
27
27
|
class NCC::Configurator
|
28
28
|
|
29
|
-
attr_accessor :config_path
|
29
|
+
attr_accessor :config_path, :logger
|
30
30
|
|
31
31
|
def initialize
|
32
32
|
@config_path = ['/etc/ncc-api']
|
33
|
+
@logger = nil
|
33
34
|
end
|
34
35
|
|
35
36
|
end
|
@@ -44,22 +45,29 @@ class NCC
|
|
44
45
|
end
|
45
46
|
|
46
47
|
def initialize(config_path=nil, opt={})
|
47
|
-
@logger = opt[:logger]
|
48
|
+
@logger = opt[:logger] || @@global_config.logger
|
48
49
|
config_path ||= @@global_config.config_path
|
49
50
|
config_path = [config_path] unless config_path.respond_to? :unshift
|
50
51
|
config_path.unshift(File.join(ENV['NCCAPI_HOME'], 'etc')) if
|
51
52
|
ENV['NCCAPI_HOME']
|
53
|
+
info "Loading configuration from: #{config_path.inspect}"
|
52
54
|
@config = NCC::Config.new(config_path, :logger => @logger)
|
53
55
|
@inventory = NOMS::CMDB.new(@config)
|
54
56
|
@clouds = { }
|
55
57
|
end
|
56
58
|
|
57
59
|
def debug(msg)
|
58
|
-
if @logger.respond_to? :debug
|
60
|
+
if @logger and @logger.respond_to? :debug
|
59
61
|
@logger.debug "#{me}: #{msg}"
|
60
62
|
end
|
61
63
|
end
|
62
64
|
|
65
|
+
def info(msg)
|
66
|
+
if @logger and @logger.respond_to? :info
|
67
|
+
@logger.info "#{me}: #{msg}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
63
71
|
def me
|
64
72
|
self.class
|
65
73
|
end
|
data/lib/ncc/config.rb
CHANGED
@@ -105,8 +105,12 @@ class NCC::Config
|
|
105
105
|
end
|
106
106
|
|
107
107
|
def debug(msg)
|
108
|
-
|
109
|
-
|
108
|
+
# This produces a *lot* of debug logging, thus it's best to be
|
109
|
+
# able to use something else to control its log level.
|
110
|
+
if ENV.has_key? 'NCC_CONFIG_DEBUG' and not ENV['NCC_CONFIG_DEBUG'].empty?
|
111
|
+
if opt(:logger) and opt(:logger).respond_to? :debug
|
112
|
+
opt(:logger).debug "#<#{me}>: #{msg}"
|
113
|
+
end
|
110
114
|
end
|
111
115
|
end
|
112
116
|
|
data/lib/ncc/connection.rb
CHANGED
@@ -15,9 +15,6 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
# */
|
17
17
|
|
18
|
-
# TODO:
|
19
|
-
# Align desired logger interface with Ruby Logger class standard
|
20
|
-
|
21
18
|
require 'rubygems'
|
22
19
|
require 'fog'
|
23
20
|
require 'uuidtools'
|
@@ -90,8 +87,8 @@ class NCC::Connection
|
|
90
87
|
end
|
91
88
|
|
92
89
|
def notice(msg)
|
93
|
-
if @logger and @logger.respond_to? :
|
94
|
-
@logger.
|
90
|
+
if @logger and @logger.respond_to? :info
|
91
|
+
@logger.info "#{self} #{msg}"
|
95
92
|
end
|
96
93
|
end
|
97
94
|
|
@@ -101,11 +98,24 @@ class NCC::Connection
|
|
101
98
|
end
|
102
99
|
end
|
103
100
|
|
101
|
+
def error(msg)
|
102
|
+
if @logger and @logger.respond_to? :error
|
103
|
+
@logger.error "#{self} #{msg}"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def fatal(msg)
|
108
|
+
if @logger and @logger.respond_to? :fatal
|
109
|
+
@logger.error "#{self} #{msg}"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
104
113
|
def connection_params
|
105
114
|
[]
|
106
115
|
end
|
107
116
|
|
108
117
|
def do_connect
|
118
|
+
info "Connecting to #{provider} cloud #{@cloud}"
|
109
119
|
cloud_config = @cfg[:clouds][@cloud]
|
110
120
|
pnames = connection_params + ['provider']
|
111
121
|
params = Hash[cloud_config.to_hash(*pnames).map do |k, v|
|
@@ -564,9 +574,9 @@ class NCC::Connection
|
|
564
574
|
end
|
565
575
|
|
566
576
|
def communication_error(message)
|
567
|
-
|
577
|
+
raise NCC::Error::Cloud,
|
578
|
+
"Error communicating with #{provider} cloud #{@cloud}: " + message unless
|
568
579
|
/Error .*communicating with/.match(message)
|
569
|
-
raise NCC::Error::Cloud, message
|
570
580
|
end
|
571
581
|
|
572
582
|
def delete(instance_id)
|
data/lib/ncc/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ncc-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Brinkley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fog
|