fog 0.0.67 → 0.0.68
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.
- data/README.rdoc +1 -1
- data/VERSION.yml +1 -1
- data/fog.gemspec +24 -6
- data/lib/fog/aws/ec2.rb +48 -47
- data/lib/fog/aws/requests/ec2/describe_instances.rb +1 -1
- data/lib/fog/aws/requests/ec2/describe_snapshots.rb +3 -3
- data/lib/fog/aws/requests/ec2/run_instances.rb +2 -3
- data/lib/fog/aws/s3.rb +18 -17
- data/lib/fog/aws/simpledb.rb +11 -10
- data/lib/fog/bin.rb +12 -4
- data/lib/fog/rackspace/files.rb +16 -15
- data/lib/fog/rackspace/requests/servers/get_image_details.rb +35 -0
- data/lib/fog/rackspace/servers.rb +26 -24
- data/lib/fog/slicehost.rb +18 -17
- data/lib/fog/slicehost/models/flavors.rb +11 -3
- data/lib/fog/slicehost/models/images.rb +14 -4
- data/lib/fog/slicehost/models/servers.rb +10 -2
- data/lib/fog/terremark.rb +83 -17
- data/lib/fog/terremark/parsers/get_public_Ips.rb +28 -0
- data/lib/fog/terremark/parsers/internet_service.rb +63 -0
- data/lib/fog/terremark/parsers/node_service.rb +30 -0
- data/lib/fog/terremark/requests/add_internet_service.rb +63 -0
- data/lib/fog/terremark/requests/add_node_service.rb +63 -0
- data/lib/fog/terremark/requests/create_internet_service.rb +63 -0
- data/lib/fog/terremark/requests/delete_internet_service.rb +40 -0
- data/lib/fog/terremark/requests/delete_node_service.rb +40 -0
- data/lib/fog/terremark/requests/deploy_vapp.rb +2 -2
- data/lib/fog/terremark/requests/get_public_ips.rb +37 -0
- data/lib/fog/terremark/requests/get_task.rb +1 -1
- data/lib/fog/terremark/requests/get_tasks_list.rb +1 -1
- data/lib/fog/terremark/requests/get_vapp.rb +1 -1
- data/lib/fog/terremark/requests/instantiate_vapp_template.rb +4 -8
- data/lib/fog/terremark/requests/power_off.rb +1 -1
- data/lib/fog/terremark/requests/power_on.rb +1 -1
- data/lib/fog/terremark/requests/reset.rb +1 -1
- data/lib/fog/terremark/requests/shutdown.rb +1 -1
- data/tests/{test_helper.rb → helper.rb} +8 -7
- data/tests/{test_helper_tests.rb → helper_tests.rb} +7 -9
- data/tests/rackspace/helper.rb +64 -0
- data/tests/rackspace/requests/servers/create_image_tests.rb +22 -0
- data/tests/rackspace/requests/servers/create_server_tests.rb +19 -0
- data/tests/rackspace/requests/servers/delete_image_tests.rb +32 -0
- data/tests/rackspace/requests/servers/delete_server_tests.rb +26 -0
- data/tests/rackspace/requests/servers/get_flavor_details_tests.rb +25 -0
- data/tests/rackspace/requests/servers/get_image_details_tests.rb +25 -0
- data/tests/rackspace/requests/servers/get_server_details_tests.rb +31 -0
- data/tests/slicehost/{slicehost_helper.rb → helper.rb} +0 -0
- data/tests/slicehost/requests/create_slice_tests.rb +1 -1
- data/tests/slicehost/requests/get_backups_tests.rb +1 -1
- data/tests/slicehost/requests/get_flavor_tests.rb +5 -2
- data/tests/slicehost/requests/get_flavors_tests.rb +5 -2
- data/tests/slicehost/requests/get_image_tests.rb +5 -2
- data/tests/slicehost/requests/get_images_tests.rb +5 -2
- data/tests/slicehost/requests/get_slice_tests.rb +2 -2
- data/tests/slicehost/requests/get_slices_tests.rb +5 -2
- data/tests/slicehost/requests/reboot_slice_tests.rb +1 -1
- metadata +24 -6
@@ -0,0 +1,63 @@
|
|
1
|
+
module Fog
|
2
|
+
module Terremark
|
3
|
+
class Real
|
4
|
+
|
5
|
+
require 'fog/terremark/parsers/internet_service'
|
6
|
+
|
7
|
+
# Reserve requested resources and deploy vApp
|
8
|
+
#
|
9
|
+
# ==== Parameters
|
10
|
+
# * vdc_id<~Integer> - Id of vDc to add internet service to
|
11
|
+
# * name<~String> - Name of service
|
12
|
+
# * protocol<~String> - Protocol of service
|
13
|
+
# * port<~Integer> - Port of service
|
14
|
+
# * options<~Hash>:
|
15
|
+
# * Enabled<~Boolean>: defaults to true
|
16
|
+
# * Description<~String>: optional description
|
17
|
+
#
|
18
|
+
# ==== Returns
|
19
|
+
# * response<~Excon::Response>:
|
20
|
+
# * body<~Hash>:
|
21
|
+
# * 'endTime'<~String> - endTime of task
|
22
|
+
# * 'href'<~String> - link to task
|
23
|
+
# * 'startTime'<~String> - startTime of task
|
24
|
+
# * 'status'<~String> - status of task
|
25
|
+
# * 'type'<~String> - type of task
|
26
|
+
# * 'Owner'<~String> -
|
27
|
+
# * 'href'<~String> - href of owner
|
28
|
+
# * 'name'<~String> - name of owner
|
29
|
+
# * 'type'<~String> - type of owner
|
30
|
+
def create_internet_service(vdc_id, name, protocol, port, options = {})
|
31
|
+
unless options.has_key?('Enabled')
|
32
|
+
options['Enabled'] = true
|
33
|
+
end
|
34
|
+
data = <<-DATA
|
35
|
+
<InternetService xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:tmrk:vCloudExpress-1.0:request:createInternetService">
|
36
|
+
<Name>#{name}</Name>
|
37
|
+
<Protocol>#{protocol.upcase}</Protocol>
|
38
|
+
<Port>#{port}</Port>
|
39
|
+
<Enabled>#{options['Enabled']}</Enabled>
|
40
|
+
<Description>#{options['Description']}</Description>
|
41
|
+
</InternetService>
|
42
|
+
DATA
|
43
|
+
request(
|
44
|
+
:body => data,
|
45
|
+
:expects => 200,
|
46
|
+
:headers => {'Content-Type' => 'application/xml'},
|
47
|
+
:method => 'POST',
|
48
|
+
:parser => Fog::Parsers::Terremark::InternetService.new,
|
49
|
+
:path => "vdc/#{vdc_id}/internetServices"
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
class Mock
|
56
|
+
|
57
|
+
def create_internet_service(vdc_id)
|
58
|
+
raise MockNotImplemented.new("Contributions welcome!")
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Fog
|
2
|
+
module Terremark
|
3
|
+
class Real
|
4
|
+
|
5
|
+
# Destroy an internet service
|
6
|
+
#
|
7
|
+
# ==== Parameters
|
8
|
+
# * internet_service_id<~Integer> - Id of service to destroy
|
9
|
+
#
|
10
|
+
# ==== Returns
|
11
|
+
# * response<~Excon::Response>:
|
12
|
+
# * body<~Hash>:
|
13
|
+
|
14
|
+
# FIXME
|
15
|
+
|
16
|
+
# * 'CatalogItems'<~Array>
|
17
|
+
# * 'href'<~String> - linke to item
|
18
|
+
# * 'name'<~String> - name of item
|
19
|
+
# * 'type'<~String> - type of item
|
20
|
+
# * 'description'<~String> - Description of catalog
|
21
|
+
# * 'name'<~String> - Name of catalog
|
22
|
+
def delete_internet_service(internet_service_id)
|
23
|
+
request(
|
24
|
+
:expects => 200,
|
25
|
+
:method => 'DELETE',
|
26
|
+
:path => "InternetServices/#{internet_service_id}"
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
class Mock
|
33
|
+
|
34
|
+
def delete_internet_service(internet_service_id)
|
35
|
+
raise MockNotImplemented.new("Contributions welcome!")
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Fog
|
2
|
+
module Terremark
|
3
|
+
class Real
|
4
|
+
|
5
|
+
# Destroy a node
|
6
|
+
#
|
7
|
+
# ==== Parameters
|
8
|
+
# * node_service_id<~Integer> - Id of node to destroy
|
9
|
+
#
|
10
|
+
# ==== Returns
|
11
|
+
# * response<~Excon::Response>:
|
12
|
+
# * body<~Hash>:
|
13
|
+
|
14
|
+
# FIXME
|
15
|
+
|
16
|
+
# * 'CatalogItems'<~Array>
|
17
|
+
# * 'href'<~String> - linke to item
|
18
|
+
# * 'name'<~String> - name of item
|
19
|
+
# * 'type'<~String> - type of item
|
20
|
+
# * 'description'<~String> - Description of catalog
|
21
|
+
# * 'name'<~String> - Name of catalog
|
22
|
+
def delete_node_service(node_service_id)
|
23
|
+
request(
|
24
|
+
:expects => 200,
|
25
|
+
:method => 'DELETE',
|
26
|
+
:path => "nodeServices/#{node_service_id}"
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
class Mock
|
33
|
+
|
34
|
+
def delete_node_service(node_id)
|
35
|
+
raise MockNotImplemented.new("Contributions welcome!")
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -26,7 +26,7 @@ module Fog
|
|
26
26
|
:expects => 202,
|
27
27
|
:method => 'POST',
|
28
28
|
:parser => Fog::Parsers::Terremark::Task.new,
|
29
|
-
:path => "
|
29
|
+
:path => "vApp/#{vapp_id}/action/deploy"
|
30
30
|
)
|
31
31
|
end
|
32
32
|
|
@@ -34,7 +34,7 @@ module Fog
|
|
34
34
|
|
35
35
|
class Mock
|
36
36
|
|
37
|
-
def deploy_vapp(
|
37
|
+
def deploy_vapp(vapp_id)
|
38
38
|
raise MockNotImplemented.new("Contributions welcome!")
|
39
39
|
end
|
40
40
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Fog
|
2
|
+
module Terremark
|
3
|
+
class Real
|
4
|
+
|
5
|
+
require 'fog/terremark/parsers/get_public_ips'
|
6
|
+
|
7
|
+
# Get list of public ips
|
8
|
+
#
|
9
|
+
# ==== Parameters
|
10
|
+
# * vdc_id<~Integer> - Id of vdc to find public ips for
|
11
|
+
#
|
12
|
+
# ==== Returns
|
13
|
+
# * response<~Excon::Response>:
|
14
|
+
# * body<~Hash>:
|
15
|
+
# * 'PublicIpAddresses'<~Array>
|
16
|
+
# * 'href'<~String> - linke to item
|
17
|
+
# * 'name'<~String> - name of item
|
18
|
+
def get_public_ips(vdc_id)
|
19
|
+
request(
|
20
|
+
:expects => 200,
|
21
|
+
:method => 'GET',
|
22
|
+
:parser => Fog::Parsers::Terremark::GetPublicIps.new,
|
23
|
+
:path => "vdc/#{vdc_id}/publicIps"
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
class Mock
|
30
|
+
|
31
|
+
def get_public_ips(vdc_id)
|
32
|
+
raise MockNotImplemented.new("Contributions welcome!")
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -23,13 +23,9 @@ module Fog
|
|
23
23
|
# * 'name'<~String> - Name of catalog
|
24
24
|
def instantiate_vapp_template(name)
|
25
25
|
# FIXME: much cheating to commence
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
vdc_id = organization['Links'].select {|link| link['type'] == 'application/vnd.vmware.vcloud.vdc+xml'}.first['href'].split('/').last
|
30
|
-
vdc = get_vdc(vdc_id).body
|
31
|
-
network_id = vdc['AvailableNetworks'].first['href'].split('/').last
|
32
|
-
catalog_item = 12 # Ubuntu JeOS 9.10 (64-bit)
|
26
|
+
vdc_id = default_vdc_id
|
27
|
+
network_id = default_network_id
|
28
|
+
catalog_item = 12 # Ubuntu JeOS 9.10 (64-bit)
|
33
29
|
|
34
30
|
# case UNRESOLVED:
|
35
31
|
# return "0";
|
@@ -101,7 +97,7 @@ DATA
|
|
101
97
|
:headers => { 'Content-Type' => 'application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml' },
|
102
98
|
:method => 'POST',
|
103
99
|
:parser => Fog::Parsers::Terremark::InstantiateVappTemplate.new,
|
104
|
-
:path => "
|
100
|
+
:path => "vdc/#{vdc_id}/action/instantiatevAppTemplate"
|
105
101
|
)
|
106
102
|
end
|
107
103
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'fog'))
|
2
2
|
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'fog', 'bin'))
|
3
3
|
|
4
|
-
# TODO: Currently is true even if some of the keys in format do not appear
|
5
|
-
def
|
4
|
+
# TODO: Currently is true even if some of the keys in format do not appear
|
5
|
+
def validate_format(original_data, format)
|
6
6
|
valid = true
|
7
7
|
data = original_data.dup
|
8
8
|
for key, value in format
|
@@ -14,22 +14,23 @@ def validate_data_format(original_data, format)
|
|
14
14
|
for element in datum
|
15
15
|
type = value.first
|
16
16
|
if type.is_a?(Hash)
|
17
|
-
valid &&=
|
17
|
+
valid &&= validate_format({:element => element}, {:element => type})
|
18
18
|
else
|
19
19
|
valid &&= element.is_a?(type)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
when Hash
|
23
23
|
valid &&= datum.is_a?(Hash)
|
24
|
-
valid &&=
|
24
|
+
valid &&= validate_format(datum, value)
|
25
25
|
else
|
26
26
|
valid &&= datum.is_a?(value)
|
27
27
|
end
|
28
28
|
end
|
29
|
-
unless data.empty?
|
30
|
-
p "validate_data_format did not validate [#{data.inspect}]"
|
31
|
-
end
|
32
29
|
valid &&= data.empty?
|
30
|
+
unless valid
|
31
|
+
@formatador.display_line("[red]#{original_data.inspect} does not match #{format.inspect}[/]")
|
32
|
+
end
|
33
|
+
valid
|
33
34
|
end
|
34
35
|
|
35
36
|
def wait_for(timeout = 600, &block)
|
@@ -1,20 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
Shindo.tests('test_helper') do
|
1
|
+
Shindo.tests('test_helper', 'meta') do
|
4
2
|
tests('#validate_data_format') do
|
5
3
|
|
6
4
|
tests('returns true') do
|
7
5
|
|
8
6
|
test('when format of value matches') do
|
9
|
-
|
7
|
+
validate_format({:a => :b}, {:a => Symbol})
|
10
8
|
end
|
11
9
|
|
12
10
|
test('when format of nested array elements matches') do
|
13
|
-
|
11
|
+
validate_format({:a => [:b, :c]}, {:a => [Symbol]})
|
14
12
|
end
|
15
13
|
|
16
14
|
test('when format of nested hash matches') do
|
17
|
-
|
15
|
+
validate_format({:a => {:b => :c}}, {:a => {:b => Symbol}})
|
18
16
|
end
|
19
17
|
|
20
18
|
end
|
@@ -22,15 +20,15 @@ Shindo.tests('test_helper') do
|
|
22
20
|
tests('returns false') do
|
23
21
|
|
24
22
|
test('when format of value does not match') do
|
25
|
-
!
|
23
|
+
!validate_format({:a => :b}, {:a => String})
|
26
24
|
end
|
27
25
|
|
28
26
|
test('when not all keys are checked') do
|
29
|
-
!
|
27
|
+
!validate_format({:a => :b}, {})
|
30
28
|
end
|
31
29
|
|
32
30
|
test('when some keys do not appear') do
|
33
|
-
!
|
31
|
+
!validate_format({}, {:a => String})
|
34
32
|
end
|
35
33
|
|
36
34
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Rackspace
|
2
|
+
|
3
|
+
def self.[](service)
|
4
|
+
@@connections ||= Hash.new do |hash, key|
|
5
|
+
credentials = Fog.credentials.reject do |k, v|
|
6
|
+
![:rackspace_api_key, :rackspace_username].include?(k)
|
7
|
+
end
|
8
|
+
hash[key] = case key
|
9
|
+
when :files
|
10
|
+
Fog::Rackspace::Files.new(credentials)
|
11
|
+
when :servers
|
12
|
+
Fog::Rackspace::Servers.new(credentials)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
@@connections[service]
|
16
|
+
end
|
17
|
+
|
18
|
+
module Files
|
19
|
+
|
20
|
+
module Formats
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
module Servers
|
27
|
+
|
28
|
+
module Formats
|
29
|
+
|
30
|
+
FLAVOR = {
|
31
|
+
'disk' => Integer,
|
32
|
+
'id' => Integer,
|
33
|
+
'name' => String,
|
34
|
+
'ram' => Integer
|
35
|
+
}
|
36
|
+
|
37
|
+
IMAGE = {
|
38
|
+
'id' => Integer,
|
39
|
+
'name' => String,
|
40
|
+
'serverId' => Integer,
|
41
|
+
'status' => String,
|
42
|
+
'updated' => String
|
43
|
+
}
|
44
|
+
|
45
|
+
SERVER = {
|
46
|
+
'addresses' => {
|
47
|
+
'private' => [String],
|
48
|
+
'public' => [String]
|
49
|
+
},
|
50
|
+
'flavorId' => Integer,
|
51
|
+
'hostId' => String,
|
52
|
+
'id' => Integer,
|
53
|
+
'imageId' => Integer,
|
54
|
+
'metadata' => {},
|
55
|
+
'name' => String,
|
56
|
+
'progress' => Integer,
|
57
|
+
'status' => String
|
58
|
+
}
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|