# File lib/puppet/rails/database/schema.rb, line 2
  2:   def self.init
  3:     oldout = nil
  4:     Puppet::Util.benchmark(Puppet, :notice, "Initialized database") do
  5:       # We want to rewrite stdout, so we don't get migration messages.
  6:       oldout = $stdout
  7:       $stdout = File.open("/dev/null", "w")
  8:       ActiveRecord::Schema.define do
  9:         create_table :resources do |t|
 10:           t.column :title, :text, :null => false
 11:           t.column :restype,  :string, :null => false
 12:           t.column :host_id, :integer
 13:           t.column :source_file_id, :integer
 14:           t.column :exported, :boolean
 15:           t.column :line, :integer
 16:           t.column :updated_at, :datetime
 17:           t.column :created_at, :datetime
 18:         end
 19:         add_index :resources, :host_id, :integer => true
 20:         add_index :resources, :source_file_id, :integer => true
 21: 
 22:         # Thanks, mysql!  MySQL requires a length on indexes in text fields.
 23:         # So, we provide them for mysql and handle everything else specially.
 24:         # Oracle doesn't index on CLOB fields, so we skip it
 25:         if Puppet[:dbadapter] == "mysql"
 26:           execute "CREATE INDEX typentitle ON resources (restype,title(50));"
 27:         elsif Puppet[:dbadapter] != "oracle_enhanced"
 28:           add_index :resources, [:title, :restype]
 29:         end
 30: 
 31:         create_table :source_files do |t|
 32:           t.column :filename, :string
 33:           t.column :path, :string
 34:           t.column :updated_at, :datetime
 35:           t.column :created_at, :datetime
 36:         end
 37:         add_index :source_files, :filename
 38: 
 39:         create_table :resource_tags do |t|
 40:           t.column :resource_id, :integer
 41:           t.column :puppet_tag_id, :integer
 42:           t.column :updated_at, :datetime
 43:           t.column :created_at, :datetime
 44:         end
 45:         add_index :resource_tags, :resource_id, :integer => true
 46:         add_index :resource_tags, :puppet_tag_id, :integer => true
 47: 
 48:         create_table :puppet_tags do |t|
 49:           t.column :name, :string
 50:           t.column :updated_at, :datetime
 51:           t.column :created_at, :datetime
 52:         end
 53: 
 54:         # Oracle automatically creates a primary key index
 55:         add_index :puppet_tags, :id, :integer => true if Puppet[:dbadapter] != "oracle_enhanced"
 56: 
 57:         create_table :hosts do |t|
 58:           t.column :name, :string, :null => false
 59:           t.column :ip, :string
 60:           t.column :environment, :text
 61:           t.column :last_compile, :datetime
 62:           t.column :last_freshcheck, :datetime
 63:           t.column :last_report, :datetime
 64:           #Use updated_at to automatically add timestamp on save.
 65:           t.column :updated_at, :datetime
 66:           t.column :source_file_id, :integer
 67:           t.column :created_at, :datetime
 68:         end
 69:         add_index :hosts, :source_file_id, :integer => true
 70:         add_index :hosts, :name
 71: 
 72:         create_table :fact_names do |t|
 73:           t.column :name, :string, :null => false
 74:           t.column :updated_at, :datetime
 75:           t.column :created_at, :datetime
 76:         end
 77:         add_index :fact_names, :name
 78: 
 79:         create_table :fact_values do |t|
 80:           t.column :value, :text, :null => false
 81:           t.column :fact_name_id, :integer, :null => false
 82:           t.column :host_id, :integer, :null => false
 83:           t.column :updated_at, :datetime
 84:           t.column :created_at, :datetime
 85:         end
 86:         add_index :fact_values, :fact_name_id, :integer => true
 87:         add_index :fact_values, :host_id, :integer => true
 88: 
 89:         create_table :param_values do |t|
 90:           t.column :value,  :text, :null => false
 91:           t.column :param_name_id, :integer, :null => false
 92:           t.column :line, :integer
 93:           t.column :resource_id, :integer
 94:           t.column :updated_at, :datetime
 95:           t.column :created_at, :datetime
 96:         end
 97:         add_index :param_values, :param_name_id, :integer => true
 98:         add_index :param_values, :resource_id, :integer => true
 99: 
100:         create_table :param_names do |t|
101:           t.column :name, :string, :null => false
102:           t.column :updated_at, :datetime
103:           t.column :created_at, :datetime
104:         end
105:         add_index :param_names, :name
106:       end
107:     end
108:   ensure
109:     $stdout.close
110:     $stdout = oldout if oldout
111:     oldout = nil
112:   end