fog 0.3.22 → 0.3.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/Gemfile.lock +1 -1
  2. data/fog.gemspec +2 -2
  3. data/lib/fog.rb +1 -1
  4. data/lib/fog/aws/models/compute/address.rb +6 -5
  5. data/lib/fog/aws/models/compute/addresses.rb +3 -3
  6. data/lib/fog/aws/models/compute/image.rb +7 -11
  7. data/lib/fog/aws/models/compute/images.rb +3 -3
  8. data/lib/fog/aws/models/compute/key_pair.rb +1 -1
  9. data/lib/fog/aws/models/compute/key_pairs.rb +4 -3
  10. data/lib/fog/aws/models/compute/security_group.rb +6 -6
  11. data/lib/fog/aws/models/compute/security_groups.rb +3 -3
  12. data/lib/fog/aws/models/compute/server.rb +15 -44
  13. data/lib/fog/aws/models/compute/servers.rb +3 -5
  14. data/lib/fog/aws/models/compute/snapshot.rb +4 -4
  15. data/lib/fog/aws/models/compute/snapshots.rb +3 -3
  16. data/lib/fog/aws/models/compute/tags.rb +4 -4
  17. data/lib/fog/aws/models/compute/volume.rb +7 -7
  18. data/lib/fog/aws/models/compute/volumes.rb +4 -4
  19. data/lib/fog/aws/models/storage/directories.rb +1 -1
  20. data/lib/fog/aws/models/storage/file.rb +9 -5
  21. data/lib/fog/aws/models/storage/files.rb +10 -9
  22. data/lib/fog/aws/parsers/storage/get_bucket.rb +19 -3
  23. data/lib/fog/aws/requests/storage/get_bucket.rb +1 -0
  24. data/lib/fog/bluebox/models/compute/server.rb +7 -13
  25. data/lib/fog/brightbox/models/compute/image.rb +4 -4
  26. data/lib/fog/brightbox/models/compute/server.rb +7 -7
  27. data/lib/fog/brightbox/models/compute/user.rb +3 -3
  28. data/lib/fog/core/attributes.rb +18 -26
  29. data/lib/fog/go_grid/models/compute/image.rb +2 -2
  30. data/lib/fog/go_grid/models/compute/server.rb +2 -2
  31. data/lib/fog/google/models/storage/directories.rb +1 -1
  32. data/lib/fog/google/models/storage/file.rb +9 -6
  33. data/lib/fog/google/models/storage/files.rb +10 -9
  34. data/lib/fog/google/parsers/storage/get_bucket.rb +19 -3
  35. data/lib/fog/google/requests/storage/get_bucket.rb +1 -0
  36. data/lib/fog/local/models/storage/file.rb +5 -2
  37. data/lib/fog/rackspace/models/compute/image.rb +3 -3
  38. data/lib/fog/rackspace/models/compute/server.rb +10 -10
  39. data/lib/fog/rackspace/models/storage/file.rb +8 -5
  40. data/lib/fog/rackspace/models/storage/files.rb +4 -4
  41. data/lib/fog/slicehost/models/compute/server.rb +7 -7
  42. data/lib/fog/terremark/models/shared/address.rb +2 -2
  43. data/lib/fog/terremark/models/shared/network.rb +2 -2
  44. data/lib/fog/terremark/models/shared/server.rb +13 -13
  45. data/lib/fog/terremark/models/shared/task.rb +3 -3
  46. data/lib/fog/terremark/models/shared/vdc.rb +4 -4
  47. metadata +3 -3
@@ -13,16 +13,16 @@ module Fog
13
13
  model Fog::AWS::Compute::Snapshot
14
14
 
15
15
  def initialize(attributes)
16
- @filters ||= { 'RestorableBy' => 'self' }
16
+ self.filters ||= { 'RestorableBy' => 'self' }
17
17
  super
18
18
  end
19
19
 
20
- def all(filters = @filters, options = {})
20
+ def all(filters = filters, options = {})
21
21
  unless filters.is_a?(Hash)
22
22
  Formatador.display_line("[yellow][WARN] all with #{filters.class} param is deprecated, use all('snapshot-id' => []) instead[/] [light_black](#{caller.first})[/]")
23
23
  filters = {'snapshot-id' => [*filters]}
24
24
  end
25
- @filters = filters
25
+ self.filters = filters
26
26
  data = connection.describe_snapshots(filters.merge!(options)).body
27
27
  load(data['snapshotSet'])
28
28
  if volume
