foreman/db/migrate/20100525094200_simplify_parameters.rb @ 8a65dff7
aa1796f3 | Paul Kelly | class SimplifyParameters < ActiveRecord::Migration
|
|
def self.up
|
|||
remove_index :parameters, [:host_id, :type]
|
|||
remove_index :parameters, [:hostgroup_id, :type]
|
|||
remove_index :parameters, [:domain_id, :type]
|
|||
rename_column :parameters, :host_id, :reference_id
|
|||
add_index :parameters, [:reference_id, :type]
|
|||
Parameter.reset_column_information
|
|||
success = true
|
|||
for parameter in Parameter.all
|
|||
# There should be no Parameter objects. That is an abstract class.
|
|||
# The type is probably nil because this table was imported by prod2dev
|
|||
parameter.update_attribute :type, "HostParameter" if parameter.type.nil? and parameter.reference_id
|
|||
parameter.update_attribute :type, "GroupParameter" if parameter.type.nil? and parameter.hostgroup_id
|
|||
parameter.update_attribute :type, "DomainParameter" if parameter.type.nil? and parameter.domain_id
|
|||
parameter.update_attribute :type, "CommonParameter" if parameter.type.nil?
|
|||
if parameter.reference_id.nil? and parameter.type != "CommonParameter"
|
|||
parameter.reference_id = parameter.hostgroup_id || parameter.domain_id
|
|||
unless parameter.save
|
|||
say "Failed to migrate the parameter #{parameter.name}: " + parameter.errors.full_messages.join("\n")
|
|||
success = false
|
|||
end
|
|||
end
|
|||
end
|
|||
if success
|
|||
say "Everything migrated ok so we remove the old columns"
|
|||
remove_column :parameters, :hostgroup_id
|
|||
remove_column :parameters, :domain_id
|
|||
end
|
|||
end
|
|||
def self.down
|
|||
remove_index :parameters, [:reference_id, :type]
|
|||
add_column :parameters, :domain_id, :integer
|
|||
add_column :parameters, :hostgroup_id, :integer
|
|||
rename_column :parameters, :reference_id, :host_id
|
|||
Parameter.reset_column_information
|
|||
for parameter in Parameter.all
|
|||
if parameter.type =~ /Group|Domain/
|
|||
parameter.hostgroup_id = parameter.host_id if parameter.type == "GroupParameter"
|
|||
parameter.domain_id = parameter.host_id if parameter.type == "DomainParameter"
|
|||
parameter.host_id = nil
|
|||
unless parameter.save
|
|||
say "Failed to migrate the parameter #{parameter.name}: " + parameter.errors.full_messages.join("\n")
|
|||
end
|
|||
end
|
|||
end
|
|||
add_index :parameters, [:host_id, :type]
|
|||
add_index :parameters, [:hostgroup_id, :type]
|
|||
add_index :parameters, [:domain_id, :type]
|
|||
end
|
|||
end
|