fog 0.2.0 → 0.2.1

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.
Files changed (147) hide show
  1. data/Gemfile +8 -8
  2. data/Gemfile.lock +3 -3
  3. data/bin/fog +2 -10
  4. data/fog.gemspec +45 -20
  5. data/lib/fog.rb +2 -1
  6. data/lib/fog/attributes.rb +48 -8
  7. data/lib/fog/aws/ec2.rb +5 -2
  8. data/lib/fog/aws/elb.rb +5 -2
  9. data/lib/fog/aws/models/ec2/server.rb +1 -1
  10. data/lib/fog/aws/requests/simpledb/put_attributes.rb +43 -12
  11. data/lib/fog/aws/s3.rb +2 -2
  12. data/lib/fog/aws/simpledb.rb +15 -3
  13. data/lib/fog/bin.rb +11 -2
  14. data/lib/fog/bluebox.rb +5 -1
  15. data/lib/fog/connection.rb +9 -1
  16. data/lib/fog/credentials.rb +3 -0
  17. data/lib/fog/new_servers.rb +89 -0
  18. data/lib/fog/new_servers/bin.rb +30 -0
  19. data/lib/fog/new_servers/requests/add_server.rb +39 -0
  20. data/lib/fog/new_servers/requests/cancel_server.rb +36 -0
  21. data/lib/fog/new_servers/requests/get_server.rb +42 -0
  22. data/lib/fog/new_servers/requests/list_images.rb +33 -0
  23. data/lib/fog/new_servers/requests/list_plans.rb +36 -0
  24. data/lib/fog/new_servers/requests/list_servers.rb +43 -0
  25. data/lib/fog/new_servers/requests/reboot_server.rb +30 -0
  26. data/lib/fog/parser.rb +6 -0
  27. data/lib/fog/rackspace/files.rb +8 -2
  28. data/lib/fog/rackspace/models/servers/server.rb +5 -0
  29. data/lib/fog/rackspace/servers.rb +5 -1
  30. data/lib/fog/service.rb +6 -1
  31. data/lib/fog/slicehost.rb +5 -1
  32. data/lib/fog/terremark/ecloud.rb +1 -0
  33. data/lib/fog/terremark/shared.rb +4 -1
  34. data/lib/fog/terremark/vcloud.rb +1 -0
  35. data/lib/fog/vcloud.rb +150 -141
  36. data/lib/fog/vcloud/bin.rb +2 -2
  37. data/lib/fog/vcloud/collection.rb +3 -84
  38. data/lib/fog/vcloud/extension.rb +44 -0
  39. data/lib/fog/vcloud/generators.rb +33 -0
  40. data/lib/fog/vcloud/model.rb +5 -38
  41. data/lib/fog/vcloud/models/vdc.rb +14 -24
  42. data/lib/fog/vcloud/models/vdcs.rb +13 -8
  43. data/lib/fog/vcloud/requests/get_network.rb +4 -11
  44. data/lib/fog/vcloud/requests/get_organization.rb +4 -11
  45. data/lib/fog/vcloud/requests/get_vdc.rb +4 -12
  46. data/lib/fog/vcloud/requests/get_versions.rb +4 -13
  47. data/lib/fog/vcloud/requests/login.rb +4 -4
  48. data/lib/fog/vcloud/terremark/ecloud.rb +125 -54
  49. data/lib/fog/vcloud/terremark/ecloud/models/catalog.rb +30 -0
  50. data/lib/fog/vcloud/terremark/ecloud/models/catalog_item.rb +31 -0
  51. data/lib/fog/vcloud/terremark/ecloud/models/internet_service.rb +21 -22
  52. data/lib/fog/vcloud/terremark/ecloud/models/internet_services.rb +11 -25
  53. data/lib/fog/vcloud/terremark/ecloud/models/ip.rb +38 -5
  54. data/lib/fog/vcloud/terremark/ecloud/models/ips.rb +11 -15
  55. data/lib/fog/vcloud/terremark/ecloud/models/network.rb +52 -11
  56. data/lib/fog/vcloud/terremark/ecloud/models/networks.rb +14 -13
  57. data/lib/fog/vcloud/terremark/ecloud/models/node.rb +47 -0
  58. data/lib/fog/vcloud/terremark/ecloud/models/nodes.rb +30 -0
  59. data/lib/fog/vcloud/terremark/ecloud/models/public_ip.rb +6 -9
  60. data/lib/fog/vcloud/terremark/ecloud/models/public_ips.rb +19 -3
  61. data/lib/fog/vcloud/terremark/ecloud/models/server.rb +203 -0
  62. data/lib/fog/vcloud/terremark/ecloud/models/servers.rb +43 -0
  63. data/lib/fog/vcloud/terremark/ecloud/models/task.rb +22 -0
  64. data/lib/fog/vcloud/terremark/ecloud/models/tasks.rb +30 -0
  65. data/lib/fog/vcloud/terremark/ecloud/models/vdc.rb +32 -10
  66. data/lib/fog/vcloud/terremark/ecloud/models/vdcs.rb +5 -6
  67. data/lib/fog/vcloud/terremark/ecloud/requests/add_internet_service.rb +23 -10
  68. data/lib/fog/vcloud/terremark/ecloud/requests/add_node.rb +54 -0
  69. data/lib/fog/vcloud/terremark/ecloud/requests/configure_internet_service.rb +14 -12
  70. data/lib/fog/vcloud/terremark/ecloud/requests/configure_network.rb +53 -0
  71. data/lib/fog/vcloud/terremark/ecloud/requests/configure_network_ip.rb +52 -0
  72. data/lib/fog/vcloud/terremark/ecloud/requests/configure_node.rb +42 -0
  73. data/lib/fog/vcloud/terremark/ecloud/requests/configure_vapp.rb +115 -0
  74. data/lib/fog/vcloud/terremark/ecloud/requests/delete_internet_service.rb +4 -23
  75. data/lib/fog/vcloud/terremark/ecloud/requests/delete_node.rb +0 -0
  76. data/lib/fog/vcloud/terremark/ecloud/requests/delete_vapp.rb +19 -0
  77. data/lib/fog/vcloud/terremark/ecloud/requests/get_catalog.rb +18 -0
  78. data/lib/fog/vcloud/terremark/ecloud/requests/get_catalog_item.rb +18 -0
  79. data/lib/fog/vcloud/terremark/ecloud/requests/get_customization_options.rb +18 -0
  80. data/lib/fog/vcloud/terremark/ecloud/requests/get_internet_services.rb +9 -16
  81. data/lib/fog/vcloud/terremark/ecloud/requests/get_network.rb +8 -14
  82. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_extensions.rb +36 -0
  83. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_ip.rb +44 -0
  84. data/lib/fog/vcloud/terremark/ecloud/requests/get_network_ips.rb +11 -12
  85. data/lib/fog/vcloud/terremark/ecloud/requests/get_node.rb +18 -0
  86. data/lib/fog/vcloud/terremark/ecloud/requests/get_nodes.rb +18 -0
  87. data/lib/fog/vcloud/terremark/ecloud/requests/get_public_ip.rb +5 -19
  88. data/lib/fog/vcloud/terremark/ecloud/requests/get_public_ips.rb +5 -12
  89. data/lib/fog/vcloud/terremark/ecloud/requests/get_task.rb +18 -0
  90. data/lib/fog/vcloud/terremark/ecloud/requests/get_task_list.rb +19 -0
  91. data/lib/fog/vcloud/terremark/ecloud/requests/get_vapp.rb +18 -0
  92. data/lib/fog/vcloud/terremark/ecloud/requests/get_vdc.rb +7 -15
  93. data/lib/fog/vcloud/terremark/ecloud/requests/power_off.rb +18 -0
  94. data/lib/fog/vcloud/terremark/ecloud/requests/power_on.rb +18 -0
  95. data/lib/fog/vcloud/terremark/ecloud/requests/power_reset.rb +18 -0
  96. data/lib/fog/vcloud/terremark/ecloud/requests/power_shutdown.rb +18 -0
  97. data/lib/fog/vcloud/terremark/vcloud.rb +4 -18
  98. data/lib/fog/vcloud/terremark/vcloud/requests/get_vdc.rb +4 -12
  99. data/spec/aws/requests/simpledb/put_attributes_spec.rb +18 -0
  100. data/spec/vcloud/bin_spec.rb +2 -2
  101. data/spec/vcloud/models/vdc_spec.rb +35 -29
  102. data/spec/vcloud/requests/get_network_spec.rb +32 -43
  103. data/spec/vcloud/requests/get_organization_spec.rb +45 -38
  104. data/spec/vcloud/requests/get_vdc_spec.rb +42 -32
  105. data/spec/vcloud/requests/get_versions_spec.rb +17 -17
  106. data/spec/vcloud/requests/login_spec.rb +7 -4
  107. data/spec/vcloud/spec_helper.rb +137 -46
  108. data/spec/vcloud/terremark/ecloud/models/internet_service_spec.rb +53 -58
  109. data/spec/vcloud/terremark/ecloud/models/internet_services_spec.rb +20 -20
  110. data/spec/vcloud/terremark/ecloud/models/ip_spec.rb +22 -21
  111. data/spec/vcloud/terremark/ecloud/models/ips_spec.rb +18 -18
  112. data/spec/vcloud/terremark/ecloud/models/network_spec.rb +55 -51
  113. data/spec/vcloud/terremark/ecloud/models/networks_spec.rb +16 -15
  114. data/spec/vcloud/terremark/ecloud/models/public_ip_spec.rb +26 -27
  115. data/spec/vcloud/terremark/ecloud/models/public_ips_spec.rb +16 -15
  116. data/spec/vcloud/terremark/ecloud/models/vdc_spec.rb +52 -36
  117. data/spec/vcloud/terremark/ecloud/models/vdcs_spec.rb +18 -15
  118. data/spec/vcloud/terremark/ecloud/requests/add_internet_service_spec.rb +46 -43
  119. data/spec/vcloud/terremark/ecloud/requests/configure_internet_service_spec.rb +37 -32
  120. data/spec/vcloud/terremark/ecloud/requests/delete_internet_service_spec.rb +26 -23
  121. data/spec/vcloud/terremark/ecloud/requests/get_internet_services_spec.rb +57 -49
  122. data/spec/vcloud/terremark/ecloud/requests/get_network_ip_spec.rb +41 -0
  123. data/spec/vcloud/terremark/ecloud/requests/get_network_ips_spec.rb +39 -34
  124. data/spec/vcloud/terremark/ecloud/requests/get_network_spec.rb +26 -48
  125. data/spec/vcloud/terremark/ecloud/requests/get_public_ip_spec.rb +25 -26
  126. data/spec/vcloud/terremark/ecloud/requests/get_public_ips_spec.rb +35 -27
  127. data/spec/vcloud/terremark/ecloud/requests/get_vdc_spec.rb +85 -110
  128. data/spec/vcloud/terremark/ecloud/requests/login_spec.rb +7 -4
  129. data/spec/vcloud/vcloud_spec.rb +9 -8
  130. metadata +62 -26
  131. data/lib/fog/vcloud/parser.rb +0 -42
  132. data/lib/fog/vcloud/parsers/get_organization.rb +0 -37
  133. data/lib/fog/vcloud/parsers/get_vdc.rb +0 -62
  134. data/lib/fog/vcloud/parsers/get_versions.rb +0 -46
  135. data/lib/fog/vcloud/parsers/login.rb +0 -36
  136. data/lib/fog/vcloud/parsers/network.rb +0 -53
  137. data/lib/fog/vcloud/terremark/all.rb +0 -9
  138. data/lib/fog/vcloud/terremark/ecloud/parsers/get_internet_services.rb +0 -59
  139. data/lib/fog/vcloud/terremark/ecloud/parsers/get_public_ip.rb +0 -30
  140. data/lib/fog/vcloud/terremark/ecloud/parsers/get_public_ips.rb +0 -40
  141. data/lib/fog/vcloud/terremark/ecloud/parsers/get_vdc.rb +0 -59
  142. data/lib/fog/vcloud/terremark/ecloud/parsers/internet_service.rb +0 -58
  143. data/lib/fog/vcloud/terremark/ecloud/parsers/network.rb +0 -28
  144. data/lib/fog/vcloud/terremark/ecloud/parsers/network_ips.rb +0 -31
  145. data/lib/fog/vcloud/terremark/ecloud/requests/login.rb +0 -27
  146. data/lib/fog/vcloud/terremark/vcloud/parsers/get_vdc.rb +0 -34
  147. data/spec/vcloud/terremark/vcloud/requests/get_vdc_spec.rb +0 -74