@@ -12,13 +12,13 @@ module Fog
12
12
  model Fog::AWS::Compute::Tag
13
13
 
14
14
  def initialize(attributes)
15
- @filters ||= {}
15
+ self.filters ||= {}
16
16
  super
17
17
  end
18
18
 
19
- def all(filters = @filters)
20
- @filters = filters
21
- data = connection.describe_tags(@filters).body
19
+ def all(filters = filters)
20
+ self.filters = filters
21
+ data = connection.describe_tags(filters).body
22
22
  load(data['tagSet'])
23
23
  end
24
24
 
@@ -30,7 +30,7 @@ module Fog
30
30
  def destroy
31
31
  requires :id
32
32
 
33
- connection.delete_volume(@id)
33
+ connection.delete_volume(id)
34
34
  true
35
35
  end
36
36
 
@@ -42,7 +42,7 @@ module Fog
42
42
  raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if identity
43
43
  requires :availability_zone, :size
44
44
 
45
- data = connection.create_volume(@availability_zone, @size, @snapshot_id).body
45
+ data = connection.create_volume(availability_zone, size, snapshot_id).body
46
46
  new_attributes = data.reject {|key,value| key == 'requestId'}
47
47
  merge_attributes(new_attributes)
48
48
  if @server
@@ -73,19 +73,19 @@ module Fog
73
73
  def attach(new_server)
74
74
  if new_record?
75
75
  @server = new_server
76
- @availability_zone = new_server.availability_zone
76
+ self.availability_zone = new_server.availability_zone
77
77
  elsif new_server
78
78
  requires :device
79
79
  @server = nil
80
- @server_id = new_server.id
81
- connection.attach_volume(@server_id, @id, @device)
80
+ self.server_id = new_server.id
81
+ connection.attach_volume(server_id, id, device)
82
82
  reload
83
83
  end
84
84
  end
85
85
 
86
86
  def detach
87
87
  @server = nil
88
- @server_id = nil
88
+ self.server_id = nil
89
89
  unless new_record?
90
90
  connection.detach_volume(@id)
91
91
  reload
@@ -94,7 +94,7 @@ module Fog
94
94
 
95
95
  def force_detach
96
96
  @server = nil
97
- @server_id = nil
97
+ self.server_id = nil
98
98
  unless new_record?
99
99
  connection.detach_volume(@id, 'Force' => true)
100
100
  reload
@@ -13,17 +13,17 @@ module Fog
13
13
  model Fog::AWS::Compute::Volume
14
14
 
15
15
  def initialize(attributes)
16
- @filters ||= {}
16
+ self.filters ||= {}
17
17
  super
18
18
  end
19
19
 
20
- def all(filters = @filters)
20
+ def all(filters = filters)
21
21
  unless filters.is_a?(Hash)
22
22
  Formatador.display_line("[yellow][WARN] all with #{filters.class} param is deprecated, use all('volume-id' => []) instead[/] [light_black](#{caller.first})[/]")
23
23
  filters = {'volume-id' => [*filters]}
24
24
  end
25
- @filters = filters
26
- data = connection.describe_volumes(@filters).body
25
+ self.filters = filters
26
+ data = connection.describe_volumes(filters).body
27
27
  load(data['volumeSet'])
28
28
  if server
29
29
  self.replace(self.select {|volume| volume.server_id == server.id})
@@ -25,7 +25,7 @@ module Fog
25
25
  directory = new(:key => data['Name'])
26
26
  options = {}
27
27
  for k, v in data
28
- if ['Delimiter', 'IsTruncated', 'Marker', 'MaxKeys', 'Prefix'].include?(k)
28
+ if ['CommonPrefixes', 'Delimiter', 'IsTruncated', 'Marker', 'MaxKeys', 'Prefix'].include?(k)
29
29
  options[k] = v
30
30
  end
31
31
  end
@@ -33,34 +33,38 @@ module Fog
33
33
  end
34
34
 
35
35
  def body
36
- @body ||= if last_modified && (file = collection.get(identity))
36
+ attributes[:body] ||= if last_modified && (file = collection.get(identity))
37
37
  file.body
38
38
  else
39
39
  ''
40
40
  end
41
41
  end
42
42
 
43
+ def body=(new_body)
44
+ attributes[:body] = new_body
45
+ end
46
+
43
47
  def directory
44
48
  @directory
45
49
  end
46
50
 
47
51
  def copy(target_directory_key, target_file_key)
48
52
  requires :directory, :key
