foreman_ansible 2.2.1 → 2.2.2
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/helpers/foreman_ansible/hosts_helper_extensions.rb +12 -7
- data/app/models/concerns/foreman_ansible/host_managed_extensions.rb +11 -0
- data/app/models/foreman_ansible/ansible_provider.rb +4 -0
- data/app/services/foreman_ansible/ansible_report_importer.rb +19 -0
- data/app/services/foreman_ansible/ansible_report_scanner.rb +1 -0
- data/app/services/foreman_ansible/inventory_creator.rb +2 -1
- data/app/views/foreman_ansible/ansible_roles/_hostgroup_ansible_roles_button.erb +8 -5
- data/app/views/foreman_ansible/job_templates/power_action_-_ansible_default.erb +0 -1
- data/lib/foreman_ansible/engine.rb +3 -0
- data/lib/foreman_ansible/version.rb +1 -1
- data/test/unit/concerns/host_managed_extensions_test.rb +11 -0
- data/test/unit/services/ansible_report_importer_test.rb +21 -0
- data/test/unit/services/inventory_creator_test.rb +2 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ade1f70967edc1792c611054dfb7cda66cc68f3
|
4
|
+
data.tar.gz: af7d9bf908aa6ee56899d7840d16fa1d04bed82a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 96a268265d406b5576b928f339684f0cff15f440d21ff8ea1fa9d0bae68fafb76624e313908568a653ebf85f56f38971d1b4b7226b817ca6e97d0dfdefd0f31d
|
7
|
+
data.tar.gz: 9d27e74f738166ce43b531ac69e7429c2725d9070cb6f302b557961ae05f3070766129f0ce24efa4aeff5ca810f5bc80f6d850d3680a505559dc1d459e027c29
|
@@ -6,7 +6,8 @@ module ForemanAnsible
|
|
6
6
|
module Overrides
|
7
7
|
def host_title_actions(*args)
|
8
8
|
host = args.first
|
9
|
-
if ansible_roles_present?(host)
|
9
|
+
if ansible_roles_present?(host) &&
|
10
|
+
User.current.can?(:create_job_invocations)
|
10
11
|
button = ansible_roles_button(host)
|
11
12
|
title_actions(button_group(button))
|
12
13
|
end
|
@@ -14,10 +15,14 @@ module ForemanAnsible
|
|
14
15
|
end
|
15
16
|
|
16
17
|
def multiple_actions
|
17
|
-
super
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
actions = super
|
19
|
+
if User.current.can?(:create_job_invocations) &&
|
20
|
+
User.current.can?(:play_roles_on_host)
|
21
|
+
actions += [[_('Play Ansible roles'),
|
22
|
+
multiple_play_roles_hosts_path,
|
23
|
+
false]]
|
24
|
+
end
|
25
|
+
actions
|
21
26
|
end
|
22
27
|
end
|
23
28
|
|
@@ -31,9 +36,9 @@ module ForemanAnsible
|
|
31
36
|
end
|
32
37
|
|
33
38
|
def ansible_roles_button(host)
|
34
|
-
|
39
|
+
display_link_if_authorized(
|
35
40
|
_('Run Ansible roles'),
|
36
|
-
|
41
|
+
hash_for_play_roles_host_path(:id => host.id),
|
37
42
|
:id => :ansible_roles_button,
|
38
43
|
:class => 'btn btn-default',
|
39
44
|
:'data-no-turbolink' => true
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'ipaddress'
|
1
2
|
module ForemanAnsible
|
2
3
|
# Relations to make Host::Managed 'have' ansible roles
|
3
4
|
module HostManagedExtensions
|
@@ -44,6 +45,16 @@ module ForemanAnsible
|
|
44
45
|
# rubocop:enable Metrics/AbcSize
|
45
46
|
end
|
46
47
|
# rubocop:enable Metrics/BlockLength
|
48
|
+
# Class methods we may need to override or add
|
49
|
+
module ClassMethods
|
50
|
+
def import_host(hostname, certname = nil, deprecated_proxy = nil)
|
51
|
+
host = super(hostname, certname, deprecated_proxy)
|
52
|
+
if IPAddress.valid?(hostname) && Nic::Interface.find_by(:ip => hostname)
|
53
|
+
host = Nic::Interface.find_by(:ip => hostname).host
|
54
|
+
end
|
55
|
+
host
|
56
|
+
end
|
57
|
+
end
|
47
58
|
end
|
48
59
|
end
|
49
60
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'ipaddress'
|
2
|
+
module ForemanAnsible
|
3
|
+
# Ensures Ansible reports from hosts where the IP was used, are assigned
|
4
|
+
# to the right hostname in Foreman
|
5
|
+
module AnsibleReportImporter
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
included do
|
8
|
+
def host
|
9
|
+
hostname = name.downcase
|
10
|
+
if AnsibleReportScanner.ansible_report?(raw['logs']) &&
|
11
|
+
IPAddress.valid?(hostname) &&
|
12
|
+
Nic::Interface.find_by(:ip => hostname)
|
13
|
+
@host = Nic::Interface.find_by(:ip => hostname).host
|
14
|
+
end
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -91,12 +91,13 @@ module ForemanAnsible
|
|
91
91
|
|
92
92
|
def remote_execution_options(host)
|
93
93
|
params = {
|
94
|
-
'
|
94
|
+
'ansible_become_user' => @template_invocation.effective_user,
|
95
95
|
'ansible_user' => host_setting(host, 'remote_execution_ssh_user'),
|
96
96
|
'ansible_ssh_pass' => rex_ssh_password(host),
|
97
97
|
'ansible_ssh_private_key_file' => ansible_or_rex_ssh_private_key(host),
|
98
98
|
'ansible_port' => host_setting(host, 'remote_execution_ssh_port')
|
99
99
|
}
|
100
|
+
params['ansible_become'] = true if params['ansible_become_user'].present?
|
100
101
|
# Backward compatibility for Ansible 1.x
|
101
102
|
params['ansible_ssh_port'] = params['ansible_port']
|
102
103
|
params['ansible_ssh_user'] = params['ansible_user']
|
@@ -5,9 +5,12 @@
|
|
5
5
|
display_link_if_authorized(_('Play Roles'), hash_for_play_roles_hostgroup_path(:id => hostgroup), :'data-no-turbolink' => true)
|
6
6
|
end
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
actions = [
|
9
|
+
display_link_if_authorized(_('Nest'), hash_for_nest_hostgroup_path(:id => hostgroup)),
|
10
|
+
display_link_if_authorized(_('Clone'), hash_for_clone_hostgroup_path(:id => hostgroup))
|
11
|
+
]
|
12
|
+
actions.push play_roles if User.current.can?(:create_job_invocations)
|
13
|
+
actions.push display_delete_if_authorized(hash_for_hostgroup_path(:id => hostgroup).merge(:auth_object => hostgroup, :authorizer => authorizer), :data => { :confirm => warning_message(hostgroup) })
|
14
|
+
|
15
|
+
action_buttons(*actions)
|
13
16
|
%>
|
@@ -104,6 +104,9 @@ module ForemanAnsible
|
|
104
104
|
::Api::V2::HostgroupsController.send(
|
105
105
|
:include, ForemanAnsible::Api::V2::HostgroupsParamGroupExtensions
|
106
106
|
)
|
107
|
+
::ConfigReportImporter.send(
|
108
|
+
:include, ForemanAnsible::AnsibleReportImporter
|
109
|
+
)
|
107
110
|
rescue StandardError => e
|
108
111
|
Rails.logger.warn "Foreman Ansible: skipping engine hook (#{e})"
|
109
112
|
end
|
@@ -34,4 +34,15 @@ class HostManagedExtensionsTest < ActiveSupport::TestCase
|
|
34
34
|
@host.inherited_ansible_roles.must_equal [@role2]
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
describe 'import facts' do
|
39
|
+
test 'when hostname looks like an IP it finds the right host' do
|
40
|
+
@host = ::FactoryBot.create(:host, :ip => '192.168.128.27')
|
41
|
+
assert_equal @host, Host::Managed.import_host(@host.ip)
|
42
|
+
end
|
43
|
+
|
44
|
+
test 'when hostname looks like an IP but there is no host with that IP' do
|
45
|
+
assert Host::Managed.import_host('192.168.128.27').new_record?
|
46
|
+
end
|
47
|
+
end
|
37
48
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test_plugin_helper'
|
2
|
+
# Unit tests for AnsibleReportImporter
|
3
|
+
# This class is just meant to capture the config reports coming
|
4
|
+
# from Ansible and change anything that is required
|
5
|
+
class AnsibleReportImporterTest < ActiveSupport::TestCase
|
6
|
+
setup do
|
7
|
+
@raw = { 'host' => '192.168.121.1' }
|
8
|
+
@importer = ::ConfigReportImporter.new(@raw)
|
9
|
+
end
|
10
|
+
|
11
|
+
test 'finds host when the hostname is given as the IP' do
|
12
|
+
host = ::FactoryBot.create(:host, :ip => @raw['host'])
|
13
|
+
ForemanAnsible::AnsibleReportScanner.expects(:ansible_report?).returns(true)
|
14
|
+
assert_equal @importer.host, host
|
15
|
+
end
|
16
|
+
|
17
|
+
test 'creates new host if IP is not found' do
|
18
|
+
ForemanAnsible::AnsibleReportScanner.expects(:ansible_report?).returns(true)
|
19
|
+
assert @importer.host.new_record?
|
20
|
+
end
|
21
|
+
end
|
@@ -52,8 +52,9 @@ module ForemanAnsible
|
|
52
52
|
@template_invocation)
|
53
53
|
connection_params = inventory.connection_params(@host)
|
54
54
|
assert_empty extra_options.to_a - inventory.connection_params(@host).to_a
|
55
|
+
assert_equal true, connection_params['ansible_become']
|
55
56
|
assert_equal @template_invocation.effective_user,
|
56
|
-
connection_params['
|
57
|
+
connection_params['ansible_become_user']
|
57
58
|
assert_equal Setting['ansible_connection'],
|
58
59
|
connection_params['ansible_connection']
|
59
60
|
refute_equal Setting['remote_execution_ssh_user'],
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_ansible
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Lobato Garcia
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-07-
|
11
|
+
date: 2018-07-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -127,6 +127,7 @@ files:
|
|
127
127
|
- app/overrides/hostgroup_ansible_roles_tab.rb
|
128
128
|
- app/overrides/hostgroup_play_roles.rb
|
129
129
|
- app/overrides/report_output.rb
|
130
|
+
- app/services/foreman_ansible/ansible_report_importer.rb
|
130
131
|
- app/services/foreman_ansible/ansible_report_scanner.rb
|
131
132
|
- app/services/foreman_ansible/api_roles_importer.rb
|
132
133
|
- app/services/foreman_ansible/fact_importer.rb
|
@@ -213,6 +214,7 @@ files:
|
|
213
214
|
- test/unit/lib/foreman_ansible_core/playbook_runner_test.rb
|
214
215
|
- test/unit/lib/foreman_ansible_core/roles_reader_test.rb
|
215
216
|
- test/unit/lib/proxy_api/ansible_test.rb
|
217
|
+
- test/unit/services/ansible_report_importer_test.rb
|
216
218
|
- test/unit/services/api_roles_importer_test.rb
|
217
219
|
- test/unit/services/fact_importer_test.rb
|
218
220
|
- test/unit/services/fact_parser_test.rb
|
@@ -270,6 +272,7 @@ test_files:
|
|
270
272
|
- test/unit/services/api_roles_importer_test.rb
|
271
273
|
- test/unit/services/structured_fact_importer_test.rb
|
272
274
|
- test/unit/services/fact_sparser_test.rb
|
275
|
+
- test/unit/services/ansible_report_importer_test.rb
|
273
276
|
- test/unit/actions/run_proxy_ansible_command_test.rb
|
274
277
|
- test/unit/actions/run_ansible_job_test.rb
|
275
278
|
- test/test_plugin_helper.rb
|