@@ -0,0 +1,52 @@
1
+ module Fog
2
+ module Vcloud
3
+ module Terremark
4
+ module Ecloud
5
+ module Real
6
+
7
+ def validate_network_ip_data(network_ip_data, configure=false)
8
+ valid_opts = [:id, :href, :name, :status, :server, :rnat]
9
+ unless valid_opts.all? { |opt| network_ip_data.keys.include?(opt) }
10
+ raise ArgumentError.new("Required data missing: #{(valid_opts - network_ip_data.keys).map(&:inspect).join(", ")}")
11
+ end
12
+ end
13
+
14
+ def configure_network_ip(network_ip_uri, network_ip_data)
15
+ validate_network_ip_data(network_ip_data)
16
+
17
+ request(
18
+ :body => generate_configure_network_ip_request(network_ip_data),
19
+ :expects => 200,
20
+ :headers => {'Content-Type' => 'application/vnd.tmrk.ecloud.ip+xml' },
21
+ :method => 'PUT',
22
+ :uri => network_ip_uri
23
+ )
24
+ end
25
+
26
+ private
27
+
28
+ def generate_configure_network_ip_request(network_ip_data)
29
+ builder = Builder::XmlMarkup.new
30
+ builder.IpAddress(:"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance",
31
+ :xmlns => "urn:tmrk:eCloudExtensions-2.3") {
32
+ builder.Id(network_ip_data[:id])
33
+ builder.Href(network_ip_data[:href])
34
+ builder.Name(network_ip_data[:name])
35
+ builder.Status(network_ip_data[:status])
36
+ builder.Server(network_ip_data[:server])
37
+ builder.RnatAddress(network_ip_data[:rnat])
38
+ }
39
+ end
40
+
41
+ end
42
+
43
+ module Mock
44
+
45
+ def configure_network_ip(network_ip_uri, network_ip_data)
46
+ Fog::Mock.not_implemented
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,42 @@
1
+ module Fog
2
+ module Vcloud
3
+ module Terremark
4
+ module Ecloud
5
+ module Real
6
+
7
+ def configure_node(node_uri, node_data)
8
+ validate_node_data(node_data, true)
9
+
10
+ request(
11
+ :body => generate_configure_node_request(node_data),
12
+ :expects => 200,
13
+ :headers => {'Content-Type' => 'application/vnd.tmrk.ecloud.nodeService+xml'},
14
+ :method => 'PUT',
15
+ :uri => node_uri
16
+ )
17
+ end
18
+
19
+ private
20
+
21
+ def generate_configure_node_request(node_data)
22
+ builder = Builder::XmlMarkup.new
23
+ builder.NodeService(:"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance",
24
+ :xmlns => "urn:tmrk:eCloudExtensions-2.0") {
25
+ builder.Name(node_data[:name])
26
+ builder.Enabled(node_data[:enabled].to_s)
27
+ builder.Description(node_data[:description])
28
+ }
29
+ end
30
+
31
+ end
32
+
33
+ module Mock
34
+
35
+ def configure_node(node_uri, node_data)
36
+ Fog::Mock.not_implemented
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,115 @@
1
+ module Fog
2
+ module Vcloud
3
+ module Terremark
4
+ module Ecloud
5
+ module Real
6
+
7
+ def generate_configure_vapp_request(vapp_uri, vapp_data)
8
+ rasd_xmlns = { "xmlns" => "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" }
9
+
10
+ xml = Nokogiri::XML(request( :uri => vapp_uri).body)
11
+ xml.root['name'] = vapp_data[:name]
12
+
13
+ #cpu
14
+ xml.at("//xmlns:ResourceType[.='3']/..", rasd_xmlns).at('.//xmlns:VirtualQuantity', rasd_xmlns).content = vapp_data[:cpus]
15
+
16
+ #memory
17
+ xml.at("//xmlns:ResourceType[.='4']/..", rasd_xmlns).at('.//xmlns:VirtualQuantity', rasd_xmlns).content = vapp_data[:memory]
18
+
19
+ #disks
20
+ real_disks = xml.xpath("//xmlns:ResourceType[ .='17']/..", rasd_xmlns)
21
+ real_disk_numbers = real_disks.map { |disk| disk.at('.//xmlns:AddressOnParent', rasd_xmlns).content }
22
+ disk_numbers = vapp_data[:disks].map { |vdisk| vdisk[:number].to_s }
23
+
24
+ if vapp_data[:disks].length < real_disks.length
25
+ #Assume we're removing a disk
26
+ remove_disk_numbers = real_disk_numbers - disk_numbers
27
+ remove_disk_numbers.each do |number|
28
+ if result = xml.at("//xmlns:ResourceType[ .='17']/../xmlns:AddressOnParent[.='#{number}']/..", rasd_xmlns)
29
+ result.remove
30
+ end
31
+ end
32
+ elsif vapp_data[:disks].length > real_disks.length
33
+ add_disk_numbers = disk_numbers - real_disk_numbers
34
+
35
+ add_disk_numbers.each do |number|
36
+ new_disk = real_disks.first.dup
37
+ new_disk.at('.//xmlns:AddressOnParent', rasd_xmlns).content = -1
38
+ new_disk.at('.//xmlns:VirtualQuantity', rasd_xmlns).content = vapp_data[:disks].detect { |disk| disk[:number].to_s == number.to_s }[:size]
39
+ real_disks.first.parent << new_disk
40
+ end
41
+ end
42
+
43
+ #puts xml.root.to_s
44
+ xml.root.to_s
45
+
46
+ #builder = Builder::XmlMarkup.new
47
+ #builder.Vapp(:href => vapp_uri.to_s,
48
+ # :type => 'application/vnd.vmware.vcloud.vApp+xml',
49
+ # :name => vapp_data[:name],
50
+ # :status => 2,
51
+ # :size => 0,
52
+ # :xmlns => 'http://www.vmware.com/vcloud/v0.8',
53
+ # :"xmlns:xsi" => 'http://www.w3.org/2001/XMLSchema-instance',
54
+ # :"xmlns:xsd" => 'http://www.w3.org/2001/XMLSchema') {
55
+ # #builder.VirtualHardwareSection(:xmlns => 'http://schemas.dmtf.org/ovf/envelope/1') {
56
+ # builder.Section(:"xsi:type" => "q2:VirtualHardwareSection_Type", :xmlns => "http://schemas.dmtf.org/ovf/envelope/1", :"xmlns:q2" => "http://www.vmware.com/vcloud/v0.8") {
57
+ # builder.Info('Virtual Hardware')
58
+ # builder.Item(:xmlns => 'http://schemas.dmtf.org/ovf/envelope/1') {
59
+ # #builder.Item {
60
+ # builder.InstanceID(1, :xmlns => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
61
+ # builder.ResourceType(3, :xmlns => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
62
+ # builder.VirtualQuantity(vapp_data[:cpus], :xmlns => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
63
+ # }
64
+ # builder.Item(:xmlns => 'http://schemas.dmtf.org/ovf/envelope/1') {
65
+ # #builder.Item {
66
+ # builder.InstanceID(2, :xmlns => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
67
+ # builder.ResourceType(4, :xmlns => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
68
+ # builder.VirtualQuantity(vapp_data[:memory], :xmlns => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
69
+ # }
70
+ # vapp_data[:disks].each do |disk_data|
71
+ # #builder.Item(:xmlns => 'http://schemas.dmtf.org/ovf/envelope/1') {
72
+ # builder.Item {
73
+ # builder.AddressOnParent(disk_data[:number], :xmlns => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
74
+ # builder.HostResource(disk_data[:resource], :xmlns => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
75
+ # builder.InstanceID(9, :xmlns => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
76
+ # builder.ResourceType(17, :xmlns => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
77
+ # builder.VirtualQuantity(disk_data[:size], :xmlns => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
78
+ # }
79
+ # end
80
+ #
81
+ # }
82
+ #}
83
+ end
84
+
85
+ def validate_vapp_data(vapp_data)
86
+ valid_opts = [:name, :cpus, :memory, :disks]
87
+ unless valid_opts.all? { |opt| vapp_data.keys.include?(opt) }
88
+ raise ArgumentError.new("Required Vapp data missing: #{(valid_opts - vapp_data.keys).map(&:inspect).join(", ")}")
89
+ end
90
+ end
91
+
92
+ def configure_vapp(vapp_uri, vapp_data)
93
+ validate_vapp_data(vapp_data)
94
+
95
+ request(
96
+ :body => generate_configure_vapp_request(vapp_uri, vapp_data),
97
+ :expects => 202,
98
+ :headers => {'Content-Type' => 'application/vnd.vmware.vcloud.vApp+xml' },
99
+ :method => 'PUT',
100
+ :uri => vapp_uri
101
+ )
102
+ end
103
+
104
+ end
105
+
106
+ module Mock
107
+ def configure_vapp(vapp_uri, vapp_data)
108
+ Fog::Mock.not_implemented
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
115
+
@@ -2,34 +2,15 @@ module Fog
2
2
  module Vcloud
