|
class FakeNic < ActiveRecord::Base
|
|
self.table_name = 'nics'
|
|
|
|
def type
|
|
Nic::Managed
|
|
end
|
|
end
|
|
|
|
class FakeHost < ActiveRecord::Base
|
|
self.table_name = 'hosts'
|
|
end
|
|
|
|
class MoveHostNicsToInterfaces < ActiveRecord::Migration
|
|
def up
|
|
add_column :nics, :primary, :boolean, :default => false
|
|
add_column :nics, :provision, :boolean, :default => false
|
|
|
|
say "Migrating Host interfaces to standalone Interfaces"
|
|
|
|
Host::Managed.all.each do |host|
|
|
nic = FakeNic.new
|
|
nic.host_id = host.id
|
|
nic.name = host.name
|
|
nic.mac = host.attributes.with_indifferent_access[:mac]
|
|
nic.ip = host.attributes.with_indifferent_access[:ip]
|
|
nic.subnet_id = host.attributes.with_indifferent_access[:subnet_id]
|
|
nic.domain_id = host.attributes.with_indifferent_access[:domain_id]
|
|
nic.virtual = false
|
|
nic.identifier = host.primary_interface || "eth0"
|
|
nic.managed = host.attributes.with_indifferent_access[:managed]
|
|
nic.primary = true
|
|
nic.provision = true
|
|
nic.type = 'Nic::Managed'
|
|
nic.save!
|
|
|
|
say " Migrated #{nic.name}-#{nic.identifier} to nics"
|
|
end
|
|
|
|
remove_column :hosts, :ip
|
|
remove_column :hosts, :mac
|
|
remove_column :hosts, :primary_interface
|
|
remove_foreign_key :hosts, :name => "hosts_subnet_id_fk"
|
|
remove_column :hosts, :subnet_id
|
|
remove_foreign_key :hosts, :name => "hosts_domain_id_fk"
|
|
remove_column :hosts, :domain_id
|
|
end
|
|
|
|
def down
|
|
add_column :hosts, :ip, :string
|
|
add_column :hosts, :mac, :string, :default => ''
|
|
add_column :hosts, :primary_interface, :string
|
|
add_column :hosts, :subnet_id, :integer
|
|
add_foreign_key "hosts", "subnets", :name => "hosts_subnet_id_fk"
|
|
add_column :hosts, :domain_id, :integer
|
|
add_foreign_key "hosts", "subnets", :name => "hosts_domain_id_fk"
|
|
|
|
say "Migrating Interfaces to Host interfaces"
|
|
FakeHost.reset_column_information
|
|
FakeHost.all.each do |host|
|
|
host = host.becomes(FakeHost)
|
|
raise ActiveRecord::IrreversibleMigration if FakeNic.where(:primary => true, :provision => false).any?
|
|
raise ActiveRecord::IrreversibleMigration if FakeNic.where(:primary => false, :provision => true).any?
|
|
nic = FakeNic.where(:host_id => host.id).where(:primary => true, :provision => true).first
|
|
host.mac = nic.mac
|
|
host.ip = nic.ip
|
|
host.subnet_id = nic.subnet_id
|
|
host.domain_id = nic.domain_id
|
|
host.primary_interface = nic.identifier
|
|
host.type = 'Host::Managed'
|
|
host.save!
|
|
nic.destroy
|
|
end
|
|
|
|
remove_column :nics, :primary
|
|
remove_column :nics, :provision
|
|
end
|
|
end
|