lib/fog/openstack/baremetal/models/node.rb
require 'fog/openstack/models/model'
module Fog
module OpenStack
class Baremetal
class Node < Fog::OpenStack::Model
identity :uuid
attribute :instance_uuid
attribute :maintenance
attribute :power_state
attribute :provision_state
attribute :uuid
# detailed
attribute :created_at
attribute :updated_at
attribute :chassis_uuid
attribute :console_enabled
attribute :driver
attribute :driver_info
attribute :extra
attribute :instance_info
attribute :last_error
attribute :maintenance_reason
attribute :properties
attribute :provision_updated_at
attribute :reservation
attribute :target_power_state
attribute :target_provision_state
def create
requires :driver
merge_attributes(service.create_node(attributes).body)
self
end
def update(patch = nil)
requires :uuid, :driver
if patch
merge_attributes(service.patch_node(uuid, patch).body)
else
# TODO: implement update_node method using PUT method and self.attributes
# once it is supported by Ironic
raise ArgumentError,
'You need to provide patch attribute. Ironic does not support update by hash yet, only by jsonpatch.'
end
self
end
def destroy
requires :uuid
service.delete_node(uuid)
true
end
def chassis
requires :uuid
service.get_chassis(chassis_uuid).body
end
def ports
requires :uuid
service.list_ports_detailed(:node_uuid => uuid).body['ports']
end
def set_node_maintenance(parameters = nil)
requires :uuid
service.set_node_maintenance(uuid, parameters)
true
end
def unset_node_maintenance(parameters = nil)
requires :uuid
service.unset_node_maintenance(uuid, parameters)
true
end
def metadata
requires :uuid
service.get_node(uuid).headers
end
def set_power_state(power_state)
requires :uuid
service.set_node_power_state(uuid, power_state)
end
def set_provision_state(provision_state)
requires :uuid
service.set_node_provision_state(uuid, provision_state)
end
end
end
end
end