3
3
  module Terremark
4
4
  module Ecloud
5
- module Real
6
-
7
- def delete_internet_service(internet_service_uri)
8
- request(
9
- :body => "",
10
- :expects => 200,
11
- #:headers => {'Content-Type' => 'application/vnd.tmrk.ecloud.internetService+xml'},
12
- :method => 'DELETE',
13
- :uri => internet_service_uri
14
- )
15
- end
16
5
 
6
+ module Real
7
+ basic_request :delete_node, 200, 'DELETE', {}, ""
17
8
  end
18
9
 
19
10
  module Mock
20
- #
21
- # Based on
22
- # http://support.theenterprisecloud.com/kb/default.asp?id=561&Lang=1&SID=
23
- #
24
11
 
25
- def delete_internet_service(internet_service_uri)
26
- if service = Fog::Vcloud::Mock.data[:organizations].map { |org| org[:vdcs].map { |vdc| vdc[:public_ips].map { |public_ip| public_ip[:services].map { |service| service } } } }.
27
- flatten.detect { |service| service[:id].to_s == internet_service_uri.to_s.split('/')[-1] }
28
- Fog::Vcloud::Mock.data[:organizations].map { |org| org[:vdcs].map { |vdc| vdc[:public_ips].map { |public_ip| public_ip[:services].delete(service) } } }
29
- mock_it nil, 200, "", {}
30
- else
31
- mock_error 200, "401 Unauthorized"
32
- end
12
+ def delete_node(node_uri)
13
+ Fog::Mock.not_implemented
33
14
  end
