summaryrefslogtreecommitdiffstats
path: root/lib/puppet/rails/database/schema.rb
blob: 7b75f4216ce1896ed8530bf0fecbfee31b7099c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
class Puppet::Rails::Schema
  def self.init
    oldout = nil
    Puppet::Util.benchmark(Puppet, :notice, "Initialized database") do
      # We want to rewrite stdout, so we don't get migration messages.
      oldout = $stdout
      $stdout = File.open("/dev/null", "w")
      ActiveRecord::Schema.define do
        create_table :resources do |t|
          t.column :title, :text, :null => false
          t.column :restype,  :string, :null => false
          t.column :host_id, :integer
          t.column :source_file_id, :integer
          t.column :exported, :boolean
          t.column :line, :integer
          t.column :updated_at, :datetime
          t.column :created_at, :datetime
        end
        add_index :resources, :host_id, :integer => true
        add_index :resources, :source_file_id, :integer => true

        # Thanks, mysql!  MySQL requires a length on indexes in text fields.
        # So, we provide them for mysql and handle everything else specially.
        # Oracle doesn't index on CLOB fields, so we skip it
        if Puppet[:dbadapter] == "mysql"
          execute "CREATE INDEX typentitle ON resources (restype,title(50));"
        elsif Puppet[:dbadapter] != "oracle_enhanced"
          add_index :resources, [:title, :restype]
        end

        create_table :source_files do |t|
          t.column :filename, :string
          t.column :path, :string
          t.column :updated_at, :datetime
          t.column :created_at, :datetime
        end
        add_index :source_files, :filename

        create_table :resource_tags do |t|
          t.column :resource_id, :integer
          t.column :puppet_tag_id, :integer
          t.column :updated_at, :datetime
          t.column :created_at, :datetime
        end
        add_index :resource_tags, :resource_id, :integer => true
        add_index :resource_tags, :puppet_tag_id, :integer => true

        create_table :puppet_tags do |t|
          t.column :name, :string
          t.column :updated_at, :datetime
          t.column :created_at, :datetime
        end

        # Oracle automatically creates a primary key index
        add_index :puppet_tags, :id, :integer => true if Puppet[:dbadapter] != "oracle_enhanced"

        create_table :hosts do |t|
          t.column :name, :string, :null => false
          t.column :ip, :string
          t.column :environment, :text
          t.column :last_compile, :datetime
          t.column :last_freshcheck, :datetime
          t.column :last_report, :datetime
          #Use updated_at to automatically add timestamp on save.
          t.column :updated_at, :datetime
          t.column :source_file_id, :integer
          t.column :created_at, :datetime
        end
        add_index :hosts, :source_file_id, :integer => true
        add_index :hosts, :name

        create_table :fact_names do |t|
          t.column :name, :string, :null => false
          t.column :updated_at, :datetime
          t.column :created_at, :datetime
        end
        add_index :fact_names, :name

        create_table :fact_values do |t|
          t.column :value, :text, :null => false
          t.column :fact_name_id, :integer, :null => false
          t.column :host_id, :integer, :null => false
          t.column :updated_at, :datetime
          t.column :created_at, :datetime
        end
        add_index :fact_values, :fact_name_id, :integer => true
        add_index :fact_values, :host_id, :integer => true

        create_table :param_values do |t|
          t.column :value,  :text, :null => false
          t.column :param_name_id, :integer, :null => false
          t.column :line, :integer
          t.column :resource_id, :integer
          t.column :updated_at, :datetime
          t.column :created_at, :datetime
        end
        add_index :param_values, :param_name_id, :integer => true
        add_index :param_values, :resource_id, :integer => true

        create_table :param_names do |t|
          t.column :name, :string, :null => false
          t.column :updated_at, :datetime
          t.column :created_at, :datetime
        end
        add_index :param_names, :name

        create_table :inventory_nodes do |t|
          t.column :name, :string, :null => false
          t.column :timestamp, :datetime, :null => false
          t.column :updated_at, :datetime
          t.column :created_at, :datetime
        end

        add_index :inventory_nodes, :name, :unique => true

        create_table :inventory_facts, :id => false do |t|
          t.column :node_id, :integer, :null => false
          t.column :name, :string, :null => false
          t.column :value, :text, :null => false
        end

        add_index :inventory_facts, [:node_id, :name], :unique => true
      end
    end
  ensure
    $stdout.close
    $stdout = oldout if oldout
    oldout = nil
  end
end