1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
require 'fog/openstack/models/collection'
require 'fog/openstack/models/meta_parent'
require 'fog/openstack/compute/models/metadatum'
require 'fog/openstack/compute/models/image'
require 'fog/openstack/compute/models/server'
module Fog
module OpenStack
class Compute
class Metadata < Fog::OpenStack::Collection
model Fog::OpenStack::Compute::Metadatum
include Fog::OpenStack::Compute::MetaParent
def all
requires :parent
metadata = service.list_metadata(collection_name, @parent.id).body['metadata']
metas = []
metadata.each_pair { |k, v| metas << {"key" => k, "value" => v} } unless metadata.nil?
# TODO: convert to load_response?
load(metas)
end
def get(key)
requires :parent
data = service.get_metadata(collection_name, @parent.id, key).body["meta"]
metas = []
data.each_pair { |k, v| metas << {"key" => k, "value" => v} }
new(metas[0])
rescue Fog::OpenStack::Compute::NotFound
nil
end
def update(data = nil)
requires :parent
service.update_metadata(collection_name, @parent.id, to_hash(data))
end
def set(data = nil)
requires :parent
service.set_metadata(collection_name, @parent.id, to_hash(data))
end
def new(attributes = {})
requires :parent
super({:parent => @parent}.merge!(attributes))
end
def to_hash(data = nil)
if data.nil?
data = {}
each do |meta|
if meta.kind_of?(Fog::OpenStack::Compute::Metadatum)
data.store(meta.key, meta.value)
else
data.store(meta["key"], meta["value"])
end
end
end
data
end
end
end
end
end
|