ncc-api 1.1.2 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|