vas 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +174 -0
- data/NOTICE +5 -0
- data/README.md +26 -0
- data/Rakefile +20 -0
- data/lib/vas.rb +103 -0
- data/lib/vas/gemfire/agent_configuration.rb +28 -0
- data/lib/vas/gemfire/agent_instances.rb +49 -0
- data/lib/vas/gemfire/agent_live_configurations.rb +29 -0
- data/lib/vas/gemfire/agent_logs.rb +38 -0
- data/lib/vas/gemfire/agent_node_instances.rb +38 -0
- data/lib/vas/gemfire/agent_pending_configurations.rb +38 -0
- data/lib/vas/gemfire/application_code.rb +54 -0
- data/lib/vas/gemfire/application_code_images.rb +76 -0
- data/lib/vas/gemfire/cache_server_configuration.rb +28 -0
- data/lib/vas/gemfire/cache_server_instances.rb +57 -0
- data/lib/vas/gemfire/cache_server_live_configurations.rb +29 -0
- data/lib/vas/gemfire/cache_server_logs.rb +38 -0
- data/lib/vas/gemfire/cache_server_node_instances.rb +46 -0
- data/lib/vas/gemfire/cache_server_pending_configurations.rb +38 -0
- data/lib/vas/gemfire/disk_stores.rb +63 -0
- data/lib/vas/gemfire/gemfire.rb +47 -0
- data/lib/vas/gemfire/groups.rb +50 -0
- data/lib/vas/gemfire/installation_images.rb +38 -0
- data/lib/vas/gemfire/installations.rb +53 -0
- data/lib/vas/gemfire/live_application_codes.rb +29 -0
- data/lib/vas/gemfire/locator_configuration.rb +28 -0
- data/lib/vas/gemfire/locator_instances.rb +109 -0
- data/lib/vas/gemfire/locator_live_configurations.rb +29 -0
- data/lib/vas/gemfire/locator_logs.rb +38 -0
- data/lib/vas/gemfire/locator_node_instances.rb +53 -0
- data/lib/vas/gemfire/locator_pending_configurations.rb +38 -0
- data/lib/vas/gemfire/nodes.rb +61 -0
- data/lib/vas/gemfire/pending_application_codes.rb +34 -0
- data/lib/vas/gemfire/statistics.rb +66 -0
- data/lib/vas/rabbitmq/configuration.rb +28 -0
- data/lib/vas/rabbitmq/groups.rb +42 -0
- data/lib/vas/rabbitmq/installation_images.rb +38 -0
- data/lib/vas/rabbitmq/installations.rb +43 -0
- data/lib/vas/rabbitmq/instances.rb +53 -0
- data/lib/vas/rabbitmq/live_configurations.rb +29 -0
- data/lib/vas/rabbitmq/logs.rb +38 -0
- data/lib/vas/rabbitmq/node_instances.rb +38 -0
- data/lib/vas/rabbitmq/nodes.rb +50 -0
- data/lib/vas/rabbitmq/pending_configurations.rb +38 -0
- data/lib/vas/rabbitmq/plugin_images.rb +67 -0
- data/lib/vas/rabbitmq/plugins.rb +85 -0
- data/lib/vas/rabbitmq/rabbitmq.rb +45 -0
- data/lib/vas/shared/collection.rb +46 -0
- data/lib/vas/shared/configuration.rb +59 -0
- data/lib/vas/shared/groups.rb +74 -0
- data/lib/vas/shared/installation_images.rb +62 -0
- data/lib/vas/shared/installations.rb +67 -0
- data/lib/vas/shared/instances.rb +74 -0
- data/lib/vas/shared/logs.rb +89 -0
- data/lib/vas/shared/mutable_collection.rb +27 -0
- data/lib/vas/shared/node_instances.rb +58 -0
- data/lib/vas/shared/nodes.rb +70 -0
- data/lib/vas/shared/pending_configuration.rb +40 -0
- data/lib/vas/shared/resource.rb +44 -0
- data/lib/vas/shared/security.rb +51 -0
- data/lib/vas/shared/state_resource.rb +44 -0
- data/lib/vas/tc_server/applications.rb +89 -0
- data/lib/vas/tc_server/configuration.rb +29 -0
- data/lib/vas/tc_server/groups.rb +42 -0
- data/lib/vas/tc_server/installation_images.rb +38 -0
- data/lib/vas/tc_server/installations.rb +54 -0
- data/lib/vas/tc_server/instances.rb +102 -0
- data/lib/vas/tc_server/live_configurations.rb +29 -0
- data/lib/vas/tc_server/logs.rb +38 -0
- data/lib/vas/tc_server/node_applications.rb +76 -0
- data/lib/vas/tc_server/node_instances.rb +55 -0
- data/lib/vas/tc_server/node_revisions.rb +55 -0
- data/lib/vas/tc_server/nodes.rb +50 -0
- data/lib/vas/tc_server/pending_configurations.rb +38 -0
- data/lib/vas/tc_server/revision_images.rb +67 -0
- data/lib/vas/tc_server/revisions.rb +71 -0
- data/lib/vas/tc_server/tc_server.rb +50 -0
- data/lib/vas/tc_server/template_images.rb +67 -0
- data/lib/vas/tc_server/templates.rb +70 -0
- data/lib/vas/util/client.rb +159 -0
- data/lib/vas/util/link_utils.rb +43 -0
- data/lib/vas/vas_exception.rb +32 -0
- data/lib/vas/vfabric/agent_image.rb +50 -0
- data/lib/vas/vfabric/nodes.rb +47 -0
- data/lib/vas/vfabric/v_fabric.rb +34 -0
- data/lib/vas/vfabric_administration_server.rb +50 -0
- metadata +213 -0
@@ -0,0 +1,50 @@
|
|
1
|
+
#--
|
2
|
+
# vFabric Administration Server Ruby API
|
3
|
+
# Copyright (c) 2012 VMware, Inc. All Rights Reserved.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#++
|
17
|
+
|
18
|
+
module TcServer
|
19
|
+
|
20
|
+
# Used to enumerate tc Server nodes
|
21
|
+
class Nodes < Shared::Collection
|
22
|
+
|
23
|
+
def initialize(location, client) #:nodoc:
|
24
|
+
super(location, client, "nodes", Node)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
# A tc Server node
|
30
|
+
class Node < Shared::GroupableNode
|
31
|
+
|
32
|
+
# The Node's Java home
|
33
|
+
attr_reader :java_home
|
34
|
+
|
35
|
+
def initialize(location, client) #:nodoc:
|
36
|
+
super(location, client, Group)
|
37
|
+
@java_home = details["java-home"]
|
38
|
+
end
|
39
|
+
|
40
|
+
def instances
|
41
|
+
@instances = NodeInstances.new(Util::LinkUtils.get_link_href(details, "node-instances"), client)
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_s #:nodoc:
|
45
|
+
"#<#{self.class} host_names='#{host_names}' ip_addresses='#{ip_addresses}' operating_system='#{operating_system}' architecture='#{architecture}' agent_home='#{agent_home}' java_home='#{java_home}' metadata='#{metadata}'>"
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#--
|
2
|
+
# vFabric Administration Server Ruby API
|
3
|
+
# Copyright (c) 2012 VMware, Inc. All Rights Reserved.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#++
|
17
|
+
|
18
|
+
module TcServer
|
19
|
+
|
20
|
+
# Used to enumerate an instance's pending configuration
|
21
|
+
class PendingConfigurations < Shared::PendingConfigurations
|
22
|
+
|
23
|
+
def initialize(location, client) #:nodoc:
|
24
|
+
super(location, client, 'pending-configurations', PendingConfiguration)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
# A configuration file that is pending
|
30
|
+
class PendingConfiguration < Shared::PendingConfiguration
|
31
|
+
|
32
|
+
def initialize(location, client) #:nodoc:
|
33
|
+
super(location, client, 'group-instance', Instance)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#--
|
2
|
+
# vFabric Administration Server Ruby API
|
3
|
+
# Copyright (c) 2012 VMware, Inc. All Rights Reserved.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#++
|
17
|
+
|
18
|
+
module TcServer
|
19
|
+
|
20
|
+
# Used to enumerate, create, and delete tc Server revision images.
|
21
|
+
class RevisionImages < Shared::MutableCollection
|
22
|
+
|
23
|
+
def initialize(location, client) #:nodoc:
|
24
|
+
super(location, client, "revision-images", RevisionImage)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Creates a RevisionImage named +name+ with the version +version+ by uploading the WAR file at the given +path+
|
28
|
+
def create(path, name, version)
|
29
|
+
RevisionImage.new(client.post_image(location, path, { :name => name, :version => version }), client)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
# A revision image, i.e. a WAR file
|
35
|
+
class RevisionImage < Shared::Resource
|
36
|
+
|
37
|
+
# The revision image's name
|
38
|
+
attr_reader :name
|
39
|
+
|
40
|
+
# The revision image's version
|
41
|
+
attr_reader :version
|
42
|
+
|
43
|
+
# The revision image's size
|
44
|
+
attr_reader :size
|
45
|
+
|
46
|
+
def initialize(location, client) #:nodoc:
|
47
|
+
super(location, client)
|
48
|
+
|
49
|
+
@name = details["name"]
|
50
|
+
@version = details["version"]
|
51
|
+
@size = details['size']
|
52
|
+
end
|
53
|
+
|
54
|
+
# The revisions that have been created from this revision image
|
55
|
+
def revisions
|
56
|
+
revisions = []
|
57
|
+
Util::LinkUtils.get_link_hrefs(client.get(location), "group-revision").each { |revision_location| revisions << Revision.new(revision_location, client)}
|
58
|
+
revisions
|
59
|
+
end
|
60
|
+
|
61
|
+
def to_s #:nodoc:
|
62
|
+
"#<#{self.class} name='#@name' version='#@version'>"
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
#--
|
2
|
+
# vFabric Administration Server Ruby API
|
3
|
+
# Copyright (c) 2012 VMware, Inc. All Rights Reserved.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#++
|
17
|
+
|
18
|
+
module TcServer
|
19
|
+
|
20
|
+
# Used to enumerate, create, and delete application revisions.
|
21
|
+
class Revisions < Shared::MutableCollection
|
22
|
+
|
23
|
+
def initialize(location, client) #:nodoc:
|
24
|
+
super(location, client, "revisions", Revision)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Creates a Revision by deploying the RevisionImage +revision_image+
|
28
|
+
def create(revision_image)
|
29
|
+
Revision.new(client.post(location, { :image => revision_image.location}, 'group-revision'), client)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
# A revision of an Application
|
35
|
+
class Revision < Shared::StateResource
|
36
|
+
|
37
|
+
# The Revision's version
|
38
|
+
attr_reader :version
|
39
|
+
|
40
|
+
# The Revision's application
|
41
|
+
attr_reader :application
|
42
|
+
|
43
|
+
def initialize(location, client) #:nodoc:
|
44
|
+
super(location, client)
|
45
|
+
|
46
|
+
@version = details['version']
|
47
|
+
@revision_image_location = Util::LinkUtils.get_link_href(details, 'revision-image')
|
48
|
+
@application = Application.new(Util::LinkUtils.get_link_href(details, 'group-application'), client)
|
49
|
+
end
|
50
|
+
|
51
|
+
# The revision image, if any, that was used to create the revision
|
52
|
+
def revision_image
|
53
|
+
if (!@revision_image_location.nil?)
|
54
|
+
RevisionImage.new(@revision_image_location, client)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# An array of the revision's individual node revisions
|
59
|
+
def node_revisions
|
60
|
+
node_revisions = []
|
61
|
+
Util::LinkUtils.get_link_hrefs(client.get(location), 'node-revision').each {
|
62
|
+
|node_revision_location| node_revisions << NodeRevision.new(node_revision_location, client)}
|
63
|
+
node_revisions
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_s #:nodoc:
|
67
|
+
"#<#{self.class} version='#@version'>"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#--
|
2
|
+
# vFabric Administration Server Ruby API
|
3
|
+
# Copyright (c) 2012 VMware, Inc. All Rights Reserved.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#++
|
17
|
+
|
18
|
+
module TcServer
|
19
|
+
|
20
|
+
# The entry point to the API for administering tc Server
|
21
|
+
class TcServer
|
22
|
+
|
23
|
+
# The tc Server Groups
|
24
|
+
attr_reader :groups
|
25
|
+
|
26
|
+
# The tc Server InstallationImages
|
27
|
+
attr_reader :installation_images
|
28
|
+
|
29
|
+
# The tc Server Nodes
|
30
|
+
attr_reader :nodes
|
31
|
+
|
32
|
+
# The tc Server RevisionImages
|
33
|
+
attr_reader :revision_images
|
34
|
+
|
35
|
+
# The tc Server TemplateImages
|
36
|
+
attr_reader :template_images
|
37
|
+
|
38
|
+
def initialize(location, client) #:nodoc:
|
39
|
+
|
40
|
+
json = client.get(location)
|
41
|
+
|
42
|
+
@groups = Groups.new(Util::LinkUtils.get_link_href(json, "groups"), client)
|
43
|
+
@installation_images = InstallationImages.new(Util::LinkUtils.get_link_href(json, "installation-images"), client)
|
44
|
+
@nodes = Nodes.new(Util::LinkUtils.get_link_href(json, "nodes"), client)
|
45
|
+
@revision_images = RevisionImages.new(Util::LinkUtils.get_link_href(json, "revision-images"), client)
|
46
|
+
@template_images = TemplateImages.new(Util::LinkUtils.get_link_href(json, "template-images"), client)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#--
|
2
|
+
# vFabric Administration Server Ruby API
|
3
|
+
# Copyright (c) 2012 VMware, Inc. All Rights Reserved.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#++
|
17
|
+
|
18
|
+
module TcServer
|
19
|
+
|
20
|
+
# Used to enumerate, create, and delete tc Server template images.
|
21
|
+
class TemplateImages < Shared::MutableCollection
|
22
|
+
|
23
|
+
def initialize(location, client) #:nodoc:
|
24
|
+
super(location, client, "template-images", TemplateImage)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Creates a TemplateImage named +name+ with the version +version+ by uploading the file at the given +path+
|
28
|
+
def create(path, name, version)
|
29
|
+
TemplateImage.new(client.post_image(location, path, { :name => name, :version => version }), client)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
# A template image
|
35
|
+
class TemplateImage < Shared::Resource
|
36
|
+
|
37
|
+
# The template image's name
|
38
|
+
attr_reader :name
|
39
|
+
|
40
|
+
# The template image's version
|
41
|
+
attr_reader :version
|
42
|
+
|
43
|
+
# The template image's size
|
44
|
+
attr_reader :size
|
45
|
+
|
46
|
+
def initialize(location, client) #:nodoc:
|
47
|
+
super(location, client)
|
48
|
+
|
49
|
+
@name = details["name"]
|
50
|
+
@version = details["version"]
|
51
|
+
@size = details['size']
|
52
|
+
end
|
53
|
+
|
54
|
+
# The Template s that have been created from this TemplateImage
|
55
|
+
def templates
|
56
|
+
templates = []
|
57
|
+
Util::LinkUtils.get_link_hrefs(client.get(location), "template").each { |template_location| templates << Template.new(template_location, client)}
|
58
|
+
templates
|
59
|
+
end
|
60
|
+
|
61
|
+
def to_s #:nodoc:
|
62
|
+
"#<#{self.class} name='#@name' version='#@version'>"
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
#--
|
2
|
+
# vFabric Administration Server Ruby API
|
3
|
+
# Copyright (c) 2012 VMware, Inc. All Rights Reserved.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#++
|
17
|
+
|
18
|
+
module TcServer
|
19
|
+
|
20
|
+
# Used to enumerate, create, and delete tc Server templates.
|
21
|
+
class Templates < Shared::MutableCollection
|
22
|
+
|
23
|
+
def initialize(location, client) #:nodoc:
|
24
|
+
super(location, client, "templates", Template)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Creates a template from the +template_image+
|
28
|
+
def create(template_image)
|
29
|
+
Template.new(client.post(location, { :image => template_image.location }, "template"), client)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
# A tc Server template
|
35
|
+
class Template < Shared::Resource
|
36
|
+
|
37
|
+
# The template's version
|
38
|
+
attr_reader :version
|
39
|
+
|
40
|
+
# The template's name
|
41
|
+
attr_reader :name
|
42
|
+
|
43
|
+
# The template image, if any, that this template was created from
|
44
|
+
attr_reader :template_image
|
45
|
+
|
46
|
+
# The template's installation
|
47
|
+
attr_reader :installation
|
48
|
+
|
49
|
+
def initialize(location, client) #:nodoc:
|
50
|
+
super(location, client)
|
51
|
+
|
52
|
+
@version = details["version"]
|
53
|
+
@name = details["name"]
|
54
|
+
|
55
|
+
template_image_location = Util::LinkUtils.get_link_href(details, "template-image")
|
56
|
+
if (!template_image_location.nil?)
|
57
|
+
@template_image = TemplateImage.new(template_image_location, client)
|
58
|
+
end
|
59
|
+
|
60
|
+
@installation = Installation.new(Util::LinkUtils.get_link_href(details, 'installation'), client)
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
def to_s #:nodoc:
|
65
|
+
"#<#{self.class} name='#@name' version='#@version'>"
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,159 @@
|
|
1
|
+
#--
|
2
|
+
# vFabric Administration Server Ruby API
|
3
|
+
# Copyright (c) 2012 VMware, Inc. All Rights Reserved.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#++
|
17
|
+
|
18
|
+
module Util #:nodoc: all
|
19
|
+
|
20
|
+
class Client
|
21
|
+
|
22
|
+
TASK_POLLING_INTERVAL = 1
|
23
|
+
|
24
|
+
def initialize(username, password)
|
25
|
+
@username = username
|
26
|
+
@password = password
|
27
|
+
end
|
28
|
+
|
29
|
+
def get(location)
|
30
|
+
|
31
|
+
req = Net::HTTP::Get.new(location)
|
32
|
+
|
33
|
+
do_request(req) { |res|
|
34
|
+
case res.code
|
35
|
+
when "200"
|
36
|
+
return JSON.parse(res.body)
|
37
|
+
else
|
38
|
+
raise_vas_exception(res)
|
39
|
+
end
|
40
|
+
}
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
def get_stream(location, &block)
|
45
|
+
|
46
|
+
req = Net::HTTP::Get.new(location)
|
47
|
+
|
48
|
+
do_request(req) { |res|
|
49
|
+
case res.code
|
50
|
+
when "200"
|
51
|
+
return res.read_body(&block)
|
52
|
+
else
|
53
|
+
raise_vas_exception(res)
|
54
|
+
end
|
55
|
+
}
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
def delete(location)
|
60
|
+
req = Net::HTTP::Delete.new(location)
|
61
|
+
|
62
|
+
do_request(req) { |res|
|
63
|
+
case res.code
|
64
|
+
when "200"
|
65
|
+
return
|
66
|
+
when "202"
|
67
|
+
await_task(res["Location"])
|
68
|
+
else
|
69
|
+
raise_vas_exception(res)
|
70
|
+
end
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
def post(location, payload, rel = nil)
|
75
|
+
|
76
|
+
req = Net::HTTP::Post.new(location)
|
77
|
+
|
78
|
+
req['Content-Type'] = "application/json"
|
79
|
+
req.body = payload.to_json
|
80
|
+
|
81
|
+
do_request(req) { |res|
|
82
|
+
case res.code
|
83
|
+
when "202"
|
84
|
+
return await_task(res["Location"], rel)
|
85
|
+
else
|
86
|
+
raise_vas_exception(res)
|
87
|
+
end
|
88
|
+
}
|
89
|
+
end
|
90
|
+
|
91
|
+
def post_image(location, path, metadata = nil)
|
92
|
+
File.open(path) { |image|
|
93
|
+
if (metadata.nil?)
|
94
|
+
req = Net::HTTP::Post::Multipart.new(location, :data => UploadIO.new(image, "application/octet-stream"))
|
95
|
+
elsif
|
96
|
+
req = Net::HTTP::Post::Multipart.new(location, :data => UploadIO.new(image, "application/octet-stream"), :metadata => UploadIO.new(StringIO.new(metadata.to_json), "application/json", "metadata.json"))
|
97
|
+
end
|
98
|
+
|
99
|
+
do_request(req) { |res|
|
100
|
+
case res.code
|
101
|
+
when "201"
|
102
|
+
return res["Location"]
|
103
|
+
else
|
104
|
+
raise_vas_exception(res)
|
105
|
+
end
|
106
|
+
}
|
107
|
+
}
|
108
|
+
end
|
109
|
+
|
110
|
+
private
|
111
|
+
def do_request(req)
|
112
|
+
req.basic_auth(@username, @password)
|
113
|
+
|
114
|
+
uri = URI(req.path)
|
115
|
+
|
116
|
+
https = Net::HTTP.new(uri.host, uri.port)
|
117
|
+
https.use_ssl = true
|
118
|
+
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
119
|
+
|
120
|
+
https.start() { |https|
|
121
|
+
https.request(req) { |res|
|
122
|
+
yield res
|
123
|
+
}
|
124
|
+
}
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
def await_task(task_location, rel = nil)
|
129
|
+
while true
|
130
|
+
task = get(task_location)
|
131
|
+
case task["status"]
|
132
|
+
when "PENDING"
|
133
|
+
when "IN_PROGRESS"
|
134
|
+
sleep TASK_POLLING_INTERVAL
|
135
|
+
when "SUCCESS"
|
136
|
+
if rel
|
137
|
+
return LinkUtils.get_link_hrefs(task, rel)[0]
|
138
|
+
else
|
139
|
+
return
|
140
|
+
end
|
141
|
+
else
|
142
|
+
raise VasException.new([task["message"], task["detail"]])
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def raise_vas_exception(res)
|
148
|
+
messages = []
|
149
|
+
begin
|
150
|
+
json = JSON.parse(res.body)
|
151
|
+
json["reasons"].each { |reason| messages << reason["message"]}
|
152
|
+
ensure
|
153
|
+
raise VasException.new(messages, res.code)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|