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
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YzdkZDcyMTM0YmFkYmJhNDFjMzMzYTY5ZTc2ZmFhYmM2ZDU5ZjFhOQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
Y2YyM2M5ZThlMDExNzdjZjhkYzhhNGVjOTFjZTVmZjMxMzA1OTdkMw==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZjY2MWZhODg5ZTM3YzAyYTQ2OTg2ZTNlMzc4ZjViYjNjZjQ3NDI2Y2ZkYmMy
|
10
|
+
MGRmYjYxNmQyNTgwOTU0OTgzOGU5YWVmZTkxNGE2YjU2YjhhNTM5MzhhYjkw
|
11
|
+
MTdjOTEyMGE2OGVmMWE4OTg1ZTM3YmIwZmMxZjhjNWFkNGI3NTA=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NjkxZTllM2FiMDE4MWY0ZmVhNzZkMDczMjQ4YmI3MmYyYWVhMTcxMDY4ZTBm
|
14
|
+
OWRhZTZkM2UzZGVmODJlYzM5Mzc3YTc4Njk1Y2NiNjZiNjkyNDVmNzgxYjNh
|
15
|
+
YzI4Mzc3NTliYTkwOTY3MzdkODE0NjAzMDI4ZmVkYzk0OWE5NmQ=
|
data/Rakefile
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'rdoc/task'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rdoc/rdoc'
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
RDoc::Task = Rake::RDocTask
|
13
|
+
end
|
14
|
+
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
17
|
+
rdoc.title = 'ForemanMco'
|
18
|
+
rdoc.options << '--line-numbers'
|
19
|
+
rdoc.rdoc_files.include('README.rdoc')
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
|
+
end
|
22
|
+
|
23
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
24
|
+
load 'rails/tasks/engine.rake'
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
Bundler::GemHelper.install_tasks
|
29
|
+
|
30
|
+
require 'rake/testtask'
|
31
|
+
|
32
|
+
Rake::TestTask.new(:test) do |t|
|
33
|
+
t.libs << 'lib'
|
34
|
+
t.libs << 'test'
|
35
|
+
t.pattern = 'test/**/*_test.rb'
|
36
|
+
t.verbose = false
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
task :default => :test
|
@@ -0,0 +1,22 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// the compiled file.
|
9
|
+
//
|
10
|
+
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
|
11
|
+
// GO AFTER THE REQUIRES BELOW.
|
12
|
+
//
|
13
|
+
//= require jquery
|
14
|
+
//= require jquery_ujs
|
15
|
+
//= require_tree .
|
16
|
+
//= require scoped_search
|
17
|
+
//= require twitter/bootstrap
|
18
|
+
//= require topbar
|
19
|
+
//= require two-pane
|
20
|
+
//= require vendor
|
21
|
+
//= require about
|
22
|
+
//= require jquery.extentions
|
@@ -0,0 +1,49 @@
|
|
1
|
+
$(function() {
|
2
|
+
$('#mco_submit_multiple a').click(function(){
|
3
|
+
if ($(this).hasClass('dropdown-toggle')) { return false }
|
4
|
+
if ($(this).hasClass('disabled')) { return false }
|
5
|
+
var title = $(this).attr('data-original-title');
|
6
|
+
var url = $(this).attr('href') + "?" + $.param({host_ids: $.foremanSelectedHosts});
|
7
|
+
$('#confirmation-modal .modal-header h3').text(title);
|
8
|
+
$('#confirmation-modal .modal-body').empty().append("<img class='modal-loading' src='/assets/spinner.gif'>");
|
9
|
+
$('#confirmation-modal').modal({show: "true", backdrop: "static"});
|
10
|
+
$("#confirmation-modal .modal-body").load(url + " #content",
|
11
|
+
function(response, status, xhr) {
|
12
|
+
$("#loading").hide();
|
13
|
+
$('#submit_multiple').val('');
|
14
|
+
var b = $("#confirmation-modal .btn-primary");
|
15
|
+
if ($(response).find('#content form select').size() > 0)
|
16
|
+
b.addClass("disabled").attr("disabled", true);
|
17
|
+
else
|
18
|
+
b.removeClass("disabled").attr("disabled", false);
|
19
|
+
});
|
20
|
+
return false;
|
21
|
+
});
|
22
|
+
|
23
|
+
$('#confirmation-modal .btn-primary').click(function(){
|
24
|
+
$("#confirmation-modal form").submit();
|
25
|
+
$('#confirmation-modal').modal('hide');
|
26
|
+
});
|
27
|
+
|
28
|
+
$('#confirmation-modal .secondary').click(function(){
|
29
|
+
$('#confirmation-modal').modal('hide');
|
30
|
+
});
|
31
|
+
});
|
32
|
+
|
33
|
+
original_toggle_actions = toggle_actions
|
34
|
+
function mco_toggle_actions() {
|
35
|
+
original_toggle_actions();
|
36
|
+
var dropdown = $("ul.dropdown-menu li a.mco-filtered");
|
37
|
+
if ($.foremanSelectedHosts.length == 0) {
|
38
|
+
dropdown.each(function() {
|
39
|
+
$(this).addClass('disabled')
|
40
|
+
$(this).css({'color': 'lightgray'})
|
41
|
+
});
|
42
|
+
} else {
|
43
|
+
dropdown.each(function() {
|
44
|
+
$(this).removeClass('disabled')
|
45
|
+
$(this).css({'color': 'black'})
|
46
|
+
});
|
47
|
+
}
|
48
|
+
}
|
49
|
+
toggle_actions = mco_toggle_actions
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the top of the
|
9
|
+
* compiled file, but it's generally better to create a new file per style scope.
|
10
|
+
*
|
11
|
+
*= require_self
|
12
|
+
*= require_tree .
|
13
|
+
*/
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ForemanMco
|
2
|
+
class CommandHistoriesController < ::ApplicationController
|
3
|
+
include Foreman::Controller::TaxonomyMultiple
|
4
|
+
include Foreman::Controller::AutoCompleteSearch
|
5
|
+
|
6
|
+
SEARCHABLE_ACTIONS= %w[index]
|
7
|
+
|
8
|
+
def index
|
9
|
+
begin
|
10
|
+
search = CommandStatus.search_for(params[:search],:order => params[:order])
|
11
|
+
rescue => e
|
12
|
+
error e.to_s
|
13
|
+
search = CommandStatus.search_for ''
|
14
|
+
end
|
15
|
+
@command_statuses = search.paginate(:page => params[:page])
|
16
|
+
end
|
17
|
+
|
18
|
+
def detailed
|
19
|
+
@details = HostCommandStatus.where(:command_status_id => params[:id])
|
20
|
+
end
|
21
|
+
|
22
|
+
def model_of_controller
|
23
|
+
CommandStatus
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module ForemanMco
|
2
|
+
class CommandStatusesController < ::Api::V2::BaseController
|
3
|
+
include ::Foreman::Controller::SmartProxyAuth
|
4
|
+
|
5
|
+
add_puppetmaster_filters([:update])
|
6
|
+
|
7
|
+
before_filter :find_status, :only => [:update]
|
8
|
+
before_filter :parse_results, :only => [:update]
|
9
|
+
|
10
|
+
def update
|
11
|
+
process_response @command_status.update_attributes!(params[:command_status])
|
12
|
+
end
|
13
|
+
|
14
|
+
def find_status
|
15
|
+
@command_status = ForemanMco::CommandStatus.find_by_jid(params[:id])
|
16
|
+
render_error 'not_found', :status => :not_found and return false unless @command_status
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse_results
|
20
|
+
return if params[:command_status][:result].nil?
|
21
|
+
@host_statuses = params[:command_status][:result].each {|host_status| @command_status.host_command_statuses.build(to_foreman_schema(host_status))}
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_foreman_schema(a_hash)
|
25
|
+
to_ret = {}
|
26
|
+
our_schema = { "sender" => "host", "statuscode" => "status_code", "statusmsg" => "status_message", "data" => "result" }
|
27
|
+
|
28
|
+
a_hash.each_pair do |k,v|
|
29
|
+
our_schema.has_key?(k) ? to_ret[our_schema[k]] = v : to_ret[k] = v
|
30
|
+
end
|
31
|
+
|
32
|
+
to_ret
|
33
|
+
end
|
34
|
+
|
35
|
+
def require_mco_proxy_or_login
|
36
|
+
if auth_smart_proxy(SmartProxy.mcollective_proxies, false)
|
37
|
+
set_admin_user
|
38
|
+
return true
|
39
|
+
end
|
40
|
+
|
41
|
+
require_login
|
42
|
+
unless User.current
|
43
|
+
render_error 'access_denied', :status => :forbidden unless performed? and api_request?
|
44
|
+
return false
|
45
|
+
end
|
46
|
+
authorize
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'foreman_mco/commands'
|
2
|
+
|
3
|
+
module ForemanMco
|
4
|
+
class CommandsController < ::ApplicationController
|
5
|
+
COMMANDS = [:install_package, :uninstall_package, :service_status, :start_service,
|
6
|
+
:stop_service, :install_package, :uninstall_package,
|
7
|
+
:puppet_runonce, :puppet_enable, :puppet_disable,
|
8
|
+
:ping]
|
9
|
+
|
10
|
+
attr_reader :command
|
11
|
+
before_filter :find_command, :only => [:submit_command]
|
12
|
+
before_filter :filter_by_hosts, :only => COMMANDS
|
13
|
+
|
14
|
+
COMMANDS.each do |cmd|
|
15
|
+
define_method(cmd) {}
|
16
|
+
end
|
17
|
+
|
18
|
+
#TODO: a possible race condition here -- proxy *can* process remote job before we get to CommandStatus creation
|
19
|
+
def submit_command
|
20
|
+
if @command.execute
|
21
|
+
process_success :success_redirect => :back, :success_msg => _("'%s' command has been queued up for execution") % command
|
22
|
+
else
|
23
|
+
process_error :redirect => :back, :error_msg => _("'%s' command has not been queued up: %s") % [command, 'fail!']
|
24
|
+
end
|
25
|
+
rescue => e
|
26
|
+
process_error :redirect => :back, :error_msg => _("'%s' command has not been queued up: %s") % [command, e]
|
27
|
+
end
|
28
|
+
|
29
|
+
def find_command
|
30
|
+
return process_error :redirect => :back, :error_msg => _("No command to execute") unless params[:command]
|
31
|
+
|
32
|
+
command_hash = params[:command]
|
33
|
+
clazz = ("ForemanMco::Command::" + command_hash[:command].camelize).constantize
|
34
|
+
@command = clazz.new(command_hash)
|
35
|
+
|
36
|
+
return process_error(:redirect => :back, :object => @command, :error_msg => _("Invalid command parametres: %s") % command.errors.full_messages) unless @command.valid?
|
37
|
+
|
38
|
+
@command
|
39
|
+
rescue NameError => e
|
40
|
+
return process_error(:redirect => :back, :object => @command, :error_msg => _("Invalid command '%s'") % params[:command])
|
41
|
+
end
|
42
|
+
|
43
|
+
def filter_by_hosts
|
44
|
+
@hosts = params[:host_ids].nil? ? [] : Host.select(:name).where(:id => params[:host_ids])
|
45
|
+
@filters = @hosts.collect(&:name).collect {|n| ::ForemanMco::Command::Filter.identity_filter(n)}.to_json
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module ForemanMco
|
2
|
+
class DetailedCommandHistoriesController < ::ApplicationController
|
3
|
+
include Foreman::Controller::TaxonomyMultiple
|
4
|
+
include Foreman::Controller::AutoCompleteSearch
|
5
|
+
|
6
|
+
SEARCHABLE_ACTIONS= %w[index]
|
7
|
+
|
8
|
+
def index
|
9
|
+
begin
|
10
|
+
search = HostCommandStatus.where(:command_status_id => params[:command_history_id]).search_for(params[:search],:order => params[:order])
|
11
|
+
rescue => e
|
12
|
+
error e.to_s
|
13
|
+
search = HostCommandStatus.where(:command_status_id => params[:command_history_id])
|
14
|
+
end
|
15
|
+
@details = search.paginate(:page => params[:page])
|
16
|
+
@hosts = Host.my_hosts.select([:id, :name]).where(:name => @details.collect(&:host)).index_by(&:name)
|
17
|
+
end
|
18
|
+
|
19
|
+
def controller_name
|
20
|
+
"command_history_detailed_command_histories"
|
21
|
+
end
|
22
|
+
|
23
|
+
def model_of_controller
|
24
|
+
HostCommandStatus
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ForemanMco::HostsHelper
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
def mco_multiple_actions_select
|
5
|
+
actions = []
|
6
|
+
|
7
|
+
if Setting[:use_mco]
|
8
|
+
actions << [_('Ping'), ping_commands_path, 'pencil']
|
9
|
+
actions << [_('Install Package'), install_package_commands_path, 'pencil', 'mco-filtered']
|
10
|
+
actions << [_('Uninstall Package'), uninstall_package_commands_path, 'pencil', 'mco-filtered']
|
11
|
+
actions << [_('Service Status'), service_status_commands_path, 'pencil', 'mco-filtered']
|
12
|
+
actions << [_('Start Service'), start_service_commands_path, 'pencil', 'mco-filtered']
|
13
|
+
actions << [_('Stop Service'), stop_service_commands_path, 'pencil', 'mco-filtered']
|
14
|
+
actions << [_('Puppet Runonce'), puppet_runonce_commands_path, 'pencil', 'mco-filtered']
|
15
|
+
actions << [_('Puppet Enable'), puppet_enable_commands_path, 'pencil', 'mco-filtered']
|
16
|
+
actions << [_('Puppet Disable'), puppet_disable_commands_path, 'pencil', 'mco-filtered']
|
17
|
+
end
|
18
|
+
|
19
|
+
content_tag :span, :id => 'mco_submit_multiple' do
|
20
|
+
select_action_button( _("Select MCO Action"), actions.map do |action|
|
21
|
+
link_to(icon_text(action[2], action[0]) , action[1], :class=>'btn ' + (action.try(:[], 3) || ''), :title => _("%s - The following hosts are about to be changed") % action[0])
|
22
|
+
end.flatten)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ForemanMco::Command
|
2
|
+
class Base
|
3
|
+
include ::ActiveModel::Validations
|
4
|
+
attr_reader :filters
|
5
|
+
|
6
|
+
def initialize(attrs = {})
|
7
|
+
@filters = attrs[:filters] || []
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute
|
11
|
+
response = remote_call
|
12
|
+
::ForemanMco::CommandStatus.create!(:command => self.to_s, :jid => response.split("/tasks/")[1])
|
13
|
+
end
|
14
|
+
|
15
|
+
def mco_proxy
|
16
|
+
return @mco_proxy if @mco_proxy
|
17
|
+
|
18
|
+
db_proxy_record = SmartProxy.joins(:features).where("features.name" => "MCollective").first
|
19
|
+
raise ::Foreman::Exception.new(N_("There are no configured mcollective proxies")) unless db_proxy_record
|
20
|
+
|
21
|
+
@mco_proxy = ForemanMco::McoProxyApi.new(:url => db_proxy_record.url)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module ForemanMco::Command
|
2
|
+
class BasePackage < Base
|
3
|
+
include ::ActiveModel::Validations
|
4
|
+
|
5
|
+
attr_reader :package_name
|
6
|
+
validates :package_name, :presence => true
|
7
|
+
|
8
|
+
def initialize(attrs)
|
9
|
+
super
|
10
|
+
@package_name = attrs[:package_name]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class InstallPackage < BasePackage
|
15
|
+
def remote_call
|
16
|
+
mco_proxy.install_package(@package_name, filters)
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_s
|
20
|
+
"package install #{package_name}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class UninstallPackage < BasePackage
|
25
|
+
def remote_call
|
26
|
+
mco_proxy.uninstall_package(@package_name, filters)
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_s
|
30
|
+
"package uninstall #{package_name}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module ForemanMco::Command
|
2
|
+
class PuppetRunOnce < Base
|
3
|
+
def remote_call
|
4
|
+
mco_proxy.puppet_runonce(filters)
|
5
|
+
end
|
6
|
+
|
7
|
+
def to_s
|
8
|
+
"puppet runonce"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class PuppetEnable < Base
|
13
|
+
def remote_call
|
14
|
+
mco_proxy.puppet_enable(filters)
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
"puppet start"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class PuppetDisable < Base
|
23
|
+
def remote_call
|
24
|
+
mco_proxy.puppet_disable(filters)
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_s
|
28
|
+
"puppet stop"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|