49
- connection.copy_object(directory.key, @key, target_directory_key, target_file_key)
53
+ connection.copy_object(directory.key, key, target_directory_key, target_file_key)
50
54
  target_directory = connection.directories.new(:key => target_directory_key)
51
55
  target_directory.files.get(target_file_key)
52
56
  end
53
57
 
54
58
  def destroy
55
59
  requires :directory, :key
56
- connection.delete_object(directory.key, @key)
60
+ connection.delete_object(directory.key, key)
57
61
  true
58
62
  end
59
63
 
60
64
  remove_method :owner=
61
65
  def owner=(new_owner)
62
66
  if new_owner
63
- @owner = {
67
+ attributes[:owner] = {
64
68
  :display_name => new_owner['DisplayName'],
65
69
  :id => new_owner['ID']
66
70
  }
@@ -103,7 +107,7 @@ module Fog
103
107
  options['Expires'] = expires if expires
104
108
  options['x-amz-storage-class'] = storage_class if storage_class
105
109
 
106
- data = connection.put_object(directory.key, @key, @body, options)
110
+ data = connection.put_object(directory.key, key, body, options)
107
111
  merge_attributes(data.headers)
108
112
  if body.is_a?(String)
109
113
  self.content_length = body.size
@@ -7,22 +7,23 @@ module Fog
7
7
 
8
8
  class Files < Fog::Collection
9
9
 
10
- attribute :delimiter, :aliases => 'Delimiter'
10
+ attribute :common_prefixes, :aliases => 'CommonPrefixes'
11
+ attribute :delimiter, :aliases => 'Delimiter'
11
12
  attribute :directory
12
- attribute :is_truncated, :aliases => 'IsTruncated'
13
- attribute :marker, :aliases => 'Marker'
14
- attribute :max_keys, :aliases => ['MaxKeys', 'max-keys']
15
- attribute :prefix, :aliases => 'Prefix'
13
+ attribute :is_truncated, :aliases => 'IsTruncated'
14
+ attribute :marker, :aliases => 'Marker'
15
+ attribute :max_keys, :aliases => ['MaxKeys', 'max-keys']
16
+ attribute :prefix, :aliases => 'Prefix'
16
17
 
17
18
  model Fog::AWS::Storage::File
18
19
 
19
20
  def all(options = {})
20
21
  requires :directory
21
22
  options = {
22
- 'delimiter' => @delimiter,
23
- 'marker' => @marker,
24
- 'max-keys' => @max_keys,
25
- 'prefix' => @prefix
23
+ 'delimiter' => delimiter,
24
+ 'marker' => marker,
25
+ 'max-keys' => max_keys,
26
+ 'prefix' => prefix
26
27
  }.merge!(options)
27
28
  options = options.reject {|key,value| value.nil? || value.to_s.empty?}
28
29
  merge_attributes(options)
@@ -7,11 +7,21 @@ module Fog
7
7
 
8
8
  def reset
9
9
  @object = { 'Owner' => {} }
10
- @response = { 'Contents' => [] }
10
+ @response = { 'Contents' => [], 'CommonPrefixes' => [] }
11
+ end
12
+
13
+ def start_element(name, attrs = [])
14
+ super
15
+ case name
16
+ when 'CommonPrefixes'
17
+ @in_common_prefixes = true
18
+ end
11
19
  end
12
20
 
13
21
  def end_element(name)
14
22
  case name
23
+ when 'CommonPrefixes'
24
+ @in_common_prefixes = false
15
25
  when 'Contents'
16
26
  @response['Contents'] << @object
17
27
  @object = { 'Owner' => {} }
@@ -27,13 +37,19 @@ module Fog
27
37
  end
28
38
  when 'LastModified'
29
39
  @object['LastModified'] = Time.parse(@value)
30
- when 'Marker', 'Name', 'Prefix'
40
+ when 'Marker', 'Name'
31
41
  @response[name] = @value
32
42
  when 'MaxKeys'
33
43
  @response['MaxKeys'] = @value.to_i
44
+ when 'Prefix'
45
+ if @in_common_prefixes
46
+ @response['CommonPrefixes'] << @value
47
+ else
48
+ @response[name] = @value
49
+ end
34
50
  when 'Size'
35
51
  @object['Size'] = @value.to_i
36
- when 'Delimeter', 'Key', 'StorageClass'
52
+ when 'Delimiter', 'Key', 'StorageClass'
37
53
  @object[name] = @value
38
54
  end
39
55
  end
@@ -26,6 +26,7 @@ module Fog
26
26
  # * 'MaxKeys'<~Integer> - Maximum number of keys specified for query
27
27
  # * 'Name'<~String> - Name of the bucket
28
28
  # * 'Prefix'<~String> - Prefix specified for query
29
+ # * 'CommonPrefixes'<~Array> - Array of strings for common prefixes
29
30
  # * 'Contents'<~Array>:
30
31
  # * 'ETag'<~String>: Etag of object
31
32
  # * 'Key'<~String>: Name of object
@@ -17,7 +17,7 @@ module Fog
17
17
 
18
18
  attribute :cpu
19
19
  attribute :description
20
- attribute :flavor_id
20
+ attribute :flavor_id, :aliases => :product, :squash => 'id'
21
21
  attribute :hostname
22
22
  attribute :image_id
23
23
  attribute :ips
@@ -30,24 +30,24 @@ module Fog
30
30
  attr_writer :private_key, :private_key_path, :public_key, :public_key_path, :username
31
31
 
32
32
  def initialize(attributes={})
33
- @flavor_id ||= '94fd37a7-2606-47f7-84d5-9000deda52ae'
33
+ self.flavor_id ||= '94fd37a7-2606-47f7-84d5-9000deda52ae'
34
34
  super
35
35
  end
36
36
 
37
37
  def destroy
38
38
  requires :id
39
- connection.destroy_block(@id)
39
+ connection.destroy_block(id)
40
40
  true
41
41
  end
42
42
 
43
43
  def flavor
44
44
  requires :flavor_id
45
- connection.flavors.get(@flavor_id)
45
+ connection.flavors.get(flavor_id)
46
46
  end
47
47
 
48
48
  def image
49
49
  requires :image_id
50
- connection.images.get(@image_id)
50
+ connection.images.get(image_id)
51
51
  end
52
52
 
53
53
  def private_key_path
@@ -69,12 +69,12 @@ module Fog
69
69
  end
70
70
 
71
71
  def ready?
72
- @status == 'running'
72
+ status == 'running'
73
73
  end
74
74
 
75
75
  def reboot(type = 'SOFT')
76
76
  requires :id
77
- connection.reboot_block(@id, type)
77
+ connection.reboot_block(id, type)
78
78
  true
79
79
  end
80
80
 
@@ -116,12 +116,6 @@ module Fog
116
116
  @username ||= 'deploy'
117
117
  end
118
118
 
119
- private
120
-
121
- def product=(new_product)
122
- @flavor_id = new_product['id']
123
- end
124
-
125
119
  end
126
120
 
127
121
  end
@@ -29,10 +29,10 @@ module Fog
29
29
  def save
30
30
  requires :source, :arch
31
31
  options = {
32
- :source => @source,
33
- :arch => @arch,
34
- :name => @name,
35
- :description => @description
32
+ :source => source,
33
+ :arch => arch,
34
+ :name => name,
35
+ :description => description
36
36
  }.delete_if {|k,v| v.nil? || v == "" }
37
37
  data = connection.create_image(options)
38
38
  merge_attributes(data)
@@ -63,12 +63,12 @@ module Fog
63
63
 
64
64
  def flavor
65
65
  requires :flavor_id
66
- connection.flavors.get(@flavor_id)
66
+ connection.flavors.get(flavor_id)
67
67
  end
68
68
 
69
69
  def image
70
70
  requires :image_id
71
- connection.images.get(@image_id)
71
+ connection.images.get(image_id)
72
72
  end
73
73
 
74
74
  def ready?
@@ -78,11 +78,11 @@ module Fog
78
78
  def save
79
79
  requires :image_id
80
80
  options = {
81
- :image => @image_id,
82
- :server_type => @flavor_id,
83
- :name => @name,
84
- :zone => @zone_id,
85
- :user_data => @user_data
81
+ :image => image_id,
82
+ :server_type => flavor_id,
83
+ :name => name,
84
+ :zone => zone_id,
85
+ :user_data => user_data
86
86
  }.delete_if {|k,v| v.nil? || v == "" }
87
87
  data = connection.create_server(options)
88
88
  merge_attributes(data)
@@ -22,9 +22,9 @@ module Fog
22
22
  requires :identity
23
23
 
24
24
  options = {
25
- :email_address => @email_address,
26
- :ssh_key => @ssh_key,
27
- :name => @name
25
+ :email_address => email_address,
26
+ :ssh_key => ssh_key,
27
+ :name => name
28
28
  }
29
29
 
30
30
  data = connection.update_user(identity, options)
@@ -16,13 +16,15 @@ module Fog
16
16
 
17
17
  def attribute(name, options = {})
18
18
  class_eval <<-EOS, __FILE__, __LINE__
19
- attr_reader :#{name}
19
+ def #{name}
20
+ attributes[:#{name}]
21
+ end
20
22
  EOS
21
23
  case options[:type]
22
24
  when :boolean
23
25
  class_eval <<-EOS, __FILE__, __LINE__
24
26
  def #{name}=(new_#{name})
25
- @#{name} = case new_#{name}
27
+ attributes[:#{name}] = case new_#{name}
26
28
  when 'true'
27
29
  true
28
30
  when 'false'
@@ -33,39 +35,35 @@ module Fog
33
35
  when :float
34
36
  class_eval <<-EOS, __FILE__, __LINE__
35
37
  def #{name}=(new_#{name})
36
- @#{name} = new_#{name}.to_f
38
+ attributes[:#{name}] = new_#{name}.to_f
37
39
  end
38
40
  EOS
39
41
  when :integer
40
42
  class_eval <<-EOS, __FILE__, __LINE__
41
43
  def #{name}=(new_#{name})
42
- @#{name} = new_#{name}.to_i
44
+ attributes[:#{name}] = new_#{name}.to_i
43
45
  end
44
46
  EOS
45
47
  when :string
46
48
  class_eval <<-EOS, __FILE__, __LINE__
47
49
  def #{name}=(new_#{name})
48
- @#{name} = new_#{name}.to_s
50
+ attributes[:#{name}] = new_#{name}.to_s
49
51
  end
50
52
  EOS
51
53
  when :time
52
54
  class_eval <<-EOS, __FILE__, __LINE__
53
55
  def #{name}=(new_#{name})
54
- if new_#{name}.nil? || new_#{name} == "" || new_#{name}.is_a?(Time)
55
- @#{name} = new_#{name}
56
+ attributes[:#{name}] = if new_#{name}.nil? || new_#{name} == "" || new_#{name}.is_a?(Time)
57
+ new_#{name}
56
58
  else
57
- @#{name} = Time.parse(new_#{name})
59
+ Time.parse(new_#{name})
58
60
  end
59
61
  end
60
62
  EOS
61
63
  when :array
62
64
  class_eval <<-EOS, __FILE__, __LINE__
63
65
  def #{name}=(new_#{name})
64
- @#{name} = if new_#{name}.is_a?(Array)
65
- new_#{name}
66
- else
67
- @#{name} = [ new_#{name} ]
68
- end
66
+ attributes[:#{name}] = [*new_#{name}]
69
67
  end
70
68
  EOS
71
69
  else
@@ -74,18 +72,20 @@ module Fog
74
72
  def #{name}=(new_data)
75
73
  if new_data.is_a?(Hash)
76
74
  if new_data[:#{squash}] || new_data["#{squash}"]
77
- @#{name} = new_data[:#{squash}] || new_data["#{squash}"]
75
+ attributes[:#{name}] = new_data[:#{squash}] || new_data["#{squash}"]
78
76
  else
79
- @#{name} = [ new_data ]
77
+ attributes[:#{name}] = [ new_data ]
80
78
  end
81
79
  else
82
- @#{name} = new_data
80
+ attributes[:#{name}] = new_data
83
81
  end
84
82
  end
85
83
  EOS
86
84
  else
87
85
  class_eval <<-EOS, __FILE__, __LINE__
88
- attr_writer :#{name}
86
+ def #{name}=(new_#{name})
87
+ attributes[:#{name}] = new_#{name}
88
+ end
89
89
  EOS
90
90
  end
91
91
  end
@@ -118,13 +118,7 @@ module Fog
118
118
  end
119
119
 
120
120
  def attributes
121
- @attributes ||= begin
122
- attributes = {}
123
- for attribute in self.class.attributes
124
- attributes[attribute] = send("#{attribute}")
125
- end
126
- attributes
127
- end
121
+ @attributes ||= {}
128
122
  end
129
123
 
130
124
  def identity
@@ -139,10 +133,8 @@ module Fog
139
133
  for key, value in new_attributes
140
134
  unless self.class.ignored_attributes.include?(key)
141
135
  if aliased_key = self.class.aliases[key]
142
- attributes[aliased_key] = value
143
136
  send("#{aliased_key}=", value)
144
137
  elsif (public_methods | private_methods).detect {|method| ["#{key}=", :"#{key}="].include?(method)}
145
- attributes[key.to_sym] = value
146
138
  send("#{key}=", value)
147
139
  else
148
140
  attributes[key] = value