34
15
  end
35
16
  end
@@ -0,0 +1,19 @@
1
+ module Fog
2
+ module Vcloud
3
+ module Terremark
4
+ module Ecloud
5
+
6
+ module Real
7
+ basic_request :delete_vapp, 202, "DELETE"
8
+ end
9
+
10
+ module Mock
11
+ def delete_vapp(vapp_uri)
12
+ Fog::Mock.not_implemented
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+
@@ -0,0 +1,18 @@
1
+ module Fog
2
+ module Vcloud
3
+ module Terremark
4
+ module Ecloud
5
+
6
+ module Real
7
+ basic_request :get_catalog
8
+ end
9
+
10
+ module Mock
11
+ def get_catalog(catalog_uri)
12
+ Fog::Mock.not_implemented
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Fog
2
+ module Vcloud
3
+ module Terremark
4
+ module Ecloud
5
+
6
+ module Real
7
+ basic_request :get_catalog_item
8
+ end
9
+
10
+ module Mock
11
+ def get_catalog(catalog_uri)
12
+ Fog::Mock.not_implemented
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Fog
2
+ module Vcloud
3
+ module Terremark
4
+ module Ecloud
5
+
6
+ module Real
7
+ basic_request :get_customization_options
8
+ end
9
+
10
+ module Mock
11
+ def get_customization_options( options_uri )
12
+ Fog::Mock.not_implemented
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -4,15 +4,7 @@ module Fog
4
4
  module Ecloud
