fog 1.28.0 → 1.29.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +111 -0
  3. data/CONTRIBUTING.md +255 -1
  4. data/Rakefile +1 -1
  5. data/fog.gemspec +41 -44
  6. data/lib/fog.rb +1 -0
  7. data/lib/fog/bin.rb +1 -0
  8. data/lib/fog/bin/openstack.rb +2 -0
  9. data/lib/fog/cloudsigma/mock_data.rb +37 -33
  10. data/lib/fog/dnsmadeeasy/models/dns/record.rb +1 -1
  11. data/lib/fog/fogdocker/requests/compute/api_version.rb +1 -1
  12. data/lib/fog/glesys/compute.rb +9 -1
  13. data/lib/fog/glesys/models/compute/server.rb +32 -21
  14. data/lib/fog/glesys/models/compute/ssh_key.rb +28 -0
  15. data/lib/fog/glesys/models/compute/ssh_keys.rb +21 -0
  16. data/lib/fog/glesys/requests/compute/edit.rb +11 -0
  17. data/lib/fog/glesys/requests/compute/ssh_key_add.rb +11 -0
  18. data/lib/fog/glesys/requests/compute/ssh_key_list.rb +11 -0
  19. data/lib/fog/glesys/requests/compute/ssh_key_remove.rb +11 -0
  20. data/lib/fog/google/compute.rb +2 -0
  21. data/lib/fog/google/models/compute/server.rb +14 -0
  22. data/lib/fog/google/requests/compute/start_server.rb +24 -0
  23. data/lib/fog/google/requests/compute/stop_server.rb +24 -0
  24. data/lib/fog/linode/compute.rb +7 -0
  25. data/lib/fog/linode/requests/compute/image_delete.rb +42 -0
  26. data/lib/fog/linode/requests/compute/image_list.rb +64 -0
  27. data/lib/fog/linode/requests/compute/linode_disk_createfromimage.rb +37 -0
  28. data/lib/fog/linode/requests/compute/linode_disk_duplicate.rb +33 -0
  29. data/lib/fog/linode/requests/compute/linode_disk_imagize.rb +37 -0
  30. data/lib/fog/linode/requests/compute/linode_disk_resize.rb +36 -0
  31. data/lib/fog/linode/requests/compute/linode_disk_update.rb +34 -0
  32. data/lib/fog/openstack.rb +1 -0
  33. data/lib/fog/openstack/compute.rb +12 -1
  34. data/lib/fog/openstack/core.rb +159 -5
  35. data/lib/fog/openstack/docs/planning.md +270 -0
  36. data/lib/fog/openstack/examples/planning/basics.rb +53 -0
  37. data/lib/fog/openstack/models/planning/plan.rb +81 -0
  38. data/lib/fog/openstack/models/planning/plans.rb +31 -0
  39. data/lib/fog/openstack/models/planning/role.rb +29 -0
  40. data/lib/fog/openstack/models/planning/roles.rb +16 -0
  41. data/lib/fog/openstack/planning.rb +235 -0
  42. data/lib/fog/openstack/requests/compute/get_hypervisor_statistics.rb +39 -0
  43. data/lib/fog/openstack/requests/identity/check_token.rb +4 -2
  44. data/lib/fog/openstack/requests/identity/validate_token.rb +4 -2
  45. data/lib/fog/openstack/requests/planning/add_role_to_plan.rb +40 -0
  46. data/lib/fog/openstack/requests/planning/create_plan.rb +33 -0
  47. data/lib/fog/openstack/requests/planning/delete_plan.rb +23 -0
  48. data/lib/fog/openstack/requests/planning/get_plan.rb +58 -0
  49. data/lib/fog/openstack/requests/planning/get_plan_templates.rb +28 -0
  50. data/lib/fog/openstack/requests/planning/list_plans.rb +60 -0
  51. data/lib/fog/openstack/requests/planning/list_roles.rb +38 -0
  52. data/lib/fog/openstack/requests/planning/patch_plan.rb +51 -0
  53. data/lib/fog/openstack/requests/planning/remove_role_from_plan.rb +32 -0
  54. data/lib/fog/ovirt/compute.rb +10 -0
  55. data/lib/fog/ovirt/models/compute/affinity_group.rb +25 -0
  56. data/lib/fog/ovirt/models/compute/affinity_groups.rb +20 -0
  57. data/lib/fog/ovirt/models/compute/server.rb +12 -0
  58. data/lib/fog/ovirt/models/compute/volume.rb +2 -0
  59. data/lib/fog/ovirt/requests/compute/add_to_affinity_group.rb +21 -0
  60. data/lib/fog/ovirt/requests/compute/create_affinity_group.rb +18 -0
  61. data/lib/fog/ovirt/requests/compute/destroy_affinity_group.rb +19 -0
  62. data/lib/fog/ovirt/requests/compute/get_affinity_group.rb +18 -0
  63. data/lib/fog/ovirt/requests/compute/list_affinity_group_vms.rb +22 -0
  64. data/lib/fog/ovirt/requests/compute/list_affinity_groups.rb +20 -0
  65. data/lib/fog/ovirt/requests/compute/mock_files/affinitygroup.xml +8 -0
  66. data/lib/fog/ovirt/requests/compute/mock_files/affinitygroup_vms.xml +9 -0
  67. data/lib/fog/ovirt/requests/compute/mock_files/affinitygroups.xml +17 -0
  68. data/lib/fog/ovirt/requests/compute/remove_from_affinity_group.rb +21 -0
  69. data/lib/fog/ovirt/requests/compute/update_interface.rb +18 -5
  70. data/lib/fog/rackspace/docs/block_storage.md +1 -1
  71. data/lib/fog/rackspace/docs/cdn_v2.md +1 -1
  72. data/lib/fog/rackspace/docs/compute_v2.md +1 -1
  73. data/lib/fog/rackspace/docs/getting_started.md +1 -1
  74. data/lib/fog/rackspace/docs/networking_v2.md +1 -1
  75. data/lib/fog/rackspace/docs/storage.md +1 -1
  76. data/lib/fog/rackspace/examples/README.md +1 -1
  77. data/lib/fog/rackspace/mock_data.rb +48 -48
  78. data/lib/fog/rackspace/models/networking_v2/security_group.rb +32 -0
  79. data/lib/fog/rackspace/models/networking_v2/security_group_rule.rb +38 -0
  80. data/lib/fog/rackspace/models/networking_v2/security_group_rules.rb +23 -0
  81. data/lib/fog/rackspace/models/networking_v2/security_groups.rb +23 -0
  82. data/lib/fog/rackspace/networking_v2.rb +24 -7
  83. data/lib/fog/rackspace/requests/networking_v2/create_security_group.rb +12 -0
  84. data/lib/fog/rackspace/requests/networking_v2/create_security_group_rule.rb +12 -0
  85. data/lib/fog/rackspace/requests/networking_v2/delete_security_group.rb +5 -0
  86. data/lib/fog/rackspace/requests/networking_v2/delete_security_group_rule.rb +5 -0
  87. data/lib/fog/rackspace/requests/networking_v2/list_security_group_rules.rb +5 -0
  88. data/lib/fog/rackspace/requests/networking_v2/list_security_groups.rb +5 -0
  89. data/lib/fog/rackspace/requests/networking_v2/show_security_group.rb +5 -0
  90. data/lib/fog/rackspace/requests/networking_v2/show_security_group_rule.rb +5 -0
  91. data/lib/fog/rackspace/requests/networking_v2/update_security_group.rb +12 -0
  92. data/lib/fog/rackspace/requests/storage/get_object_https_url.rb +1 -1
  93. data/lib/fog/version.rb +1 -1
  94. data/lib/fog/vsphere/requests/compute/cloudinit_to_customspec.rb +13 -4
  95. data/lib/fog/vsphere/requests/compute/vm_clone.rb +19 -6
  96. data/lib/fog/xenserver/requests/compute/create_vdi.rb +16 -6
  97. data/lib/tasks/changelog_task.rb +2 -1
  98. data/spec/fog/account_spec.rb +1 -2
  99. data/spec/fog/billing_spec.rb +1 -2
  100. data/spec/fog/bin/atmos_spec.rb +25 -2
  101. data/spec/fog/bin/aws_spec.rb +1 -2
  102. data/spec/fog/bin/baremetalcloud_spec.rb +25 -2
  103. data/spec/fog/bin/bluebox_spec.rb +47 -2
  104. data/spec/fog/bin/brightbox_spec.rb +1 -2
  105. data/spec/fog/bin/clodo_spec.rb +1 -2
  106. data/spec/fog/bin/cloudsigma_spec.rb +1 -2
  107. data/spec/fog/bin/cloudstack_spec.rb +1 -2
  108. data/spec/fog/bin/digitalocean_spec.rb +1 -2
  109. data/spec/fog/bin/dnsimple_spec.rb +1 -2
  110. data/spec/fog/bin/dnsmadeeasy_spec.rb +1 -2
  111. data/spec/fog/bin/dreamhost_spec.rb +1 -2
  112. data/spec/fog/bin/dynect_spec.rb +1 -2
  113. data/spec/fog/bin/powerdns_spec.rb +9 -0
  114. data/spec/fog/bin_spec.rb +4 -2
  115. data/spec/fog/cdn_spec.rb +1 -2
  116. data/spec/fog/compute_spec.rb +1 -2
  117. data/spec/fog/dns_spec.rb +1 -2
  118. data/spec/fog/identity_spec.rb +1 -2
  119. data/spec/fog/image_spec.rb +1 -2
  120. data/spec/fog/metering_spec.rb +1 -2
  121. data/spec/fog/monitoring_spec.rb +1 -2
  122. data/spec/fog/network_spec.rb +1 -2
  123. data/spec/fog/orchestration_spec.rb +1 -2
  124. data/spec/fog/storage_spec.rb +1 -2
  125. data/spec/fog/support_spec.rb +1 -2
  126. data/spec/fog/volume_spec.rb +1 -2
  127. data/spec/fog/vpn_spec.rb +1 -2
  128. data/spec/fog/xml/connection_spec.rb +1 -2
  129. data/spec/helpers/bin.rb +4 -0
  130. data/spec/spec_helper.rb +15 -0
  131. data/tests/compute/helper.rb +3 -0
  132. data/tests/glesys/requests/compute/helper.rb +66 -2
  133. data/tests/glesys/requests/compute/server_tests.rb +22 -6
  134. data/tests/glesys/requests/compute/ssh_key_tests.rb +47 -0
  135. data/tests/google/credentials_tests.rb +73 -0
  136. data/tests/helper.rb +5 -1
  137. data/tests/linode/requests/compute/linode_tests.rb +76 -3
  138. data/tests/openstack/authenticate_tests.rb +10 -0
  139. data/tests/openstack/models/planning/.gitkeep +0 -0
  140. data/tests/openstack/models/planning/plan_tests.rb +51 -0
  141. data/tests/openstack/models/planning/plans_tests.rb +18 -0
  142. data/tests/openstack/models/planning/role_tests.rb +14 -0
  143. data/tests/openstack/requests/planning/.gitkeep +0 -0
  144. data/tests/openstack/requests/planning/plan_tests.rb +65 -0
  145. data/tests/openstack/requests/planning/role_tests.rb +16 -0
  146. metadata +193 -75
  147. data/lib/fog/bin/atmos.rb +0 -29
  148. data/lib/fog/bin/local.rb +0 -29
  149. data/lib/fog/local.rb +0 -1
  150. data/lib/fog/local/core.rb +0 -9
  151. data/lib/fog/local/models/storage/directories.rb +0 -33
  152. data/lib/fog/local/models/storage/directory.rb +0 -53
  153. data/lib/fog/local/models/storage/file.rb +0 -132
  154. data/lib/fog/local/models/storage/files.rb +0 -84
  155. data/lib/fog/local/storage.rb +0 -96
  156. data/tests/local/models/directories_tests.rb +0 -17
  157. data/tests/local/models/directory_tests.rb +0 -16
  158. data/tests/local/models/file_tests.rb +0 -43
  159. data/tests/local/storage_tests.rb +0 -40
