fog 1.27.0 → 1.28.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +71 -0
  3. data/Rakefile +2 -2
  4. data/bin/fog +2 -2
  5. data/fog.gemspec +4 -3
  6. data/lib/fog/bin/clodo.rb +1 -1
  7. data/lib/fog/bin/openstack.rb +5 -0
  8. data/lib/fog/digitalocean/examples/getting_started.md +46 -4
  9. data/lib/fog/digitalocean/models/compute/server.rb +1 -3
  10. data/lib/fog/digitalocean/models/compute/servers.rb +30 -0
  11. data/lib/fog/fogdocker/compute.rb +3 -2
  12. data/lib/fog/fogdocker/requests/compute/container_action.rb +1 -1
  13. data/lib/fog/fogdocker/requests/compute/container_all.rb +1 -1
  14. data/lib/fog/fogdocker/requests/compute/container_commit.rb +1 -1
  15. data/lib/fog/fogdocker/requests/compute/container_create.rb +1 -1
  16. data/lib/fog/fogdocker/requests/compute/container_delete.rb +1 -1
  17. data/lib/fog/fogdocker/requests/compute/container_get.rb +1 -1
  18. data/lib/fog/fogdocker/requests/compute/image_all.rb +1 -1
  19. data/lib/fog/fogdocker/requests/compute/image_create.rb +1 -1
  20. data/lib/fog/fogdocker/requests/compute/image_delete.rb +1 -1
  21. data/lib/fog/fogdocker/requests/compute/image_get.rb +1 -1
  22. data/lib/fog/fogdocker/requests/compute/image_search.rb +1 -1
  23. data/lib/fog/google/compute.rb +2 -1
  24. data/lib/fog/google/core.rb +42 -12
  25. data/lib/fog/google/dns.rb +2 -1
  26. data/lib/fog/google/monitoring.rb +1 -1
  27. data/lib/fog/google/sql.rb +1 -1
  28. data/lib/fog/hp/requests/storage/get_object.rb +5 -3
  29. data/lib/fog/joyent/compute.rb +2 -0
  30. data/lib/fog/openstack.rb +1 -0
  31. data/lib/fog/openstack/baremetal.rb +370 -0
  32. data/lib/fog/openstack/core.rb +1 -0
  33. data/lib/fog/openstack/docs/orchestration.md +318 -0
  34. data/lib/fog/openstack/docs/storage.md +1 -7
  35. data/lib/fog/openstack/models/baremetal/chassis.rb +60 -0
  36. data/lib/fog/openstack/models/baremetal/chassis_collection.rb +38 -0
  37. data/lib/fog/openstack/models/baremetal/driver.rb +30 -0
  38. data/lib/fog/openstack/models/baremetal/drivers.rb +21 -0
  39. data/lib/fog/openstack/models/baremetal/node.rb +85 -0
  40. data/lib/fog/openstack/models/baremetal/nodes.rb +38 -0
  41. data/lib/fog/openstack/models/baremetal/port.rb +61 -0
  42. data/lib/fog/openstack/models/baremetal/ports.rb +38 -0
  43. data/lib/fog/openstack/models/orchestration/event.rb +20 -0
  44. data/lib/fog/openstack/models/orchestration/events.rb +28 -0
  45. data/lib/fog/openstack/models/orchestration/resource.rb +32 -0
  46. data/lib/fog/openstack/models/orchestration/resource_schemas.rb +17 -0
  47. data/lib/fog/openstack/models/orchestration/resources.rb +35 -0
  48. data/lib/fog/openstack/models/orchestration/stack.rb +91 -24
  49. data/lib/fog/openstack/models/orchestration/stacks.rb +38 -4
  50. data/lib/fog/openstack/models/orchestration/template.rb +15 -0
  51. data/lib/fog/openstack/models/orchestration/templates.rb +44 -0
  52. data/lib/fog/openstack/orchestration.rb +48 -2
  53. data/lib/fog/openstack/requests/baremetal/create_chassis.rb +44 -0
  54. data/lib/fog/openstack/requests/baremetal/create_node.rb +54 -0
  55. data/lib/fog/openstack/requests/baremetal/create_port.rb +46 -0
  56. data/lib/fog/openstack/requests/baremetal/delete_chassis.rb +25 -0
  57. data/lib/fog/openstack/requests/baremetal/delete_node.rb +25 -0
  58. data/lib/fog/openstack/requests/baremetal/delete_port.rb +25 -0
  59. data/lib/fog/openstack/requests/baremetal/get_chassis.rb +24 -0
  60. data/lib/fog/openstack/requests/baremetal/get_driver.rb +24 -0
  61. data/lib/fog/openstack/requests/baremetal/get_driver_properties.rb +40 -0
  62. data/lib/fog/openstack/requests/baremetal/get_node.rb +24 -0
  63. data/lib/fog/openstack/requests/baremetal/get_port.rb +24 -0
  64. data/lib/fog/openstack/requests/baremetal/list_chassis.rb +48 -0
  65. data/lib/fog/openstack/requests/baremetal/list_chassis_detailed.rb +31 -0
  66. data/lib/fog/openstack/requests/baremetal/list_drivers.rb +24 -0
  67. data/lib/fog/openstack/requests/baremetal/list_nodes.rb +40 -0
  68. data/lib/fog/openstack/requests/baremetal/list_nodes_detailed.rb +31 -0
  69. data/lib/fog/openstack/requests/baremetal/list_ports.rb +48 -0
  70. data/lib/fog/openstack/requests/baremetal/list_ports_detailed.rb +31 -0
  71. data/lib/fog/openstack/requests/baremetal/patch_chassis.rb +42 -0
  72. data/lib/fog/openstack/requests/baremetal/patch_node.rb +41 -0
  73. data/lib/fog/openstack/requests/baremetal/patch_port.rb +41 -0
  74. data/lib/fog/openstack/requests/compute/create_server.rb +1 -0
  75. data/lib/fog/openstack/requests/orchestration/abandon_stack.rb +15 -0
  76. data/lib/fog/openstack/requests/orchestration/build_info.rb +15 -0
  77. data/lib/fog/openstack/requests/orchestration/create_stack.rb +31 -12
  78. data/lib/fog/openstack/requests/orchestration/delete_stack.rb +28 -5
  79. data/lib/fog/openstack/requests/orchestration/get_stack_template.rb +20 -0
  80. data/lib/fog/openstack/requests/orchestration/list_resource_events.rb +23 -0
  81. data/lib/fog/openstack/requests/orchestration/list_resource_types.rb +26 -0
  82. data/lib/fog/openstack/requests/orchestration/list_resources.rb +23 -0
  83. data/lib/fog/openstack/requests/orchestration/list_stack_data.rb +27 -0
  84. data/lib/fog/openstack/requests/orchestration/list_stack_events.rb +23 -0
  85. data/lib/fog/openstack/requests/orchestration/preview_stack.rb +16 -0
  86. data/lib/fog/openstack/requests/orchestration/show_event_details.rb +26 -0
  87. data/lib/fog/openstack/requests/orchestration/show_resource_data.rb +26 -0
  88. data/lib/fog/openstack/requests/orchestration/show_resource_metadata.rb +26 -0
  89. data/lib/fog/openstack/requests/orchestration/show_resource_schema.rb +15 -0
  90. data/lib/fog/openstack/requests/orchestration/show_resource_template.rb +20 -0
  91. data/lib/fog/openstack/requests/orchestration/show_stack_details.rb +26 -0
  92. data/lib/fog/openstack/requests/orchestration/update_stack.rb +34 -7
  93. data/lib/fog/openstack/requests/orchestration/validate_template.rb +16 -0
  94. data/lib/fog/openstack/volume.rb +0 -1
  95. data/lib/fog/ovirt/compute.rb +6 -0
  96. data/lib/fog/ovirt/models/compute/server.rb +10 -0
  97. data/lib/fog/ovirt/models/compute/template.rb +1 -0
  98. data/lib/fog/ovirt/models/compute/volumes.rb +1 -2
  99. data/lib/fog/ovirt/requests/compute/attach_volume.rb +22 -0
  100. data/lib/fog/ovirt/requests/compute/detach_volume.rb +22 -0
  101. data/lib/fog/ovirt/requests/compute/list_volumes.rb +19 -0
  102. data/lib/fog/ovirt/requests/compute/mock_files/disks.xml +58 -0
  103. data/lib/fog/vcloud_director/models/compute/task.rb +2 -2
  104. data/lib/fog/version.rb +1 -1
  105. data/lib/fog/vsphere/compute.rb +3 -0
  106. data/lib/fog/vsphere/requests/compute/cloudinit_to_customspec.rb +20 -11
  107. data/lib/fog/vsphere/requests/compute/get_compute_resource.rb +41 -0
  108. data/lib/fog/vsphere/requests/compute/get_network.rb +35 -6
  109. data/lib/fog/vsphere/requests/compute/get_resource_pool.rb +1 -1
  110. data/lib/fog/vsphere/requests/compute/get_virtual_machine.rb +19 -13
  111. data/lib/fog/vsphere/requests/compute/list_compute_resources.rb +92 -0
  112. data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +16 -11
  113. data/lib/fog/vsphere/requests/compute/vm_clone.rb +6 -5
  114. data/lib/fog/xenserver/requests/compute/create_sr.rb +3 -4
  115. data/lib/tasks/changelog_task.rb +1 -0
  116. data/tests/helper.rb +3 -3
  117. data/tests/helpers/mock_helper.rb +0 -4
  118. data/tests/openstack/requests/baremetal/chassis_tests.rb +48 -0
  119. data/tests/openstack/requests/baremetal/driver_tests.rb +40 -0
  120. data/tests/openstack/requests/baremetal/node_tests.rb +65 -0
  121. data/tests/openstack/requests/baremetal/port_tests.rb +56 -0
  122. data/tests/openstack/requests/compute/server_tests.rb +2 -0
  123. data/tests/openstack/requests/orchestration/stack_tests.rb +2 -2
  124. data/tests/vsphere/requests/compute/get_network_tests.rb +48 -0
  125. metadata +88 -23
  126. data/lib/fog/aws.rb +0 -23
  127. data/lib/fog/bin/riakcs.rb +0 -25
  128. data/lib/fog/openstack/requests/orchestration/list_stacks.rb +0 -47
  129. data/lib/fog/riakcs.rb +0 -2
  130. data/lib/fog/riakcs/core.rb +0 -121
  131. data/lib/fog/riakcs/provisioning.rb +0 -98
  132. data/lib/fog/riakcs/requests/provisioning/create_user.rb +0 -77
  133. data/lib/fog/riakcs/requests/provisioning/disable_user.rb +0 -23
  134. data/lib/fog/riakcs/requests/provisioning/enable_user.rb +0 -23
  135. data/lib/fog/riakcs/requests/provisioning/get_user.rb +0 -41
  136. data/lib/fog/riakcs/requests/provisioning/list_users.rb +0 -43
  137. data/lib/fog/riakcs/requests/provisioning/regrant_secret.rb +0 -23
  138. data/lib/fog/riakcs/requests/provisioning/update_user.rb +0 -23
  139. data/lib/fog/riakcs/requests/usage/get_usage.rb +0 -68
  140. data/lib/fog/riakcs/usage.rb +0 -62
  141. data/tests/riakcs/requests/provisioning/provisioning_tests.rb +0 -174
  142. data/tests/riakcs/requests/usage/usage_tests.rb +0 -29