5
5
 
6
6
  module Real
7
-
8
- def get_internet_services(internet_services_uri)
9
- request(
10
- :expects => 200,
11
- :method => 'GET',
12
- :parser => Fog::Parsers::Vcloud::Terremark::Ecloud::GetInternetServices.new,
13
- :uri => internet_services_uri
14
- )
15
- end
7
+ basic_request :get_internet_services
16
8
  end
17
9
 
18
10
  module Mock
@@ -39,28 +31,29 @@ module Fog
39
31
  xml.Enabled(service[:enabled])
40
32
  xml.Timeout(service[:timeout])
41
33
  xml.Description(service[:description])
42
- xml.UrlSendString
43
- xml.HttpHeader
34
+ xml.RedirectURL
35
+ xml.Monitor
44
36
  }
45
37
  end
46
38
  end
47
39
 
48
40
  def get_internet_services(internet_services_uri)
41
+ internet_services_uri = ensure_unparsed(internet_services_uri)
49
42
  xml = nil
50
43
  builder = Builder::XmlMarkup.new
51
- if vdc = Fog::Vcloud::Mock.vdc_from_uri(internet_services_uri)
52
- xml = builder.InternetServices( :xmlns => "urn:tmrk:eCloudExtensions-2.0",:"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance" ) { |xml|
44
+ if vdc = vdc_from_uri(internet_services_uri)
45
+ xml = builder.InternetServices( :xmlns => "urn:tmrk:eCloudExtensions-2.3",:"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance" ) { |xml|
53
46
  vdc[:public_ips].each do |ip|
54
47
  Fog::Vcloud::Terremark::Ecloud::Mock.internet_services_for_ip(xml,ip)
55
48
  end
56
49
  }
57
- elsif ip = Fog::Vcloud::Mock.ip_from_uri(internet_services_uri)
58
- xml = builder.InternetServices( :xmlns => "urn:tmrk:eCloudExtensions-2.0",:"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance" ) { |xml|
50
+ elsif ip = ip_from_uri(internet_services_uri)
51
+ xml = builder.InternetServices( :xmlns => "urn:tmrk:eCloudExtensions-2.3",:"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance" ) { |xml|
59
52
  Fog::Vcloud::Terremark::Ecloud::Mock.internet_services_for_ip(xml,ip)
60
53
  }
61
54
  end
62
55
  if xml
63
- mock_it Fog::Parsers::Vcloud::Terremark::Ecloud::GetInternetServices.new, 200,
56
+ mock_it 200,
64
57
  xml, { 'Content-Type' => 'application/vnd.tmrk.ecloud.internetServicesList+xml' }
65
58
  else
66
59
  mock_error 200, "401 Unauthorized"
@@ -2,17 +2,9 @@ module Fog
2
2
  module Vcloud
3
3
  module Terremark
4
4
  module Ecloud
5
- module Real
6
-
7
- def get_network(network_uri)
8
- request(
9
- :expects => 200,
10
- :method => 'GET',
11
- :parser => Fog::Parsers::Vcloud::Terremark::Ecloud::Network.new,
12
- :uri => network_uri
13
- )
14
- end
15
5
 
6
+ module Real
7
+ # Handled by the main Vcloud get_network
16
8
  end
17
9
 
18
10
  module Mock
@@ -22,21 +14,23 @@ module Fog
22
14
  # Based off of:
23
15
  # http://support.theenterprisecloud.com/kb/default.asp?id=546&Lang=1&SID=
24
16
  #
17
+ network_uri = ensure_unparsed(network_uri)
25
18
  type = "application/vnd.vmware.vcloud.network+xml"
26
19
  response = Excon::Response.new
27
- if network = mock_data[:organizations].map { |org| org[:vdcs].map { |vdc| vdc[:networks] } }.flatten.detect { |network| network[:href] == network_uri.to_s }
20
+ if network = mock_data[:organizations].map { |org| org[:vdcs].map { |vdc| vdc[:networks] } }.flatten.detect { |network| network[:href] == network_uri }
28
21
  xml = Builder::XmlMarkup.new
29
- mock_it Fog::Parsers::Vcloud::Terremark::Ecloud::Network.new, 200,
22
+ mock_it 200,
30
23
  xml.Network(xmlns.merge(:href => network[:href], :name => network[:name], :type => type)) {
31
24
  xml.Link( :rel => "down", :href => network[:href] + "/ips", :type => "application/xml", :name => "IP Addresses" )
25
+ xml.Link( :rel => "down", :href => network[:extension_href], :type => "application/xml", :name => network[:name] )
32
26
  xml.Configuration {
33
27
  xml.Gateway(network[:gateway])
34
28
  xml.Netmask(network[:netmask])
35
29
  }
36
30
  if network[:features]
37
31
  xml.Features {
38
- if feature = network[:features].detect { |feature| feature[:type] == :fencemode }
39
- xml.FenceMode(feature[:value])
32
+ network[:features].each do |feature|
33
+ eval "xml.#{feature[:type].to_sym}('#{feature[:value]}')"
40
34
  end
41
35
  }
42
36
  end
@@ -0,0 +1,36 @@
1
+ module Fog
2
+ module Vcloud
3
+ module Terremark
4
+ module Ecloud
5
+
6
+ module Real
7
+ basic_request :get_network_extensions
8
+ end
9
+
10
+ module Mock
11
+
12
+ def get_network_extensions(network_uri)
13
+ network_uri = ensure_unparsed(network_uri)
14
+ type = "application/vnd.vmware.vcloud.network+xml"
15
+ response = Excon::Response.new
16
+ if network = mock_data[:organizations].map { |org| org[:vdcs].map { |vdc| vdc[:networks] } }.flatten.detect { |network| network[:extension_href] == network_uri }
17
+ xml = Builder::XmlMarkup.new
18
+ mock_it 200,
19
+ xml.Network(:xmlns => "urn:tmrk:eCloudExtensions-2.3", :"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance") {
20
+ xml.Address(network[:name].split("/")[0])
21
+ xml.RnatAddress(network[:rnat])
22
+ xml.Href(network[:extension_href])
23
+ xml.Id(network[:id])
24
+ xml.Name(network[:name])
25
+ xml.GatewayAddress(network[:gateway])
26
+ xml.BroadcastAddress(IPAddr.new(network[:subnet]).to_range.last.to_s)
27
+ }, { 'Content-Type' => type }
28
+ else
29
+ mock_error 200, "401 Unauthorized"
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end