@@ -1,29 +0,0 @@
1
- class Atmos < Fog::Bin
2
- class << self
3
- def class_for(key)
4
- case key
5
- when :storage
6
- Fog::Storage::Atmos
7
- else
8
- raise ArgumentError, "Unsupported #{self} service: #{key}"
9
- end
10
- end
11
-
12
- def [](service)
13
- @@connections ||= Hash.new do |hash, key|
14
- hash[key] = case key
15
- when :storage
16
- Fog::Logger.warning("Atmos[:storage] is not recommended, use Storage[:atmos] for portability")
17
- Fog::Storage.new(:provider => 'Atmos')
18
- else
19
- raise ArgumentError, "Unrecognized service: #{service}"
20
- end
21
- end
22
- @@connections[service]
23
- end
24
-
25
- def services
26
- Fog::Atmos.services
27
- end
28
- end
29
- end
@@ -1,29 +0,0 @@
1
- class Local < Fog::Bin
2
- class << self
3
- def class_for(key)
4
- case key
5
- when :storage
6
- Fog::Storage::Local
7
- else
8
- raise ArgumentError, "Unsupported #{self} service: #{key}"
9
- end
10
- end
11
-
12
- def [](service)
13
- @@connections ||= Hash.new do |hash, key|
14
- hash[key] = case key
15
- when :storage
16
- Fog::Logger.warning("Local[:storage] is not recommended, use Storage[:local] for portability")
17
- Fog::Storage.new(:provider => 'Local')
18
- else
19
- raise ArgumentError, "Unrecognized service: #{key.inspect}"
20
- end
21
- end
22
- @@connections[service]
23
- end
24
-
25
- def services
26
- Fog::Local.services
27
- end
28
- end
29
- end
@@ -1 +0,0 @@
1
- require 'fog/local/storage'
@@ -1,9 +0,0 @@
1
- require 'fog/core'
2
-
3
- module Fog
4
- module Local
5
- extend Fog::Provider
6
-
7
- service(:storage, 'Storage')
8
- end
9
- end
@@ -1,33 +0,0 @@
1
- require 'fog/core/collection'
2
- require 'fog/local/models/storage/directory'
3
-
4
- module Fog
5
- module Storage
6
- class Local
7
- class Directories < Fog::Collection
8
- model Fog::Storage::Local::Directory
9
-
10
- def all
11
- data = if ::File.directory?(service.local_root)
12
- Dir.entries(service.local_root).select do |entry|
13
- entry[0...1] != '.' && ::File.directory?(service.path_to(entry))
14
- end.map do |entry|
15
- {:key => entry}
16
- end
17
- else
18
- []
19
- end
20
- load(data)
21
- end
22
-
23
- def get(key, options = {})
24
- if ::File.directory?(service.path_to(key))
25
- new(:key => key)
26
- else
27
- nil
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,53 +0,0 @@
1
- require 'fog/core/model'
2
- require 'fog/local/models/storage/files'
3
-
4
- module Fog
5
- module Storage
6
- class Local
7
- class Directory < Fog::Model
8
- identity :key
9
-
10
- def destroy
11
- requires :key
12
-
13
- if ::File.directory?(path)
14
- Dir.rmdir(path)
15
- true
16
- else
17
- false
18
- end
19
- end
20
-
21
- def files
22
- @files ||= begin
23
- Fog::Storage::Local::Files.new(
24
- :directory => self,
25
- :service => service
26
- )
27
- end
28
- end
29
-
30
- def public=(new_public)
31
- new_public
32
- end
33
-
34
- def public_url
35
- nil
36
- end
37
-
38
- def save
39
- requires :key
40
-
41
- FileUtils.mkpath(path)
42
- true
43
- end
44
-
45
- private
46
-
47
- def path
48
- service.path_to(key)
49
- end
50
- end
51
- end
52
- end
53
- end
@@ -1,132 +0,0 @@
1
- require 'fileutils'
2
- require 'fog/core/model'
3
-
4
- module Fog
5
- module Storage
6
- class Local
7
- class File < Fog::Model
8
- identity :key, :aliases => 'Key'
9
-
10
- attribute :content_length, :aliases => 'Content-Length', :type => :integer
11
- # attribute :content_type, :aliases => 'Content-Type'
12
- attribute :last_modified, :aliases => 'Last-Modified'
13
-
14
- require 'uri'
15
-
16
- def body
17
- attributes[:body] ||= if last_modified
18
- collection.get(identity).body
19
- else
20
- ''
21
- end
22
- end
23
-
24
- def body=(new_body)
25
- attributes[:body] = new_body
26
- end
27
-
28
- def content_type
29
- @content_type ||= begin
30
- unless (mime_types = ::MIME::Types.of(key)).empty?
31
- mime_types.first.content_type
32
- end
33
- end
34
- end
35
-
36
- def directory
37
- @directory
38
- end
39
-
40
- def copy(target_directory_key, target_file_key, options={})
41
- requires :directory, :key
42
- service.copy_object(directory.key, key, target_directory_key, target_file_key)
43
- target_directory = service.directories.new(:key => target_directory_key)
44
- target_directory.files.get(target_file_key)
45
- end
46
-
47
- def destroy
48
- requires :directory, :key
49
- ::File.delete(path) if ::File.exist?(path)
50
- dirs = path.split(::File::SEPARATOR)[0...-1]
51
- dirs.length.times do |index|
52
- dir_path = dirs[0..-index].join(::File::SEPARATOR)
53
- if dir_path.empty? # path starts with ::File::SEPARATOR
54
- next
55
- end
56
- # don't delete the containing directory or higher
57
- if dir_path == service.path_to(directory.key)
58
- break
59
- end
60
- pwd = Dir.pwd
61
- if ::File.exist?(dir_path) && ::File.directory?(dir_path)
62
- Dir.chdir(dir_path)
63
- if Dir.glob('*').empty?
64
- Dir.rmdir(dir_path)
65
- end
66
- Dir.chdir(pwd)
67
- end
68
- end
69
- true
70
- end
71
-
72
- def public=(new_public)
73
- new_public
74
- end
75
-
76
- def public_url
77
- requires :directory, :key
78
-
79
- if service.endpoint
80
- escaped_directory = URI.escape(directory.key)
81
- escaped_key = URI.escape(key)
82
-
83
- ::File.join(service.endpoint, escaped_directory, escaped_key)
84
- else
85
- nil
86
- end
87
- end
88
-
89
- def save(options = {})
90
- requires :body, :directory, :key
91
- dirs = path.split(::File::SEPARATOR)[0...-1]
92
- dirs.length.times do |index|
93
- dir_path = dirs[0..index].join(::File::SEPARATOR)
94
- if dir_path.empty? # path starts with ::File::SEPARATOR
95
- next
96
- end
97
- # create directory if it doesn't already exist
98
- begin
99
- Dir.mkdir(dir_path)
100
- rescue Errno::EEXIST
101
- raise unless ::File.directory?(dir_path)
102
- end
103
- end
104
- file = ::File.new(path, 'wb')
105
- if body.is_a?(String)
106
- file.write(body)
107
- elsif body.kind_of? ::File and ::File.exist?(body.path)
108
- FileUtils.cp(body.path, path)
109
- else
110
- file.write(body.read)
111
- end
112
- file.close
113
- merge_attributes(
114
- :content_length => Fog::Storage.get_body_size(body),
115
- :last_modified => ::File.mtime(path)
116
- )
117
- true
118
- end
119
-
120
- private
121
-
122
- def directory=(new_directory)
123
- @directory = new_directory
124
- end
125
-
126
- def path
127
- service.path_to(::File.join(directory.key, key))
128
- end
129
- end
130
- end
131
- end
132
- end
@@ -1,84 +0,0 @@
1
- require 'fog/core/collection'
2
- require 'fog/local/models/storage/file'
3
-
4
- module Fog
5
- module Storage
6
- class Local
7
- class Files < Fog::Collection
8
- attribute :directory
9
-
10
- model Fog::Storage::Local::File
11
-
12
- def all
13
- requires :directory
14
- if directory.collection.get(directory.key)
15
- data = []
16
- Dir.chdir(service.path_to(directory.key)) {
17
- data = Dir.glob('**/*').reject do |file|
18
- ::File.directory?(file)
19
- end.map do |key|
20
- path = file_path(key)
21
- {
22
- :content_length => ::File.size(path),
23
- :key => key,
24
- :last_modified => ::File.mtime(path)
25
- }
26
- end
27
- }
28
- load(data)
29
- else
30
- nil
31
- end
32
- end
33
-
34
- def get(key, &block)
35
- requires :directory
36
- path = file_path(key)
37
- if ::File.exist?(path)
38
- data = {
39
- :content_length => ::File.size(path),
40
- :key => key,
41
- :last_modified => ::File.mtime(path)
42
- }
43
- if block_given?
44
- file = ::File.open(path)
45
- while (chunk = file.read(Excon::CHUNK_SIZE)) && yield(chunk); end
46
- file.close
47
- new(data)
48
- else
49
- body = ::File.read(path)
50
- new(data.merge!(:body => body))
51
- end
52
- else
53
- nil
54
- end
55
- end
56
-
57
- def head(key)
58
- requires :directory
59
- path = file_path(key)
60
- if ::File.exist?(path)
61
- new({
62
- :content_length => ::File.size(path),
63
- :key => key,
64
- :last_modified => ::File.mtime(path)
65
- })
66
- else
67
- nil
68
- end
69
- end
70
-
71
- def new(attributes = {})
72
- requires :directory
73
- super({ :directory => directory }.merge!(attributes))
74
- end
75
-
76
- private
77
-
78
- def file_path(key)
79
- service.path_to(::File.join(directory.key, key))
80
- end
81
- end
82
- end
83
- end
84
- end
@@ -1,96 +0,0 @@
1
- require 'fog/local/core'
2
-
3
- module Fog
4
- module Storage
5
- class Local < Fog::Service
6
- requires :local_root
7
- recognizes :endpoint, :scheme, :host, :port, :path
8
-
9
- model_path 'fog/local/models/storage'
10
- collection :directories
11
- model :directory
12
- model :file
13
- collection :files
14
-
15
- require 'uri'
16
-
17
- class Mock
18
- attr_reader :endpoint
19
-
20
- def self.data
21
- @data ||= Hash.new do |hash, key|
22
- hash[key] = {}
23
- end
24
- end
25
-
26
- def self.reset
27
- @data = nil
28
- end
29
-
30
- def initialize(options={})
31
- Fog::Mock.not_implemented
32
-
33
- @local_root = ::File.expand_path(options[:local_root])
34
-
35
- @endpoint = options[:endpoint] || build_endpoint_from_options(options)
36
- end
37
-
38
- def data
39
- self.class.data[@local_root]
40
- end
41
-
42
- def local_root
43
- @local_root
44
- end
45
-
46
- def path_to(partial)
47
- ::File.join(@local_root, partial)
48
- end
49
-
50
- def reset_data
51
- self.class.data.delete(@local_root)
52
- end
53
-
54
- private
55
- def build_endpoint_from_options(options)
56
- return unless options[:host]
57
-
58
- URI::Generic.build(options).to_s
59
- end
60
- end
61
-
62
- class Real
63
- attr_reader :endpoint
64
-
65
- def initialize(options={})
66
- @local_root = ::File.expand_path(options[:local_root])
67
-
68
- @endpoint = options[:endpoint] || build_endpoint_from_options(options)
69
- end
70
-
71
- def local_root
72
- @local_root
73
- end
74
-
75
- def path_to(partial)
76
- ::File.join(@local_root, partial)
77
- end
78
-
79
- def copy_object(source_directory_name, source_object_name, target_directory_name, target_object_name, options={})
80
- require 'fileutils'
81
- source_path = path_to(::File.join(source_directory_name, source_object_name))
82
- target_path = path_to(::File.join(target_directory_name, target_object_name))
83
- ::FileUtils.mkdir_p(::File.dirname(target_path))
84
- ::FileUtils.copy_file(source_path, target_path)
85
- end
86
-
87
- private
88
- def build_endpoint_from_options(options)
89
- return unless options[:host]
90
-
91
- URI::Generic.build(options).to_s
92
- end
93
- end
94
- end
95
- end
96
- end