# 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:                 if Puppet[:dbadapter] == "mysql"
 25:                     execute "CREATE INDEX typentitle ON resources (restype,title(50));"
 26:                 else
 27:                     add_index :resources, [:title, :restype]
 28:                 end
 29: 
 30:                 create_table :source_files do |t|
 31:                     t.column :filename, :string
 32:                     t.column :path, :string
 33:                     t.column :updated_at, :datetime
 34:                     t.column :created_at, :datetime
 35:                 end
 36:                 add_index :source_files, :filename
 37: 
 38:                 create_table :resource_tags do |t|
 39:                     t.column :resource_id, :integer
 40:                     t.column :puppet_tag_id, :integer
 41:                     t.column :updated_at, :datetime
 42:                     t.column :created_at, :datetime
 43:                 end
 44:                 add_index :resource_tags, :resource_id, :integer => true
 45:                 add_index :resource_tags, :puppet_tag_id, :integer => true
 46: 
 47:                 create_table :puppet_tags do |t|
 48:                     t.column :name, :string
 49:                     t.column :updated_at, :datetime
 50:                     t.column :created_at, :datetime
 51:                 end
 52:                 add_index :puppet_tags, :id, :integer => true
 53: 
 54:                 create_table :hosts do |t|
 55:                     t.column :name, :string, :null => false
 56:                     t.column :ip, :string
 57:                     t.column :environment, :string
 58:                     t.column :last_compile, :datetime
 59:                     t.column :last_freshcheck, :datetime
 60:                     t.column :last_report, :datetime
 61:                     #Use updated_at to automatically add timestamp on save.
 62:                     t.column :updated_at, :datetime
 63:                     t.column :source_file_id, :integer
 64:                     t.column :created_at, :datetime
 65:                 end
 66:                 add_index :hosts, :source_file_id, :integer => true
 67:                 add_index :hosts, :name
 68: 
 69:                 create_table :fact_names do |t|
 70:                     t.column :name, :string, :null => false
 71:                     t.column :updated_at, :datetime
 72:                     t.column :created_at, :datetime
 73:                 end
 74:                 add_index :fact_names, :name
 75: 
 76:                 create_table :fact_values do |t|
 77:                     t.column :value, :text, :null => false
 78:                     t.column :fact_name_id, :integer, :null => false
 79:                     t.column :host_id, :integer, :null => false
 80:                     t.column :updated_at, :datetime
 81:                     t.column :created_at, :datetime
 82:                 end
 83:                 add_index :fact_values, :fact_name_id, :integer => true
 84:                 add_index :fact_values, :host_id, :integer => true
 85: 
 86:                 create_table :param_values do |t|
 87:                     t.column :value,  :text, :null => false
 88:                     t.column :param_name_id, :integer, :null => false
 89:                     t.column :line, :integer
 90:                     t.column :resource_id, :integer
 91:                     t.column :updated_at, :datetime
 92:                     t.column :created_at, :datetime
 93:                 end
 94:                 add_index :param_values, :param_name_id, :integer => true
 95:                 add_index :param_values, :resource_id, :integer => true
 96: 
 97:                 create_table :param_names do |t|
 98:                     t.column :name, :string, :null => false
 99:                     t.column :updated_at, :datetime
100:                     t.column :created_at, :datetime
101:                 end
102:                 add_index :param_names, :name
103:             end
104:         end
105:     ensure
106:         $stdout.close
107:         $stdout = oldout if oldout
108:         oldout = nil
109:     end