mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
76 lines
2.1 KiB
Ruby
76 lines
2.1 KiB
Ruby
|
require 'fog/core/collection'
|
||
|
require 'fog/rackspace/models/compute_v2/meta_parent'
|
||
|
require 'fog/rackspace/models/compute_v2/metadatum'
|
||
|
require 'fog/rackspace/models/compute_v2/image'
|
||
|
require 'fog/rackspace/models/compute_v2/server'
|
||
|
|
||
|
module Fog
|
||
|
module Compute
|
||
|
class RackspaceV2
|
||
|
|
||
|
class Metadata < Fog::Collection
|
||
|
|
||
|
model Fog::Compute::RackspaceV2::Metadatum
|
||
|
|
||
|
include Fog::Compute::RackspaceV2::MetaParent
|
||
|
|
||
|
def all
|
||
|
requires :parent
|
||
|
data = connection.list_metadata(collection_name, parent.id).body['metadata']
|
||
|
from_hash(data)
|
||
|
end
|
||
|
|
||
|
def get(key)
|
||
|
requires :parent
|
||
|
data = connection.get_metadata_item(collection_name, parent.id, key).body["meta"]
|
||
|
datum = data.first
|
||
|
new(:key => datum[0], :value => datum[1])
|
||
|
rescue Fog::Compute::RackspaceV2::NotFound
|
||
|
nil
|
||
|
end
|
||
|
|
||
|
def [](key)
|
||
|
return nil unless key
|
||
|
datum = self.find {|datum| datum.key == key || datum.key == key.to_sym }
|
||
|
datum ? datum.value : nil
|
||
|
end
|
||
|
|
||
|
def []=(key, value)
|
||
|
return nil unless key
|
||
|
datum = self.find {|datum| datum.key == key || datum.key == key.to_sym }
|
||
|
if datum
|
||
|
data.value = value
|
||
|
else
|
||
|
self << Fog::Compute::RackspaceV2::Metadatum.new(:key => key, :value => value, :connection => connection, :parent => parent)
|
||
|
end
|
||
|
value
|
||
|
end
|
||
|
|
||
|
def save
|
||
|
requires :parent
|
||
|
connection.set_metadata(collection_name, parent.id, to_hash)
|
||
|
end
|
||
|
|
||
|
def new(attributes = {})
|
||
|
requires :parent
|
||
|
super({ :parent => parent }.merge!(attributes))
|
||
|
end
|
||
|
|
||
|
def from_hash(hash)
|
||
|
return unless hash
|
||
|
metas = []
|
||
|
hash.each_pair {|k,v| metas << {:key => k, :value => v} }
|
||
|
load(metas)
|
||
|
end
|
||
|
|
||
|
def to_hash
|
||
|
h = {}
|
||
|
self.each { |datum| h[datum.key] = datum.value }
|
||
|
h
|
||
|
end
|
||
|
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|