@@ -0,0 +1,26 @@
1
+ module Fog
2
+ module Orchestration
3
+ class OpenStack
4
+ class Real
5
+ def list_resource_types
6
+ request(
7
+ :method => 'GET',
8
+ :path => "resource_types",
9
+ :expects => 200
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def list_resource_types
16
+ resources = self.data[:resource_types].values
17
+
18
+ Excon::Response.new(
19
+ :body => { 'resource_types' => resources },
20
+ :status => 200
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ module Fog
2
+ module Orchestration
3
+ class OpenStack
4
+ class Real
5
+ def list_resources(stack, options={})
6
+ uri = "stacks/#{stack.stack_name}/#{stack.id}/resources"
7
+ request(:method => 'GET', :path => uri, :expects => 200, :query => options)
8
+ end
9
+ end
10
+
11
+ class Mock
12
+ def list_resources(stack)
13
+ resources = self.data[:resources].values
14
+
15
+ Excon::Response.new(
16
+ :body => { 'resources' => resources },
17
+ :status => 200
18
+ )
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,27 @@
1
+ module Fog
2
+ module Orchestration
3
+ class OpenStack
4
+ class Real
5
+ def list_stack_data(options={})
6
+ request(
7
+ :method => 'GET',
8
+ :path => 'stacks',
9
+ :expects => 200,
10
+ :query => options
11
+ )
12
+ end
13
+ end
14
+
15
+ class Mock
16
+ def list_stack_data
17
+ stacks = self.data[:stacks].values
18
+
19
+ Excon::Response.new(
20
+ :body => { 'stacks' => stacks },
21
+ :status => 200
22
+ )
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ module Fog
2
+ module Orchestration
3
+ class OpenStack
4
+ class Real
5
+ def list_stack_events(stack, options={})
6
+ uri = "stacks/#{stack.stack_name}/#{stack.id}/events"
7
+ request(:method => 'GET', :path => uri, :expects => 200, :query => options )
8
+ end
9
+ end
10
+
11
+ class Mock
12
+ def list_stack_events
13
+ events = self.data[:events].values
14
+
15
+ Excon::Response.new(
16
+ :body => { 'events' => events },
17
+ :status => 200
18
+ )
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ module Fog
2
+ module Orchestration
3
+ class OpenStack
4
+ class Real
5
+ def preview_stack(options = {})
6
+ request(
7
+ :body => Fog::JSON.encode(options),
8
+ :expects => [200],
9
+ :method => 'POST',
10
+ :path => 'stacks/preview'
11
+ )
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,26 @@
1
+ module Fog
2
+ module Orchestration
3
+ class OpenStack
4
+ class Real
5
+ def show_event_details(stack, resource, event_id)
6
+ request(
7
+ :method => 'GET',
8
+ :path => "stacks/#{stack.stack_name}/#{stack.id}/resources/#{resource.resource_name}/events/#{event_id}",
9
+ :expects => 200
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def show_event_details(stack, event)
16
+ events = self.data[:events].values
17
+
18
+ Excon::Response.new(
19
+ :body => { 'events' => events },
20
+ :status => 200
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ module Fog
2
+ module Orchestration
3
+ class OpenStack
4
+ class Real
5
+ def show_resource_data(stack_name, stack_id, resource_name)
6
+ request(
7
+ :method => 'GET',
8
+ :path => "stacks/#{stack_name}/#{stack_id}/resources/#{resource_name}",
9
+ :expects => 200
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def show_resource_data(stack_name, stack_id, resource_name)
16
+ resources = self.data[:resources].values
17
+
18
+ Excon::Response.new(
19
+ :body => { 'resources' => resources },
20
+ :status => 200
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ module Fog
2
+ module Orchestration
3
+ class OpenStack
4
+ class Real
5
+ def show_resource_metadata(stack, resource_name)
6
+ request(
7
+ :method => 'GET',
8
+ :path => "stacks/#{stack.stack_name}/#{stack.id}/resources/#{resource_name}/metadata",
9
+ :expects => 200
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def show_resource_metadata(stack, resource_name)
16
+ resources = self.data[:resources].values
17
+
18
+ Excon::Response.new(
19
+ :body => { 'resources' => resources },
20
+ :status => 200
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ module Fog
2
+ module Orchestration
3
+ class OpenStack
4
+ class Real
5
+ def show_resource_schema(name)
6
+ request(
7
+ :method => 'GET',
8
+ :path => "resource_types/#{name}",
9
+ :expects => 200
10
+ )
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ module Fog
2
+ module Orchestration
3
+ class OpenStack
4
+ class Real
5
+ def show_resource_template(name)
6
+ request(
7
+ :method => 'GET',
8
+ :path => "resource_types/#{name}/template",
9
+ :expects => 200
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def show_resource_template(name)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ module Fog
2
+ module Orchestration
3
+ class OpenStack
4
+ class Real
5
+ def show_stack_details(name, id)
6
+ request(
7
+ :method => 'GET',
8
+ :path => "stacks/#{name}/#{id}",
9
+ :expects => 200
10
+ )
11
+ end
12
+ end
13
+
14
+ class Mock
15
+ def show_stack_details(name, id)
16
+ stack = self.data[:stack].values
17
+
18
+ Excon::Response.new(
19
+ :body => { 'stack' => stack },
20
+ :status => 200
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -4,18 +4,29 @@ module Fog
4
4
  class Real
5
5
  # Update a stack.
6
6
  #
7
- # @param [String] stack_id ID of the stack to update.
8
- # @param [String] stack_name Name of the stack to update.
7
+ # @param [Fog::Orchestration::OpenStack::Stack] the stack to update.
9
8
  # @param [Hash] options
10
9
  # * :template [String] Structure containing the template body.
11
10
  # or (one of the two Template parameters is required)
12
11
  # * :template_url [String] URL of file containing the template body.
13
12
  # * :parameters [Hash] Hash of providers to supply to template.
14
13
  #
15
- def update_stack(stack_id, stack_name, options = {})
16
- params = {
17
- :stack_name => stack_name
18
- }.merge(options)
14
+ def update_stack(arg1, arg2 = nil, arg3 = nil)
15
+ if arg1.is_a?(Stack)
16
+ # Normal use, update_stack(stack, options = {})
17
+ stack = arg1
18
+ stack_name = stack.stack_name
19
+ stack_id = stack.id
20
+ params = arg2.nil? ? {} : arg2
21
+ else
22
+ # Deprecated, update_stack(stack_id, stack_name, options = {})
23
+ Fog::Logger.deprecation("#update_stack(stack_id, stack_name, options) is deprecated, use #update_stack(stack, options) instead [light_black](#{caller.first})[/]")
24
+ stack_id = arg1
25
+ stack_name = arg2
26
+ params = {
27
+ :stack_name => stack_name
28
+ }.merge(arg3.nil? ? {} : arg3)
29
+ end
19
30
 
20
31
  request(
21
32
  :expects => 202,
@@ -27,7 +38,23 @@ module Fog
27
38
  end
28
39
 
29
40
  class Mock
30
- def update_stack(stack_name, options = {})
41
+ def update_stack(arg1, arg2 = nil, arg3 = nil)
42
+ if arg1.is_a?(Stack)
43
+ # Normal use, update_stack(stack, options = {})
44
+ stack = arg1
45
+ stack_name = stack.stack_name
46
+ stack_id = stack.id
47
+ params = arg2.nil? ? {} : arg2
48
+ else
49
+ # Deprecated, update_stack(stack_id, stack_name, options = {})
50
+ Fog::Logger.deprecation("#update_stack(stack_id, stack_name, options) is deprecated, use #update_stack(stack, options) instead [light_black](#{caller.first})[/]")
51
+ stack_id = arg1
52
+ stack_name = arg2
53
+ params = {
54
+ :stack_name => stack_name
55
+ }.merge(arg3.nil? ? {} : arg3)
56
+ end
57
+
31
58
  response = Excon::Response.new
32
59
  response.status = 202
33
60
  response.body = {}
@@ -0,0 +1,16 @@
1
+ module Fog
2
+ module Orchestration
3
+ class OpenStack
4
+ class Real
5
+ def validate_template(options = {})
6
+ request(
7
+ :body => Fog::JSON.encode(options),
8
+ :expects => [200],
9
+ :method => 'POST',
10
+ :path => 'validate'
11
+ )
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -193,7 +193,6 @@ module Fog
193
193
  :openstack_api_key => @openstack_api_key,
194
194
  :openstack_username => @openstack_username,
195
195
  :openstack_auth_uri => @openstack_auth_uri,
196
- :openstack_region => @openstack_region,
197
196
  :openstack_auth_token => @openstack_must_reauthenticate ? nil : @openstack_auth_token,
198
197
  :openstack_service_type => @openstack_service_type,
199
198
  :openstack_service_name => @openstack_service_name,
@@ -45,9 +45,12 @@ module Fog
45
45
  request :vm_ticket
46
46
  request :list_vm_volumes
47
47
  request :list_template_volumes
48
+ request :list_volumes
48
49
  request :add_volume
49
50
  request :destroy_volume
50
51
  request :update_volume
52
+ request :attach_volume
53
+ request :detach_volume
51
54
  request :get_api_version
52
55
  request :list_quotas
53
56
  request :get_quota
@@ -65,6 +68,8 @@ module Fog
65
68
  opts[key] = case value
66
69
  when OVIRT::Link
67
70
  value.id
71
+ when OVIRT::TemplateVersion
72
+ value
68
73
  when Array
69
74
  value
70
75
  when Hash
@@ -114,6 +119,7 @@ module Fog
114
119
  connection_opts[:ca_cert_store] = options[:ovirt_ca_cert_store]
115
120
  connection_opts[:ca_cert_file] = options[:ovirt_ca_cert_file]
116
121
  connection_opts[:ca_no_verify] = options[:ovirt_ca_no_verify]
122
+ connection_opts[:filtered_api] = options[:ovirt_filtered_api]
117
123
 
118
124
  @client = OVIRT::Client.new(username, password, url, connection_opts)
119
125
  end
@@ -89,6 +89,16 @@ module Fog
89
89
  service.update_volume(id, attrs)
90
90
  end
91
91
 
92
+ def attach_volume(attrs)
93
+ wait_for { stopped? } if attrs[:blocking]
94
+ service.attach_volume(id, attrs)
95
+ end
96
+
97
+ def detach_volume(attrs)
98
+ wait_for { stopped? } if attrs[:blocking]
99
+ service.detach_volume(id, attrs)
100
+ end
101
+
92
102
  def start(options = {})
93
103
  wait_for { !locked? } if options[:blocking]
94
104
  service.vm_action(:id =>id, :action => :start)
@@ -19,6 +19,7 @@ module Fog
19
19
  attribute :cluster
20
20
  attribute :interfaces
21
21
  attribute :volumes
22
+ attribute :version
22
23
 
23
24
  def interfaces
24
25
  attributes[:interfaces] ||= id.nil? ? [] : Fog::Compute::Ovirt::Interfaces.new(
@@ -10,13 +10,12 @@ module Fog
10
10
  attr_accessor :vm
11
11
 
12
12
  def all(filters = {})
13
- requires :vm
14
13
  if vm.is_a? Fog::Compute::Ovirt::Server
15
14
  load service.list_vm_volumes(vm.id)
16
15
  elsif vm.is_a? Fog::Compute::Ovirt::Template
17
16
  load service.list_template_volumes(vm.id)
18
17
  else
19
- raise 'volumes should have vm or template'
18
+ load service.list_volumes
20
19
  end
21
20
  end
22
21
 
@@ -0,0 +1,22 @@
1
+ module Fog
2
+ module Compute
3
+ class Ovirt
4
+ class Real
5
+ def attach_volume(id, options)
6
+ raise ArgumentError, "instance id is a required parameter" unless id
7
+ raise ArgumentError, "volume id is a required parameter for attach-volume" unless options.key? :id
8
+
9
+ client.attach_volume(id, options[:id])
10
+ end
11
+ end
12
+
13
+ class Mock
14
+ def attach_volume(id, options)
15
+ raise ArgumentError, "instance id is a required parameter" unless id
16
+ raise ArgumentError, "volume id is a required parameter for attach-volume" unless options.key? :id
17
+ true
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end