foreman-mco 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/foreman_mco/application.js +22 -0
- data/app/assets/javascripts/foreman_mco/mco_hosts_extensions.js +49 -0
- data/app/assets/stylesheets/foreman-mco/application.css +13 -0
- data/app/controllers/foreman_mco/command_histories_controller.rb +26 -0
- data/app/controllers/foreman_mco/command_statuses_controller.rb +49 -0
- data/app/controllers/foreman_mco/commands_controller.rb +48 -0
- data/app/controllers/foreman_mco/detailed_command_histories_controller.rb +27 -0
- data/app/helpers/foreman_mco/application_helper.rb +4 -0
- data/app/helpers/foreman_mco/command_histories_helper.rb +6 -0
- data/app/models/concerns/foreman_mco/hosts_helper.rb +25 -0
- data/app/models/foreman_mco/command/base.rb +24 -0
- data/app/models/foreman_mco/command/filter.rb +15 -0
- data/app/models/foreman_mco/command/package_commands.rb +33 -0
- data/app/models/foreman_mco/command/ping.rb +11 -0
- data/app/models/foreman_mco/command/puppet_commands.rb +31 -0
- data/app/models/foreman_mco/command/service_commands.rb +43 -0
- data/app/models/foreman_mco/command_status.rb +27 -0
- data/app/models/foreman_mco/commands.rb +4 -0
- data/app/models/foreman_mco/host_command_status.rb +12 -0
- data/app/models/services/foreman_mco/mco_proxy_api.rb +57 -0
- data/app/models/setting/mco.rb +15 -0
- data/app/overrides/enable_mco_actions_on_hosts.rb +9 -0
- data/app/views/foreman_mco/command_histories/index.html.erb +46 -0
- data/app/views/foreman_mco/commands/install_package.html.erb +9 -0
- data/app/views/foreman_mco/commands/ping.html.erb +6 -0
- data/app/views/foreman_mco/commands/puppet_disable.html.erb +8 -0
- data/app/views/foreman_mco/commands/puppet_enable.html.erb +8 -0
- data/app/views/foreman_mco/commands/puppet_runonce.html.erb +8 -0
- data/app/views/foreman_mco/commands/service_status.html.erb +9 -0
- data/app/views/foreman_mco/commands/start_service.html.erb +9 -0
- data/app/views/foreman_mco/commands/stop_service.html.erb +9 -0
- data/app/views/foreman_mco/commands/uninstall_package.html.erb +9 -0
- data/app/views/foreman_mco/detailed_command_histories/index.html.erb +26 -0
- data/app/views/layouts/foreman-mco/application.html.erb +14 -0
- data/config/routes.rb +24 -0
- data/db/migrate/20131030154603_create_command_statuses.rb +15 -0
- data/db/migrate/20131031113547_add_mcollective_proxy_feature.rb +8 -0
- data/db/migrate/20131125123644_create_host_command_statuses.rb +17 -0
- data/db/migrate/20131209192923_add_discovered_agents.rb +20 -0
- data/lib/foreman-mco.rb +4 -0
- data/lib/foreman-mco/engine.rb +60 -0
- data/lib/foreman-mco/version.rb +3 -0
- data/lib/tasks/foreman-mco_tasks.rake +4 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/foreman-mco_test.rb +7 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +15 -0
- metadata +181 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
module ForemanMco::Command
|
2
|
+
class ServiceBase < Base
|
3
|
+
include ::ActiveModel::Validations
|
4
|
+
|
5
|
+
attr_reader :service_name
|
6
|
+
validates :service_name, :presence => true
|
7
|
+
|
8
|
+
def initialize(attrs)
|
9
|
+
super
|
10
|
+
@service_name = attrs[:service_name]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class ServiceStatus < ServiceBase
|
15
|
+
def remote_call
|
16
|
+
mco_proxy.service_status(service_name, filters)
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_s
|
20
|
+
"service status #{service_name}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class StartService < ServiceBase
|
25
|
+
def remote_call
|
26
|
+
mco_proxy.start_service(service_name, filters)
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_s
|
30
|
+
"service start #{service_name}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class StopService < ServiceBase
|
35
|
+
def remote_call
|
36
|
+
mco_proxy.stop_service(service_name, filters)
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_s
|
40
|
+
"service stop #{service_name}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class ForemanMco::CommandStatus < ActiveRecord::Base
|
2
|
+
include ::Taxonomix
|
3
|
+
|
4
|
+
PENDING = "pending"
|
5
|
+
SUCCESS = "success"
|
6
|
+
WARNING = "warning"
|
7
|
+
FAILURE = "failure"
|
8
|
+
|
9
|
+
TYPES = [PENDING, SUCCESS, WARNING, FAILURE]
|
10
|
+
|
11
|
+
has_many :host_command_statuses
|
12
|
+
before_validation :set_default_status
|
13
|
+
|
14
|
+
validates :command, :jid, :presence => true
|
15
|
+
validates :status, :inclusion => { :in => TYPES }
|
16
|
+
|
17
|
+
default_scope lambda { order('foreman_mco_command_statuses.updated_at') }
|
18
|
+
|
19
|
+
scoped_search :on => :command, :complete_value => :true
|
20
|
+
scoped_search :on => :status, :complete_value => :true
|
21
|
+
scoped_search :on => :updated_at
|
22
|
+
scoped_search :on => :created_at
|
23
|
+
|
24
|
+
def set_default_status
|
25
|
+
self.status = PENDING if new_record?
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module ForemanMco
|
2
|
+
class HostCommandStatus < ActiveRecord::Base
|
3
|
+
belongs_to :command_status
|
4
|
+
|
5
|
+
default_scope lambda { order('foreman_mco_host_command_statuses.created_at') }
|
6
|
+
|
7
|
+
scoped_search :on => :host, :complete_value => :true
|
8
|
+
scoped_search :on => :status_code, :complete_value => :true
|
9
|
+
scoped_search :on => :status_message, :complete_value => :true
|
10
|
+
scoped_search :on => :created_at
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
class ForemanMco::McoProxyApi < ::ProxyAPI::Resource
|
2
|
+
def initialize args
|
3
|
+
@url = args[:url] + "/mcollective"
|
4
|
+
super args
|
5
|
+
end
|
6
|
+
|
7
|
+
def test
|
8
|
+
parse(resource["test/test_command"].post(:name => "blah", 'params' => {:filters => filters}))
|
9
|
+
end
|
10
|
+
|
11
|
+
def install_package(package_name, filters)
|
12
|
+
parse(resource["packages/#{package_name}"].post({}, 'params' => {:filters => filters}))
|
13
|
+
end
|
14
|
+
|
15
|
+
def uninstall_package(package_name, filters)
|
16
|
+
parse(resource["packages/#{package_name}"].delete('params' => {:filters => filters}))
|
17
|
+
end
|
18
|
+
|
19
|
+
def service_status(service_name, filters)
|
20
|
+
parse(resource[ "services/#{service_name}"].get('params' => {:filters => filters}))
|
21
|
+
end
|
22
|
+
|
23
|
+
def start_service(service_name, filters)
|
24
|
+
parse(resource["services/#{service_name}/start"].post({}, 'params' => {:filters => filters}))
|
25
|
+
end
|
26
|
+
|
27
|
+
def stop_service(service_name, filters)
|
28
|
+
parse(resource["services/#{service_name}/stop"].post({}, 'params' => {:filters => filters}))
|
29
|
+
end
|
30
|
+
|
31
|
+
def puppet_runonce(filters)
|
32
|
+
parse(resource["puppet/runonce"].post({}, 'params' => {:filters => filters}))
|
33
|
+
end
|
34
|
+
|
35
|
+
def puppet_enable(filters)
|
36
|
+
parse(resource["puppet/enable"].post({}, 'params' => {:filters => filters}))
|
37
|
+
end
|
38
|
+
|
39
|
+
def puppet_disable(filters)
|
40
|
+
parse(resource["puppet/disable"].post({}, 'params' => {:filters => filters}))
|
41
|
+
end
|
42
|
+
|
43
|
+
def ping(filters)
|
44
|
+
parse(resource["ping"].get('params' => {:filters => filters}))
|
45
|
+
end
|
46
|
+
|
47
|
+
def parse(response)
|
48
|
+
if response and response.code >= 200 and response.code < 300
|
49
|
+
response.body.present? ? (JSON.parse(response.body) rescue response.body) : true
|
50
|
+
else
|
51
|
+
false
|
52
|
+
end
|
53
|
+
rescue => e
|
54
|
+
logger.warn "Failed to parse response: #{response} -> #{e}"
|
55
|
+
false
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class Setting::Mco < ::Setting
|
2
|
+
BLANK_ATTRS << "use_mco"
|
3
|
+
|
4
|
+
def self.load_defaults
|
5
|
+
return unless ActiveRecord::Base.connection.table_exists?('settings')
|
6
|
+
return unless super
|
7
|
+
|
8
|
+
Setting.transaction do
|
9
|
+
[
|
10
|
+
self.set('use_mco', "Use MCO to execute remote commands", false),
|
11
|
+
].compact.each { |s| self.create s.update(:category => "Setting::Mco") }
|
12
|
+
end
|
13
|
+
true
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Deface::Override.new(:virtual_path => "hosts/index",
|
2
|
+
:name => "add_mco_hosts_actions",
|
3
|
+
:replace => "erb[silent]:contains('title_actions')",
|
4
|
+
:text => '<% title_actions mco_multiple_actions_select, multiple_actions_select, (link_to_if_authorized _("New Host"), hash_for_new_host_path) %>')
|
5
|
+
|
6
|
+
Deface::Override.new(:virtual_path => "hosts/_list",
|
7
|
+
:name => "support_mco_hosts_checkboxes",
|
8
|
+
:insert_before => 'table',
|
9
|
+
:text => '<%= javascript "foreman_mco/mco_hosts_extensions" %>')
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<%= javascript "foreman_mco/mcollective_history" %>
|
2
|
+
<% title _("MCollective History") %>
|
3
|
+
|
4
|
+
<% if any_commands_run? %>
|
5
|
+
<table class="table table-bordered table-striped">
|
6
|
+
<tr>
|
7
|
+
<th><%= sort :command, :as => s_("Agent/Command") %></th>
|
8
|
+
<th><%= sort :created_at, :as => _("Start Time") %></th>
|
9
|
+
<th><%= sort :updated_at, :as => _("Last Updated") %></th>
|
10
|
+
<th><%= sort :status, :as => _("Status") %></th>
|
11
|
+
<th><%= _('Result') %></th>
|
12
|
+
</tr>
|
13
|
+
<% for command_status in @command_statuses %>
|
14
|
+
<tr>
|
15
|
+
<td><%= link_to_if(!command_status.result.empty?, command_status.command, command_history_detailed_command_histories_path(command_status)) do
|
16
|
+
command_status.command
|
17
|
+
end
|
18
|
+
%></td>
|
19
|
+
<td><%= time_ago_in_words(command_status.created_at.getlocal) %></td>
|
20
|
+
<td><%= time_ago_in_words(command_status.updated_at.getlocal) %></td>
|
21
|
+
<td><%= command_status.status %></td>
|
22
|
+
<td><%= command_status.result %></td>
|
23
|
+
</tr>
|
24
|
+
<% end %>
|
25
|
+
</table>
|
26
|
+
|
27
|
+
<div id="confirmation-modal" class="modal hide fade">
|
28
|
+
<div class="modal-header">
|
29
|
+
<a href="#" class="close" data-dismiss="modal">×</a>
|
30
|
+
<h3><%= _('Please Confirm') %></h3>
|
31
|
+
</div>
|
32
|
+
<div class="modal-body"></div>
|
33
|
+
<div class="modal-footer">
|
34
|
+
<a href="#" class="btn btn-primary"><%= _('Submit') %></a>
|
35
|
+
<a href="#" class="btn secondary"><%= _('Cancel') %></a>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
<% else %>
|
39
|
+
<div class="alert">
|
40
|
+
<button type="button" class="close" data-dismiss="alert">×</button>
|
41
|
+
<strong>No commands have been run yet!</strong> Select a command from the "Select Action" dropdown above to run your first command.
|
42
|
+
</div></strong>
|
43
|
+
<% end %>
|
44
|
+
|
45
|
+
<%= page_entries_info @command_statuses %>
|
46
|
+
<%= will_paginate @command_statuses %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%= render 'hosts/selected_hosts', :hosts => @hosts %>
|
2
|
+
|
3
|
+
<%= form_for :command, :url => submit_command_commands_path() do |f| %>
|
4
|
+
<%= f.hidden_field :filters, :value => @filters %>
|
5
|
+
<%= f.hidden_field :command, :value => "install_package" %>
|
6
|
+
<%= f.text_field :package_name %>
|
7
|
+
<span class="label label-warning"><%= _('Warning') %></span>
|
8
|
+
<%= _('This might take a while, as install runs on all servers') %>
|
9
|
+
<% end %>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<%= form_for :command, :url => submit_command_commands_path() do |f| %>
|
2
|
+
<%= f.hidden_field :filters, :value => @filters %>
|
3
|
+
<%= f.hidden_field :command, :value => "ping" %>
|
4
|
+
<span class="label label-warning"><%= _('Warning') %></span>
|
5
|
+
<%= _('This might take a while, as command runs on all servers') %>
|
6
|
+
<% end %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<%= render 'hosts/selected_hosts', :hosts => @hosts %>
|
2
|
+
|
3
|
+
<%= form_for :command, :url => submit_command_commands_path() do |f| %>
|
4
|
+
<%= f.hidden_field :filters, :value => @filters %>
|
5
|
+
<%= f.hidden_field :command, :value => "puppet_disable" %>
|
6
|
+
<span class="label label-warning"><%= _('Warning') %></span>
|
7
|
+
<%= _('This might take a while, as install runs on all servers') %>
|
8
|
+
<% end %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<%= render 'hosts/selected_hosts', :hosts => @hosts %>
|
2
|
+
|
3
|
+
<%= form_for :command, :url => submit_command_commands_path() do |f| %>
|
4
|
+
<%= f.hidden_field :filters, :value => @filters %>
|
5
|
+
<%= f.hidden_field :command, :value => "puppet_enable" %>
|
6
|
+
<span class="label label-warning"><%= _('Warning') %></span>
|
7
|
+
<%= _('This might take a while, as install runs on all servers') %>
|
8
|
+
<% end %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<%= render 'hosts/selected_hosts', :hosts => @hosts %>
|
2
|
+
|
3
|
+
<%= form_for :command, :url => submit_command_commands_path() do |f| %>
|
4
|
+
<%= f.hidden_field :filters, :value => @filters %>
|
5
|
+
<%= f.hidden_field :command, :value => "puppet_run_once" %>
|
6
|
+
<span class="label label-warning"><%= _('Warning') %></span>
|
7
|
+
<%= _('This might take a while, as install runs on all servers') %>
|
8
|
+
<% end %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%= render 'hosts/selected_hosts', :hosts => @hosts %>
|
2
|
+
|
3
|
+
<%= form_for :command, :url => submit_command_commands_path() do |f| %>
|
4
|
+
<%= f.hidden_field :filters, :value => @filters %>
|
5
|
+
<%= f.hidden_field :command, :value => "service_status" %>
|
6
|
+
<%= f.text_field :service_name %>
|
7
|
+
<span class="label label-warning"><%= _('Warning') %></span>
|
8
|
+
<%= _('This might take a while, as command runs on all servers') %>
|
9
|
+
<% end %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%= render 'hosts/selected_hosts', :hosts => @hosts %>
|
2
|
+
|
3
|
+
<%= form_for :command, :url => submit_command_commands_path() do |f| %>
|
4
|
+
<%= f.hidden_field :filters, :value => @filters %>
|
5
|
+
<%= f.hidden_field :command, :value => "start_service" %>
|
6
|
+
<%= f.text_field :service_name %>
|
7
|
+
<span class="label label-warning"><%= _('Warning') %></span>
|
8
|
+
<%= _('This might take a while, as command runs on all servers') %>
|
9
|
+
<% end %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%= render 'hosts/selected_hosts', :hosts => @hosts %>
|
2
|
+
|
3
|
+
<%= form_for :command, :url => submit_command_commands_path() do |f| %>
|
4
|
+
<%= f.hidden_field :filters, :value => @filters %>
|
5
|
+
<%= f.hidden_field :command, :value => "stop_service" %>
|
6
|
+
<%= f.text_field :service_name %>
|
7
|
+
<span class="label label-warning"><%= _('Warning') %></span>
|
8
|
+
<%= _('This might take a while, as command runs on all servers') %>
|
9
|
+
<% end %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%= render 'hosts/selected_hosts', :hosts => @hosts %>
|
2
|
+
|
3
|
+
<%= form_for :command, :url => submit_command_commands_path() do |f| %>
|
4
|
+
<%= f.hidden_field :filters, :value => @filters %>
|
5
|
+
<%= f.hidden_field :command, :value => "uninstall_package" %>
|
6
|
+
<%= f.text_field :package_name %>
|
7
|
+
<span class="label label-warning"><%= _('Warning') %></span>
|
8
|
+
<%= _('This might take a while, as install runs on all servers') %>
|
9
|
+
<% end %>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<% title _("Results") %>
|
2
|
+
|
3
|
+
<% title_actions %>
|
4
|
+
|
5
|
+
<table class="table table-bordered table-striped">
|
6
|
+
<tr>
|
7
|
+
<th><%= sort :host, :as => s_("Host") %></th>
|
8
|
+
<th><%= sort :status_code, :as => s_("Status Code") %></th>
|
9
|
+
<th><%= sort :status_message, :as => _("Status Message") %></th>
|
10
|
+
<th><%= sort :created_at, :as => _("Timestamp") %></th>
|
11
|
+
<th><%= _('Result') %></th>
|
12
|
+
</tr>
|
13
|
+
<% for detail in @details %>
|
14
|
+
<tr>
|
15
|
+
<td><%= link_to_if(@hosts.has_key?(detail.host), detail.host, @hosts.has_key?(detail.host) ? hash_for_host_path(:id => @hosts[detail.host].id) : {})
|
16
|
+
%></td>
|
17
|
+
<td><%= detail.status_code %></td>
|
18
|
+
<td><%= detail.status_message %></td>
|
19
|
+
<td><%= time_ago_in_words(detail.created_at.getlocal) %></td>
|
20
|
+
<td><%= detail.result %></td>
|
21
|
+
</tr>
|
22
|
+
<% end %>
|
23
|
+
</table>
|
24
|
+
|
25
|
+
<%= page_entries_info @details %>
|
26
|
+
<%= will_paginate @details %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>ForemanMco</title>
|
5
|
+
<%= stylesheet_link_tag "foreman-mco/application", :media => "all" %>
|
6
|
+
<%= javascript_include_tag "foreman-mco/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<%= yield %>
|
12
|
+
|
13
|
+
</body>
|
14
|
+
</html>
|
data/config/routes.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
Rails.application.routes.draw do
|
2
|
+
scope :module => :foreman_mco do
|
3
|
+
resource :commands, :only => [] do
|
4
|
+
get :install_package, :on => :collection
|
5
|
+
get :uninstall_package, :on => :collection
|
6
|
+
get :service_status, :on => :collection
|
7
|
+
get :start_service, :on => :collection
|
8
|
+
get :stop_service, :on => :collection
|
9
|
+
get :puppet_runonce, :on => :collection
|
10
|
+
get :puppet_enable, :on => :collection
|
11
|
+
get :puppet_disable, :on => :collection
|
12
|
+
get :ping, :on => :collection
|
13
|
+
post :submit_command, :on => :collection
|
14
|
+
end
|
15
|
+
|
16
|
+
resources :command_histories, :only => [:index] do
|
17
|
+
resources :detailed_command_histories, :only => :index do
|
18
|
+
get :auto_complete_search, :on => :collection
|
19
|
+
end
|
20
|
+
get :auto_complete_search, :on => :collection
|
21
|
+
end
|
22
|
+
resources :command_statuses, :only => [:update]
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateCommandStatuses < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
create_table :foreman_mco_command_statuses do |t|
|
4
|
+
t.column :jid, :string, :null => false
|
5
|
+
t.column :command, :text, :null => false
|
6
|
+
t.column :status, :string, :null => false
|
7
|
+
t.column :result, :text
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def down
|
13
|
+
drop_table :foreman_mco_command_statuses
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CreateHostCommandStatuses < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
create_table :foreman_mco_host_command_statuses do |t|
|
4
|
+
t.references :command_status, :null => false
|
5
|
+
t.column :host, :string, :null => false
|
6
|
+
t.column :agent, :string, :null => false
|
7
|
+
t.column :action, :string, :null => false
|
8
|
+
t.column :status_code, :string, :null => false
|
9
|
+
t.column :status_message, :text, :null => false
|
10
|
+
t.column :result, :text
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def down
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class AddDiscoveredAgents < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
create_table :foreman_mco_discovered_agents do |t|
|
4
|
+
t.column :id, :integer, :null => false
|
5
|
+
t.column :name, :string, :null => false
|
6
|
+
t.column :type, :string, :null => false
|
7
|
+
end
|
8
|
+
|
9
|
+
create_table :foreman_mco_discovered_agent_fields do |t|
|
10
|
+
t.column :id, :integer, :null => false
|
11
|
+
t.column :name, :string, :null => false
|
12
|
+
t.column :discovered_agents_id, :integer, :null => false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def down
|
17
|
+
drop_table :foreman_mco_discovered_agents
|
18
|
+
drop_table :foreman_mco_discovered_agent_fields
|
19
|
+
end
|
20
|
+
end
|