foreman_remote_execution 1.6.7 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/foreman_remote_execution/template_invocation.css.scss +1 -1
- data/app/lib/actions/remote_execution/run_host_job.rb +3 -4
- data/app/models/input_template_renderer.rb +1 -0
- data/app/models/job_invocation_composer.rb +5 -0
- data/app/models/remote_execution_provider.rb +11 -12
- data/app/models/setting/remote_execution.rb +0 -5
- data/app/models/targeting.rb +5 -1
- data/app/views/templates/ssh/puppet_agent_disable.erb +16 -0
- data/app/views/templates/ssh/puppet_agent_enable.erb +10 -0
- data/app/views/templates/ssh/puppet_install_modules_from_forge.erb +36 -0
- data/app/views/templates/ssh/puppet_install_modules_from_git.erb +21 -0
- data/db/migrate/20190111153330_remove_remote_execution_without_proxy_setting.rb +13 -0
- data/lib/foreman_remote_execution/version.rb +1 -1
- data/test/unit/job_invocation_composer_test.rb +16 -0
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dce0a20932dcc7a0f7f85b475d25881bf007b06cfc27534eee15687b102baad4
|
4
|
+
data.tar.gz: 2af8d0ae7541d622fc61e505b5a74f20cf3317e4f5b7ad44338319b5649eb317
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afaf649197e2ac98a5bf5df6c5e7e81a22b06f58d3326a737dcacd4f97a30286cfd787de3c61761f426544fdd7be2a8cd633d06e23cb71caa235e40c75186a77
|
7
|
+
data.tar.gz: 90c8a3b1dd576c05e0e3004023a2980a9d3352c055380b9e629b5495903d680d6912435ddf6039d0e38c532d8d0e28c027a0ae61174202b2ecb2124ec8c4cd0f
|
@@ -159,13 +159,12 @@ module Actions
|
|
159
159
|
raise n_('The only applicable proxy %{proxy_names} is down',
|
160
160
|
'All %{count} applicable proxies are down. Tried %{proxy_names}',
|
161
161
|
offline_proxies.count) % settings
|
162
|
-
elsif proxy == :not_defined
|
162
|
+
elsif proxy == :not_defined
|
163
163
|
settings = { :global_proxy => 'remote_execution_global_proxy',
|
164
|
-
:fallback_proxy => 'remote_execution_fallback_proxy'
|
165
|
-
:no_proxy => 'remote_execution_no_proxy' }
|
164
|
+
:fallback_proxy => 'remote_execution_fallback_proxy' }
|
166
165
|
|
167
166
|
raise _('Could not use any proxy. Consider configuring %{global_proxy}, ' +
|
168
|
-
'%{fallback_proxy}
|
167
|
+
'%{fallback_proxy} in settings') % settings
|
169
168
|
end
|
170
169
|
proxy
|
171
170
|
end
|
@@ -345,6 +345,11 @@ class JobInvocationComposer
|
|
345
345
|
job_invocation.key_passphrase = params[:key_passphrase]
|
346
346
|
job_invocation.sudo_password = params[:sudo_password]
|
347
347
|
|
348
|
+
if @reruns && job_invocation.targeting.static?
|
349
|
+
job_invocation.targeting.host_ids = JobInvocation.find(@reruns).targeting.host_ids
|
350
|
+
job_invocation.targeting.mark_resolved!
|
351
|
+
end
|
352
|
+
|
348
353
|
job_invocation.job_category = nil unless rerun_possible?
|
349
354
|
|
350
355
|
self
|
@@ -62,22 +62,21 @@ class RemoteExecutionProvider
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def find_ip_or_hostname(host)
|
65
|
-
interfaces = effective_interfaces
|
65
|
+
interfaces = effective_interfaces host
|
66
|
+
|
67
|
+
find_ip(host, interfaces) || find_fqdn(interfaces) || raise(_('Could not find any suitable interface for execution'))
|
68
|
+
end
|
69
|
+
|
70
|
+
def find_ip(host, interfaces)
|
66
71
|
if host_setting(host, :remote_execution_connect_by_ip)
|
67
|
-
|
68
|
-
end
|
69
|
-
if ip_interface
|
70
|
-
ip_interface.ip
|
71
|
-
else
|
72
|
-
fqdn_interface = interfaces.find { |i| i.fqdn.present? }
|
73
|
-
if fqdn_interface
|
74
|
-
fqdn_interface.fqdn
|
75
|
-
else
|
76
|
-
raise _('Could not find any suitable interface for execution')
|
77
|
-
end
|
72
|
+
interfaces.find { |i| i.ip.present? }.try(:ip)
|
78
73
|
end
|
79
74
|
end
|
80
75
|
|
76
|
+
def find_fqdn(interfaces)
|
77
|
+
interfaces.find { |i| i.fqdn.present? }.try(:fqdn)
|
78
|
+
end
|
79
|
+
|
81
80
|
def host_setting(host, setting)
|
82
81
|
host.host_param(setting.to_s) || Setting[setting]
|
83
82
|
end
|
@@ -20,11 +20,6 @@ class Setting::RemoteExecution < Setting
|
|
20
20
|
'organization or location.'),
|
21
21
|
true,
|
22
22
|
N_('Enable Global Proxy')),
|
23
|
-
self.set('remote_execution_without_proxy',
|
24
|
-
N_('When enabled, the remote execution will try to run the commands directly, when no
|
25
|
-
proxy with remote execution feature is configured for the host.'),
|
26
|
-
false,
|
27
|
-
N_('Fallback Without Proxy')),
|
28
23
|
self.set('remote_execution_ssh_user',
|
29
24
|
N_('Default user to use for SSH. You may override per host by setting a parameter called remote_execution_ssh_user.'),
|
30
25
|
'root',
|
data/app/models/targeting.rb
CHANGED
@@ -36,7 +36,7 @@ class Targeting < ApplicationRecord
|
|
36
36
|
raise ::Foreman::Exception, _('Cannot resolve hosts without a bookmark or search query') if bookmark.nil? && search_query.blank?
|
37
37
|
|
38
38
|
self.search_query = bookmark.query if dynamic? && bookmark.present?
|
39
|
-
|
39
|
+
mark_resolved!
|
40
40
|
self.validate!
|
41
41
|
# avoid validation of hosts objects - they will be loaded for no reason.
|
42
42
|
# pluck(:id) returns duplicate results for HostCollections
|
@@ -64,6 +64,10 @@ class Targeting < ApplicationRecord
|
|
64
64
|
self.resolved_at.present?
|
65
65
|
end
|
66
66
|
|
67
|
+
def mark_resolved!
|
68
|
+
self.resolved_at = Time.zone.now
|
69
|
+
end
|
70
|
+
|
67
71
|
private
|
68
72
|
|
69
73
|
def bookmark_or_query_is_present
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<%#
|
2
|
+
name: Puppet Agent Disable - SSH Default
|
3
|
+
model: JobTemplate
|
4
|
+
job_category: Puppet
|
5
|
+
description_format: Disable Puppet agent
|
6
|
+
snippet: false
|
7
|
+
template_inputs:
|
8
|
+
- name: comment
|
9
|
+
required: false
|
10
|
+
input_type: user
|
11
|
+
description: Reason for disabling the Puppet agent
|
12
|
+
advanced: false
|
13
|
+
provider_type: SSH
|
14
|
+
kind: job_template
|
15
|
+
-%>
|
16
|
+
puppet agent --disable "<%= input("comment").present? ? input("comment") : "Disabled using Foreman Remote Execution" %> - <%= current_user %> - $(date "+%d/%m/%Y %H:%M")"
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<%#
|
2
|
+
name: Puppet Module - Install from forge - SSH Default
|
3
|
+
model: JobTemplate
|
4
|
+
job_category: Puppet
|
5
|
+
description_format: Install Puppet Module "%{puppet_module}" from forge
|
6
|
+
snippet: false
|
7
|
+
template_inputs:
|
8
|
+
- name: puppet_module
|
9
|
+
required: true
|
10
|
+
input_type: user
|
11
|
+
description: Full name of the module, e.g. "puppetlabs-stdlib".
|
12
|
+
advanced: false
|
13
|
+
- name: target_dir
|
14
|
+
required: false
|
15
|
+
input_type: user
|
16
|
+
description: The directory into which modules are installed, defaults to production environment.
|
17
|
+
advanced: false
|
18
|
+
- name: version
|
19
|
+
required: false
|
20
|
+
input_type: user
|
21
|
+
description: Module version to install.
|
22
|
+
advanced: true
|
23
|
+
- name: force
|
24
|
+
required: false
|
25
|
+
input_type: user
|
26
|
+
description: Force overwrite of existing module, if any. Type "true" to force.
|
27
|
+
advanced: true
|
28
|
+
- name: ignore_dependencies
|
29
|
+
required: false
|
30
|
+
input_type: user
|
31
|
+
description: Do not attempt to install dependencies. Type "true" to ignore dependencies.
|
32
|
+
advanced: true
|
33
|
+
provider_type: SSH
|
34
|
+
kind: job_template
|
35
|
+
-%>
|
36
|
+
puppet module install <%= input('puppet_module') %> <%= "--target-dir #{input('target_dir')}" if input('target_dir').present? %> <%= "--version #{input('version')}" if input('version').present? %> <%= "--force" if input('force') == "true" %> <%= "--ignore-dependencies" if input('ignore_dependencies') == "true" %>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<%#
|
2
|
+
name: Puppet Module - Install from git - SSH Default
|
3
|
+
model: JobTemplate
|
4
|
+
job_category: Puppet
|
5
|
+
description_format: Install Puppet Module "%{puppet_module}" from git
|
6
|
+
snippet: false
|
7
|
+
template_inputs:
|
8
|
+
- name: git_repository
|
9
|
+
required: true
|
10
|
+
input_type: user
|
11
|
+
description: "URL to the git repository containing the module, e.g:\r\nhttps://github.com/theforeman/puppet-puppet"
|
12
|
+
advanced: false
|
13
|
+
- name: target_dir
|
14
|
+
required: true
|
15
|
+
input_type: user
|
16
|
+
description: For example, '/etc/puppetlabs/code/environments/production/modules/puppet'.
|
17
|
+
advanced: false
|
18
|
+
provider_type: SSH
|
19
|
+
kind: job_template
|
20
|
+
-%>
|
21
|
+
git clone <%= input('git_repository') %> <%= input('target_dir') %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class RemoveRemoteExecutionWithoutProxySetting < ActiveRecord::Migration[5.2]
|
2
|
+
def up
|
3
|
+
Setting.where(name: 'remote_execution_without_proxy').delete_all
|
4
|
+
end
|
5
|
+
|
6
|
+
def down
|
7
|
+
Setting.create!(:name => 'remote_execution_without_proxy',
|
8
|
+
:description => N_('When enabled, the remote execution will try to run '\
|
9
|
+
'the commands directly, when no proxy with remote execution '\
|
10
|
+
'feature is configured for the host.'),
|
11
|
+
:default => false, :full_name => N_('Fallback Without Proxy'))
|
12
|
+
end
|
13
|
+
end
|
@@ -796,4 +796,20 @@ class JobInvocationComposerTest < ActiveSupport::TestCase
|
|
796
796
|
end
|
797
797
|
end
|
798
798
|
end
|
799
|
+
|
800
|
+
describe '#from_job_invocation' do
|
801
|
+
let(:job_invocation) do
|
802
|
+
as_admin { FactoryBot.create(:job_invocation, :with_template, :with_task) }
|
803
|
+
end
|
804
|
+
|
805
|
+
before do
|
806
|
+
job_invocation.targeting.host_ids = job_invocation.template_invocations_host_ids
|
807
|
+
end
|
808
|
+
|
809
|
+
it 'marks targeting as resolved if static' do
|
810
|
+
created = JobInvocationComposer.from_job_invocation(job_invocation).job_invocation
|
811
|
+
assert created.targeting.resolved?
|
812
|
+
assert_equal job_invocation.template_invocations_host_ids, created.targeting.host_ids
|
813
|
+
end
|
814
|
+
end
|
799
815
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_remote_execution
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Foreman Remote Execution team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deface
|
@@ -271,6 +271,10 @@ files:
|
|
271
271
|
- app/views/templates/ssh/module_action.erb
|
272
272
|
- app/views/templates/ssh/package_action.erb
|
273
273
|
- app/views/templates/ssh/power_action.erb
|
274
|
+
- app/views/templates/ssh/puppet_agent_disable.erb
|
275
|
+
- app/views/templates/ssh/puppet_agent_enable.erb
|
276
|
+
- app/views/templates/ssh/puppet_install_modules_from_forge.erb
|
277
|
+
- app/views/templates/ssh/puppet_install_modules_from_git.erb
|
274
278
|
- app/views/templates/ssh/puppet_run_once.erb
|
275
279
|
- app/views/templates/ssh/run_command.erb
|
276
280
|
- app/views/templates/ssh/service_action.erb
|
@@ -314,6 +318,7 @@ files:
|
|
314
318
|
- db/migrate/20180202123215_add_feature_id_to_job_invocation.rb
|
315
319
|
- db/migrate/20180226095631_change_task_id_to_uuid.rb
|
316
320
|
- db/migrate/20180411160809_add_sudo_password_to_job_invocation.rb
|
321
|
+
- db/migrate/20190111153330_remove_remote_execution_without_proxy_setting.rb
|
317
322
|
- db/seeds.d/50-notification_blueprints.rb
|
318
323
|
- db/seeds.d/60-ssh_proxy_feature.rb
|
319
324
|
- db/seeds.d/70-job_templates.rb
|
@@ -409,7 +414,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
409
414
|
version: '0'
|
410
415
|
requirements: []
|
411
416
|
rubyforge_project:
|
412
|
-
rubygems_version: 2.7.
|
417
|
+
rubygems_version: 2.7.6
|
413
418
|
signing_key:
|
414
419
|
specification_version: 4
|
415
420
|
summary: A plugin bringing remote execution to the Foreman, completing the config
|