Project

General

Profile

Download (1.71 KB) Statistics
| Branch: | Tag: | Revision:
class FakeBMCNic < ActiveRecord::Base
self.table_name = 'nics'
serialize :attrs, Hash

ATTRIBUTES = [:username, :password, :provider]

PROVIDERS = %w(IPMI)
validates :provider, :inclusion => {:in => PROVIDERS}

ATTRIBUTES.each do |method|
define_method method do
self.attrs ||= { }
self.attrs[method]
end

define_method "#{method}=" do |value|
self.attrs ||= { }
old_value = attrs[method]
self.attrs[method] = value
# attrs_will_change! makes the record dirty. Otherwise, rails has a bug that it won't save if no other field is changed.
self.attrs_will_change! if (old_value != value)
end
end

def type
Nic::Base
end
end

class ExtractNicAttributes < ActiveRecord::Migration
def up
add_column :nics, :provider, :string
add_column :nics, :username, :string
add_column :nics, :password, :string

say "Extracting serialized attributes"
FakeBMCNic.all.each do |nic|
if nic.attrs.present?
nic.attrs.each_pair do |attribute, value|
if nic.respond_to?(attribute)
nic.send("#{attribute}=", value)
else
raise Foreman::Exception, "can not extract attribute '#{attribute}', delete custom interface and rerun migration"
end
end
nic.save(:validate => false)
end
end
end

def down
FakeBMCNic.all.each do |nic|
nic.attrs['provider'] = nic.provider unless nic.provider.nil?
nic.attrs['username'] = nic.username unless nic.username.nil?
nic.attrs['password'] = nic.password unless nic.password.nil?
nic.save!
end

remove_column :nics, :password
remove_column :nics, :username
remove_column :nics, :provider
end
end
(217-217/281)