megam_api 0.15 → 0.16
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/README.md +8 -10
- data/lib/megam/api.rb +34 -20
- data/lib/megam/api/csars.rb +50 -0
- data/lib/megam/api/version.rb +1 -1
- data/lib/megam/builder/delete_node.rb +1 -1
- data/lib/megam/builder/make_node.rb +1 -1
- data/lib/megam/core/app_request.rb +1 -1
- data/lib/megam/core/app_request_collection.rb +1 -1
- data/lib/megam/core/appdefns.rb +1 -1
- data/lib/megam/core/appdefns_collection.rb +1 -1
- data/lib/megam/core/bolt_request.rb +1 -1
- data/lib/megam/core/bolt_request_collection.rb +1 -1
- data/lib/megam/core/boltdefns.rb +1 -1
- data/lib/megam/core/boltdefns_collection.rb +1 -1
- data/lib/megam/core/cloudinstruction.rb +1 -1
- data/lib/megam/core/cloudinstruction_collection.rb +1 -1
- data/lib/megam/core/cloudinstruction_group.rb +1 -1
- data/lib/megam/core/cloudtemplate.rb +1 -1
- data/lib/megam/core/cloudtemplate_collection.rb +1 -1
- data/lib/megam/core/cloudtool.rb +1 -1
- data/lib/megam/core/cloudtool_collection.rb +1 -1
- data/lib/megam/core/cloudtoolsetting.rb +1 -1
- data/lib/megam/core/cloudtoolsetting_collection.rb +1 -1
- data/lib/megam/core/config.rb +3 -3
- data/lib/megam/core/csar.rb +165 -0
- data/lib/megam/core/csar_collection.rb +148 -0
- data/lib/megam/core/json_compat.rb +12 -3
- data/lib/megam/core/konipai.rb +57 -0
- data/lib/megam/core/marketplace.rb +20 -20
- data/lib/megam/core/marketplace_addon.rb +8 -8
- data/lib/megam/core/marketplace_addon_collection.rb +1 -1
- data/lib/megam/core/marketplace_collection.rb +1 -1
- data/lib/megam/core/node.rb +1 -1
- data/lib/megam/core/node_collection.rb +1 -1
- data/lib/megam/core/predef.rb +1 -1
- data/lib/megam/core/predef_collection.rb +1 -1
- data/lib/megam/core/predefcloud.rb +1 -1
- data/lib/megam/core/predefcloud_collection.rb +1 -1
- data/lib/megam/core/request.rb +1 -1
- data/lib/megam/core/request_collection.rb +1 -1
- data/lib/megam/core/server_api.rb +4 -5
- data/lib/megam/core/sshkey.rb +1 -1
- data/lib/megam/core/sshkey_collection.rb +1 -1
- data/megam_api.gemspec +7 -7
- data/test/test_cloudtoolsettings.rb +3 -3
- data/test/test_csars.rb +21 -0
- data/test/test_helper.rb +1 -1
- data/test/test_marketplaces.rb +8 -8
- data/test/test_nodes.rb +4 -4
- data/test/test_predefclouds.rb +4 -4
- data/test/test_requests.rb +1 -1
- data/test/test_sshkeys.rb +1 -1
- metadata +19 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 09998b376d64a74fe84a95ed4cbb426827e7d853
|
4
|
+
data.tar.gz: 6e69181f6b9a5e77358f957d37b7c011c2efddda
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1bd5cc89a3851223ddbb64e8a60fbda88cc68c60854f569715cd0eeb3ab10e67393697854dc9b7273e12c852385fa8e54a85794a2d356deccafcc019d6772cf
|
7
|
+
data.tar.gz: 69f3175a199fc9614099969ac8150ab78f56244f0b5ca27c2bbea545a524a6183de60e5e5c4276fc5653a1823264acff36b40ebd79bc1eb4d2d13f74067d519e
|
data/README.md
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
Megam Ruby Client
|
2
2
|
==================
|
3
3
|
|
4
|
-
|
4
|
+
[](http://badge.fury.io/rb/megam_api)
|
5
5
|
|
6
|
-
|
6
|
+
Megam Ruby Client is used to interact with the Megam API Server.
|
7
|
+
|
8
|
+
For more about the Megam' REST API <http://gomegam.com/docs>.[Megam API server](https://github.com/indykish/megam_play.git)
|
7
9
|
|
8
10
|
[](https://travis-ci.org/indykish/megam_api)
|
9
11
|
|
10
|
-
|
12
|
+
We are on beta [register at:](https://www.megam.co)
|
11
13
|
|
12
14
|
Usage
|
13
15
|
-----
|
@@ -32,14 +34,10 @@ For additional details about any of the commands, see the [API docs](http://docs
|
|
32
34
|
megam.get_nodes # get a list of your nodes
|
33
35
|
megam.get_node(POGO) # get info about the node named POGO
|
34
36
|
megam.create_node('name' => POGO,
|
35
|
-
'type' => 'rails')
|
37
|
+
'type' => 'rails') # create an nodep with a generated name and the default type
|
36
38
|
megam.delete_node(POGO) # delete the node named POGO
|
37
39
|
|
38
40
|
|
39
|
-
### Logs
|
40
|
-
|
41
|
-
megam.get_logs('node' => POGO) # stream logs information for POGO Node
|
42
|
-
|
43
41
|
### Predefs
|
44
42
|
|
45
43
|
megam.get_predefs # list all predefs
|
@@ -53,11 +51,11 @@ For additional details about any of the commands, see the [API docs](http://docs
|
|
53
51
|
|
54
52
|
We are glad to help if you have questions, or request for new features.
|
55
53
|
|
56
|
-
[twitter](http://twitter.com/
|
54
|
+
[twitter](http://twitter.com/megamsys) [email](<alrin@megam.co.in>)
|
57
55
|
|
58
56
|
#### TO - DO
|
59
57
|
|
60
|
-
*
|
58
|
+
*
|
61
59
|
|
62
60
|
# License
|
63
61
|
|
data/lib/megam/api.rb
CHANGED
@@ -31,6 +31,7 @@ require "megam/api/cloud_tool_settings"
|
|
31
31
|
require "megam/api/sshkeys"
|
32
32
|
require "megam/api/marketplaces"
|
33
33
|
require "megam/api/marketplace_addons"
|
34
|
+
require "megam/api/csars"
|
34
35
|
require "megam/core/server_api"
|
35
36
|
require "megam/core/config"
|
36
37
|
require "megam/core/stuff"
|
@@ -73,10 +74,9 @@ require "megam/core/marketplace"
|
|
73
74
|
require "megam/core/marketplace_collection"
|
74
75
|
require "megam/core/marketplace_addon"
|
75
76
|
require "megam/core/marketplace_addon_collection"
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
77
|
+
require "megam/core/csar"
|
78
|
+
require "megam/core/csar_collection"
|
79
|
+
require "megam/core/konipai"
|
80
80
|
|
81
81
|
|
82
82
|
module Megam
|
@@ -85,6 +85,13 @@ module Megam
|
|
85
85
|
#text is used to print stuff in the terminal (message, log, info, warn etc.)
|
86
86
|
attr_accessor :text
|
87
87
|
|
88
|
+
API_MEGAM_CO = "api.megam.co".freeze
|
89
|
+
API_VERSION2 = "/v2".freeze
|
90
|
+
|
91
|
+
X_Megam_DATE = "X-Megam-DATE".freeze
|
92
|
+
X_Megam_HMAC = "X-Megam-HMAC".freeze
|
93
|
+
X_Megam_OTTAI = "X-Megam-OTTAI".freeze
|
94
|
+
|
88
95
|
HEADERS = {
|
89
96
|
'Accept' => 'application/json',
|
90
97
|
'Accept-Encoding' => 'gzip',
|
@@ -95,11 +102,11 @@ module Megam
|
|
95
102
|
|
96
103
|
OPTIONS = {
|
97
104
|
:headers => {},
|
98
|
-
:host =>
|
105
|
+
:host => API_MEGAM_CO,
|
99
106
|
:nonblock => false,
|
100
107
|
:scheme => 'https'
|
101
108
|
}
|
102
|
-
|
109
|
+
|
103
110
|
|
104
111
|
def text
|
105
112
|
@text ||= Megam::Text.new(STDOUT, STDERR, STDIN, {})
|
@@ -118,11 +125,11 @@ module Megam
|
|
118
125
|
# 3. Upon merge of the options, the api_key, email as available in the @options is deleted.
|
119
126
|
def initialize(options={})
|
120
127
|
@options = OPTIONS.merge(options)
|
121
|
-
if File.exist?("#{ENV['MEGAM_HOME']}/nilavu.yml")
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
end
|
128
|
+
if File.exist?("#{ENV['MEGAM_HOME']}/nilavu.yml")
|
129
|
+
@common = YAML.load_file("#{ENV['MEGAM_HOME']}/nilavu.yml") #COMMON YML
|
130
|
+
@options[:host] = "#{@common["api"]["host"]}"
|
131
|
+
@options[:scheme] = "#{@common["api"]["scheme"]}"
|
132
|
+
end
|
126
133
|
@api_key = @options.delete(:api_key) || ENV['MEGAM_API_KEY']
|
127
134
|
@email = @options.delete(:email)
|
128
135
|
raise ArgumentError, "You must specify [:email, :api_key]" if @email.nil? || @api_key.nil?
|
@@ -136,8 +143,8 @@ end
|
|
136
143
|
Megam::Log.debug("> #{pkey}: #{pvalue}")
|
137
144
|
end
|
138
145
|
|
139
|
-
begin
|
140
|
-
response = connection.request(params, &block)
|
146
|
+
begin
|
147
|
+
response = connection.request(params, &block)
|
141
148
|
rescue Excon::Errors::HTTPStatusError => error
|
142
149
|
klass = case error.response.status
|
143
150
|
|
@@ -170,14 +177,20 @@ end
|
|
170
177
|
|
171
178
|
if response.body && !response.body.empty?
|
172
179
|
if response.headers['Content-Encoding'] == 'gzip'
|
180
|
+
Megam::Log.debug("RESPONSE: Content-Encoding is gzip")
|
173
181
|
response.body = Zlib::GzipReader.new(StringIO.new(response.body)).read
|
174
182
|
end
|
175
183
|
Megam::Log.debug("RESPONSE: HTTP Body(JSON)")
|
176
184
|
Megam::Log.debug("#{response.body}")
|
177
185
|
|
178
186
|
begin
|
179
|
-
|
180
|
-
|
187
|
+
unless response.headers[X_Megam_OTTAI]
|
188
|
+
response.body = Megam::JSONCompat.from_json(response.body.chomp)
|
189
|
+
Megam::Log.debug("RESPONSE: Ruby Object")
|
190
|
+
else
|
191
|
+
response.body = Megam::KoniPai.new.koni(response.body.chomp)
|
192
|
+
Megam::Log.debug("RESPONSE: KoniPai Object ")
|
193
|
+
end
|
181
194
|
Megam::Log.debug("#{response.body}")
|
182
195
|
rescue Exception => jsonerr
|
183
196
|
Megam::Log.error(jsonerr)
|
@@ -196,18 +209,19 @@ end
|
|
196
209
|
text.msg "--> #{text.color('(#{path})', :cyan,:bold)}" # Why " inside "
|
197
210
|
end
|
198
211
|
|
212
|
+
|
213
|
+
|
199
214
|
#Make a lazy connection.
|
200
215
|
def connection
|
201
|
-
@options[:path] =
|
216
|
+
@options[:path] =API_VERSION2+ @options[:path]
|
202
217
|
encoded_api_header = encode_header(@options)
|
203
218
|
@options[:headers] = HEADERS.merge({
|
204
|
-
|
205
|
-
|
219
|
+
X_Megam_HMAC => encoded_api_header[:hmac],
|
220
|
+
X_Megam_DATE => encoded_api_header[:date],
|
206
221
|
}).merge(@options[:headers])
|
207
222
|
#COMMON YML
|
208
223
|
if @options[:scheme] == "https"
|
209
|
-
|
210
|
-
Excon.defaults[:ssl_ca_file] = File.expand_path(File.join("#{ENV['MEGAM_HOME']}", "#{@common["api"]["pub_key"]}")) || File.expand_path(File.join(File.dirname(__FILE__), "..", "certs", "cacert.pem")) #COMMON YML
|
224
|
+
Excon.defaults[:ssl_ca_file] = File.expand_path(File.join("#{ENV['MEGAM_HOME']}", "#{@common["api"]["pub_key"]}")) || File.expand_path(File.join(File.dirname(__FILE__), "..", "certs", "cacert.pem")) #COMMON YML
|
211
225
|
|
212
226
|
if !File.exist?(File.expand_path(File.join("#{ENV['MEGAM_HOME']}", "#{@common["api"]["pub_key"]}")))
|
213
227
|
text.warn("Certificate file does not exist. SSL_VERIFY_PEER set as false")
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Megam
|
2
|
+
class API
|
3
|
+
|
4
|
+
# GET /csars
|
5
|
+
def get_csars
|
6
|
+
@options = {:path => '/csars',:body => ""}.merge(@options)
|
7
|
+
|
8
|
+
request(
|
9
|
+
:expects => 200,
|
10
|
+
:method => :get,
|
11
|
+
:body => @options[:body]
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_csar(id)
|
16
|
+
@options = {:path => "/csars/#{id}",:body => ""}.merge(@options)
|
17
|
+
|
18
|
+
request(
|
19
|
+
:expects => 200,
|
20
|
+
:method => :get,
|
21
|
+
:body => @options[:body]
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
def post_csar(new_csar)
|
26
|
+
@options = {:path => '/csars/content',
|
27
|
+
:body => Megam::JSONCompat.to_json(new_node)}.merge(@options)
|
28
|
+
|
29
|
+
request(
|
30
|
+
:expects => 201,
|
31
|
+
:method => :post,
|
32
|
+
:body => @options[:body]
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
#Yet to be tested
|
37
|
+
# DELETE /marketplacess/:node_id
|
38
|
+
def delete_marketplaceapp(node_id)
|
39
|
+
@options = {:path => '/marketplaces/#{node_id}',
|
40
|
+
:body => ""}.merge(@options)
|
41
|
+
|
42
|
+
request(
|
43
|
+
:expects => 200,
|
44
|
+
:method => :delete,
|
45
|
+
:body => @options[:body]
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
data/lib/megam/api/version.rb
CHANGED
data/lib/megam/core/appdefns.rb
CHANGED
data/lib/megam/core/boltdefns.rb
CHANGED
data/lib/megam/core/cloudtool.rb
CHANGED
data/lib/megam/core/config.rb
CHANGED
@@ -20,14 +20,14 @@ module Megam
|
|
20
20
|
class Config
|
21
21
|
|
22
22
|
extend Mixlib::Config
|
23
|
-
|
23
|
+
|
24
24
|
def self.inspect
|
25
25
|
configuration.inspect
|
26
26
|
end
|
27
27
|
|
28
28
|
megam_api_server_url "http://localhost:9000"
|
29
|
-
|
30
|
-
megam_api_version "
|
29
|
+
|
30
|
+
megam_api_version "v2"
|
31
31
|
|
32
32
|
email nil
|
33
33
|
api_key nil
|
@@ -0,0 +1,165 @@
|
|
1
|
+
# Copyright:: Copyright (c) 2012, 2014 Megam Systems
|
2
|
+
# License:: Apache License, Version 2.0
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
require 'hashie'
|
17
|
+
|
18
|
+
module Megam
|
19
|
+
class CSAR < Megam::ServerAPI
|
20
|
+
def initialize(email=nil, api_key=nil)
|
21
|
+
@id = nil
|
22
|
+
@desc = nil
|
23
|
+
@link = {}
|
24
|
+
@some_msg = {}
|
25
|
+
@created_at = nil
|
26
|
+
super(email, api_key)
|
27
|
+
end
|
28
|
+
|
29
|
+
def csar
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
def id(arg=nil)
|
34
|
+
if arg != nil
|
35
|
+
@id = arg
|
36
|
+
else
|
37
|
+
@id
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def desc(arg=nil)
|
42
|
+
if arg != nil
|
43
|
+
@desc = arg
|
44
|
+
else
|
45
|
+
@desc
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
def link(arg=nil)
|
51
|
+
if arg != nil
|
52
|
+
@link = arg
|
53
|
+
else
|
54
|
+
@link
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
def created_at(arg=nil)
|
60
|
+
if arg != nil
|
61
|
+
@created_at = arg
|
62
|
+
else
|
63
|
+
@created_at
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def some_msg(arg=nil)
|
68
|
+
if arg != nil
|
69
|
+
@some_msg = arg
|
70
|
+
else
|
71
|
+
@some_msg
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def error?
|
76
|
+
crocked = true if (some_msg.has_key?(:msg_type) && some_msg[:msg_type] == "error")
|
77
|
+
end
|
78
|
+
|
79
|
+
# Transform the ruby obj -> to a Hash
|
80
|
+
def to_hash
|
81
|
+
index_hash = Hash.new
|
82
|
+
index_hash["json_claz"] = self.class.name
|
83
|
+
index_hash["id"] = id
|
84
|
+
index_hash["desc"] = desc
|
85
|
+
index_hash["link"] = link
|
86
|
+
index_hash["some_msg"] = some_msg
|
87
|
+
index_hash["created_at"] = created_at
|
88
|
+
index_hash
|
89
|
+
end
|
90
|
+
|
91
|
+
# Serialize this object as a hash: called from JsonCompat.
|
92
|
+
# Verify if this called from JsonCompat during testing.
|
93
|
+
def to_json(*a)
|
94
|
+
for_json.to_json(*a)
|
95
|
+
end
|
96
|
+
|
97
|
+
def for_json
|
98
|
+
result = {
|
99
|
+
"id" => id,
|
100
|
+
"desc" => desc,
|
101
|
+
"link" => link,
|
102
|
+
"created_at" => created_at
|
103
|
+
}
|
104
|
+
result
|
105
|
+
end
|
106
|
+
|
107
|
+
def self.json_create(o)
|
108
|
+
csarjslf = new
|
109
|
+
csarjslf.id(o["id"]) if o.has_key?("id")
|
110
|
+
csarjslf.desc(o["desc"]) if o.has_key?("desc")
|
111
|
+
csarjslf.link(o["link"]) if o.has_key?("link")
|
112
|
+
|
113
|
+
#success or error
|
114
|
+
csarjslf.some_msg[:code] = o["code"] if o.has_key?("code")
|
115
|
+
csarjslf.some_msg[:msg_type] = o["msg_type"] if o.has_key?("msg_type")
|
116
|
+
csarjslf.some_msg[:msg]= o["msg"] if o.has_key?("msg")
|
117
|
+
csarjslf.some_msg[:links] = o["links"] if o.has_key?("links")
|
118
|
+
|
119
|
+
csarjslf
|
120
|
+
end
|
121
|
+
|
122
|
+
def self.from_hash(o,tmp_email=nil, tmp_api_key=nil)
|
123
|
+
csarhslf = self.new(tmp_email, tmp_api_key)
|
124
|
+
csarhslf.from_hash(o)
|
125
|
+
csarhslf
|
126
|
+
end
|
127
|
+
|
128
|
+
def from_hash(o)
|
129
|
+
@id = o["id"] if o.has_key?("id")
|
130
|
+
@desc = o["desc"] if o.has_key?("desc")
|
131
|
+
@link = o["link"] if o.has_key?("link")
|
132
|
+
@created_at = o["created_at"] if o.has_key?("created_at")
|
133
|
+
self
|
134
|
+
end
|
135
|
+
|
136
|
+
#This won't work, as the body just needs the yaml string.
|
137
|
+
def self.create(o,tmp_email=nil, tmp_api_key=nil)
|
138
|
+
csarslf = from_hash(o, tmp_email, tmp_api_key)
|
139
|
+
csarslf.create
|
140
|
+
end
|
141
|
+
|
142
|
+
# Create the csar yaml
|
143
|
+
#This won't work, as the body just needs the yaml string.
|
144
|
+
def create
|
145
|
+
megam_rest.post_csar(to_hash)
|
146
|
+
end
|
147
|
+
|
148
|
+
# Load the yaml back from the link
|
149
|
+
def self.show(tmp_email=nil, tmp_api_key=nil, csarlink_name)
|
150
|
+
csarslf = self.new(tmp_email, tmp_api_key)
|
151
|
+
csarslf.megam_rest.get_csar(csarlink_name)
|
152
|
+
end
|
153
|
+
|
154
|
+
#list all csars (links)
|
155
|
+
def self.list(tmp_email=nil, tmp_api_key=nil)
|
156
|
+
csarslf = self.new(tmp_email, tmp_api_key)
|
157
|
+
csarslf.megam_rest.get_csars
|
158
|
+
end
|
159
|
+
|
160
|
+
def to_s
|
161
|
+
Megam::Stuff.styled_hash(to_hash)
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|
165
|
+
end
|