Class: Puppet::Rails::Schema

Inherits:
Object
  • Object
show all
Defined in:
lib/puppet/rails/database/schema.rb

Class Method Summary collapse

Class Method Details

.initObject



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
132
133
134
# File 'lib/puppet/rails/database/schema.rb', line 4

def self.init
  oldout = nil
  text = ''
  Puppet::Util.benchmark(Puppet, :notice, "Initialized database") do
    # We want to rewrite stdout, so we don't get migration messages.
    oldout = $stdout
    $stdout = StringIO.new(text, '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 ['mysql','mysql2'].include? Puppet[:dbadapter]
        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 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
rescue Exception => e
  $stderr.puts e
  $stderr.puts "The output from running the code was:", text
  raise e
ensure
  $stdout = oldout if oldout
end