foreman_ansible 7.1.1 → 7.1.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/views/foreman_ansible/job_templates/ansible_roles_-_install_from_git.erb +4 -1
- data/lib/foreman_ansible/register.rb.orig +257 -0
- data/lib/foreman_ansible/version.rb +1 -1
- data/webpack/components/AnsibleHostDetail/components/RolesTab/EditRolesModal/index.js +2 -1
- data/webpack/components/withLoading.js +7 -12
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ded4963f8ef2ac710b82d4ae1a6a20dceed5fbb577059981fab73fd07b61ad6a
|
|
4
|
+
data.tar.gz: fd300c47edc4ce921b1a8500c183b3757fd3cf4acf8fb7d9377eafda98bd17b4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b0717c5963bcabf982fdc647570e1a603dfb7794af517293bdd3f41d72e7158ad1ab8ad05930aa749f3ea8f79ab7f9ab20d3bd4de5568d12e79d25f8fdd83b0e
|
|
7
|
+
data.tar.gz: 9edde27d8e6503d55def1157329c5dd63195c0ca6d339694b5144c3578e435dbe0cb946f08efa13bd95e6ae24006b45abec0cd5099c56bf751d5c067b8cb9085
|
|
@@ -23,6 +23,9 @@ model: JobTemplate
|
|
|
23
23
|
---
|
|
24
24
|
- hosts: all
|
|
25
25
|
tasks:
|
|
26
|
-
-
|
|
26
|
+
- git:
|
|
27
|
+
repo: "<%= input('git_repository') %>"
|
|
28
|
+
dest: "<%= input('location') %>"
|
|
27
29
|
register: out
|
|
30
|
+
|
|
28
31
|
- debug: var=out
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Foreman::Plugin.register :foreman_ansible do
|
|
4
|
+
requires_foreman '>= 3.3'
|
|
5
|
+
|
|
6
|
+
settings do
|
|
7
|
+
category :ansible, N_('Ansible') do
|
|
8
|
+
setting 'ansible_ssh_private_key_file',
|
|
9
|
+
type: :string,
|
|
10
|
+
description: N_('Use this to supply a path to an SSH Private Key '\
|
|
11
|
+
'that Ansible will use in lieu of a password '\
|
|
12
|
+
'Override with "ansible_ssh_private_key_file" '\
|
|
13
|
+
'host parameter'),
|
|
14
|
+
default: '',
|
|
15
|
+
full_name: N_('Private Key Path')
|
|
16
|
+
setting 'ansible_connection',
|
|
17
|
+
type: :string,
|
|
18
|
+
description: N_('Use this connection type by default when running '\
|
|
19
|
+
'Ansible playbooks. You can override this on hosts by '\
|
|
20
|
+
'adding a parameter "ansible_connection"'),
|
|
21
|
+
default: 'ssh',
|
|
22
|
+
full_name: N_('Connection type')
|
|
23
|
+
setting 'ansible_winrm_server_cert_validation',
|
|
24
|
+
type: :string,
|
|
25
|
+
description: N_('Enable/disable WinRM server certificate '\
|
|
26
|
+
'validation when running Ansible playbooks. You can override '\
|
|
27
|
+
'this on hosts by adding a parameter '\
|
|
28
|
+
'"ansible_winrm_server_cert_validation"'),
|
|
29
|
+
default: 'validate',
|
|
30
|
+
full_name: N_('WinRM cert Validation')
|
|
31
|
+
setting 'ansible_verbosity',
|
|
32
|
+
type: :integer,
|
|
33
|
+
description: N_('Foreman will add this level of verbosity for '\
|
|
34
|
+
'additional debugging output when running Ansible playbooks.'),
|
|
35
|
+
default: '0',
|
|
36
|
+
full_name: N_('Default verbosity level'),
|
|
37
|
+
value: nil,
|
|
38
|
+
collection: proc {
|
|
39
|
+
{ '0' => N_('Disabled'),
|
|
40
|
+
'1' => N_('Level 1 (-v)'),
|
|
41
|
+
'2' => N_('Level 2 (-vv)'),
|
|
42
|
+
'3' => N_('Level 3 (-vvv)'),
|
|
43
|
+
'4' => N_('Level 4 (-vvvv)') }
|
|
44
|
+
}
|
|
45
|
+
setting 'ansible_post_provision_timeout',
|
|
46
|
+
type: :integer,
|
|
47
|
+
description: N_('Timeout (in seconds) to set when Foreman will trigger a '\
|
|
48
|
+
'play Ansible roles task after a host is fully provisioned. '\
|
|
49
|
+
'Set this to the maximum time you expect a host to take '\
|
|
50
|
+
'until it is ready after a reboot.'),
|
|
51
|
+
default: '360',
|
|
52
|
+
full_name: N_('Post-provision timeout')
|
|
53
|
+
setting 'ansible_interval',
|
|
54
|
+
type: :integer,
|
|
55
|
+
description: N_('Timeout (in minutes) when hosts should have reported.'),
|
|
56
|
+
default: '30',
|
|
57
|
+
full_name: N_('Ansible report timeout')
|
|
58
|
+
setting 'ansible_out_of_sync_disabled',
|
|
59
|
+
type: :boolean,
|
|
60
|
+
description: format(N_('Disable host configuration status turning to out of'\
|
|
61
|
+
' sync for %{cfgmgmt} after report does not arrive within'\
|
|
62
|
+
' configured interval'), :cfgmgmt => 'Ansible'),
|
|
63
|
+
default: false,
|
|
64
|
+
full_name: format(N_('%{cfgmgmt} out of sync disabled'), :cfgmgmt => 'Ansible')
|
|
65
|
+
setting 'ansible_inventory_template',
|
|
66
|
+
type: :string,
|
|
67
|
+
description: N_('Foreman will use this template to schedule the report '\
|
|
68
|
+
'with Ansible inventory'),
|
|
69
|
+
default: 'Ansible - Ansible Inventory',
|
|
70
|
+
full_name: N_('Default Ansible inventory report template')
|
|
71
|
+
setting 'ansible_roles_to_ignore',
|
|
72
|
+
type: :array,
|
|
73
|
+
description: N_('Those roles will be excluded when importing roles from smart proxy, '\
|
|
74
|
+
'The expected input is comma separated values and you can use * wildcard metacharacters'\
|
|
75
|
+
'For example: foo*, *b*,*bar'),
|
|
76
|
+
default: [],
|
|
77
|
+
full_name: N_('Ansible roles to ignore')
|
|
78
|
+
setting 'foreman_ansible_proxy_batch_size',
|
|
79
|
+
type: :integer,
|
|
80
|
+
description: N_('Number of tasks which should be sent to the smart proxy in one request, '\
|
|
81
|
+
'if foreman_tasks_proxy_batch_trigger is enabled. '\
|
|
82
|
+
'If set, overrides foreman_tasks_proxy_batch_size setting for Ansible jobs.'),
|
|
83
|
+
default: nil,
|
|
84
|
+
full_name: N_('Proxy tasks batch size for Ansible')
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
security_block :foreman_ansible do
|
|
89
|
+
permission :play_roles_on_host,
|
|
90
|
+
{ :hosts => [:play_roles, :multiple_play_roles],
|
|
91
|
+
:'api/v2/hosts' => [:play_roles,
|
|
92
|
+
:multiple_play_roles] },
|
|
93
|
+
:resource_type => 'Host'
|
|
94
|
+
permission :play_roles_on_hostgroup,
|
|
95
|
+
{ :hostgroups => [:play_roles],
|
|
96
|
+
:'api/v2/hostgroups' => [:play_roles,
|
|
97
|
+
:multiple_play_roles] },
|
|
98
|
+
:resource_type => 'Hostgroup'
|
|
99
|
+
permission :view_ansible_roles,
|
|
100
|
+
{ :ansible_roles => [:index, :auto_complete_search],
|
|
101
|
+
:'api/v2/ansible_roles' => [:index, :show, :fetch],
|
|
102
|
+
:ui_ansible_roles => [:index] },
|
|
103
|
+
:resource_type => 'AnsibleRole'
|
|
104
|
+
permission :destroy_ansible_roles,
|
|
105
|
+
{ :ansible_roles => [:destroy],
|
|
106
|
+
:'api/v2/ansible_roles' => [:destroy, :obsolete] },
|
|
107
|
+
:resource_type => 'AnsibleRole'
|
|
108
|
+
permission :import_ansible_roles,
|
|
109
|
+
{ :ansible_roles => [:import, :confirm_import],
|
|
110
|
+
:'api/v2/ansible_roles' => [:import, :sync] },
|
|
111
|
+
:resource_type => 'AnsibleRole'
|
|
112
|
+
permission :view_ansible_variables,
|
|
113
|
+
{
|
|
114
|
+
:lookup_values => [:index],
|
|
115
|
+
:ansible_variables => [:index, :auto_complete_search],
|
|
116
|
+
:'api/v2/ansible_variables' => [:index, :show]
|
|
117
|
+
},
|
|
118
|
+
:resource_type => 'AnsibleVariable'
|
|
119
|
+
permission :edit_ansible_variables,
|
|
120
|
+
{ :lookup_values => [:update],
|
|
121
|
+
:ansible_variables => [:edit, :update],
|
|
122
|
+
:'api/v2/ansible_variables' => [:update],
|
|
123
|
+
:'api/v2/ansible_override_values' => [:create, :destroy] },
|
|
124
|
+
:resource_type => 'AnsibleVariable'
|
|
125
|
+
permission :destroy_ansible_variables,
|
|
126
|
+
{
|
|
127
|
+
:lookup_values => [:destroy],
|
|
128
|
+
:ansible_variables => [:destroy],
|
|
129
|
+
:'api/v2/ansible_variables' => [:destroy, :obsolete]
|
|
130
|
+
},
|
|
131
|
+
:resource_type => 'AnsibleVariable'
|
|
132
|
+
permission :create_ansible_variables,
|
|
133
|
+
{
|
|
134
|
+
:lookup_values => [:create],
|
|
135
|
+
:ansible_variables => [:new, :create],
|
|
136
|
+
:'api/v2/ansible_variables' => [:create]
|
|
137
|
+
},
|
|
138
|
+
:resource_type => 'AnsibleVariable'
|
|
139
|
+
permission :import_ansible_variables,
|
|
140
|
+
{
|
|
141
|
+
:ansible_variables => [:import, :confirm_import],
|
|
142
|
+
:'api/v2/ansible_variables' => [:import]
|
|
143
|
+
},
|
|
144
|
+
:resource_type => 'AnsibleVariable'
|
|
145
|
+
permission :view_hosts,
|
|
146
|
+
{ :'api/v2/hosts' => [:ansible_roles],
|
|
147
|
+
:'api/v2/ansible_inventories' => [:hosts] },
|
|
148
|
+
:resource_type => 'Host'
|
|
149
|
+
permission :view_hostgroups,
|
|
150
|
+
{ :'api/v2/hostgroups' => [:ansible_roles],
|
|
151
|
+
:'api/v2/ansible_inventories' => [:hostgroups] },
|
|
152
|
+
:resource_type => 'Hostgroup'
|
|
153
|
+
permission :edit_hosts,
|
|
154
|
+
{ :'api/v2/hosts' => [:assign_ansible_roles] },
|
|
155
|
+
:resource_type => 'Host'
|
|
156
|
+
permission :edit_hostgroups,
|
|
157
|
+
{ :'api/v2/hostgroups' => [:assign_ansible_roles] },
|
|
158
|
+
:resource_type => 'Hostgroup'
|
|
159
|
+
permission :generate_ansible_inventory,
|
|
160
|
+
{ :'api/v2/ansible_inventories' => [:schedule] }
|
|
161
|
+
permission :import_ansible_playbooks,
|
|
162
|
+
{ :'api/v2/ansible_playbooks' => [:sync, :fetch] }
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
role 'Ansible Roles Manager',
|
|
166
|
+
[:play_roles_on_host, :play_roles_on_hostgroup,
|
|
167
|
+
:create_job_invocations, :view_job_templates, # to allow the play_roles
|
|
168
|
+
:create_template_invocations, :view_smart_proxies, # ...
|
|
169
|
+
:view_ansible_roles, :destroy_ansible_roles,
|
|
170
|
+
:import_ansible_roles, :view_ansible_variables,
|
|
171
|
+
:create_ansible_variables, :import_ansible_variables,
|
|
172
|
+
:edit_ansible_variables, :destroy_ansible_variables, :import_ansible_playbooks]
|
|
173
|
+
|
|
174
|
+
role 'Ansible Tower Inventory Reader',
|
|
175
|
+
[:view_hosts, :view_hostgroups, :view_facts, :generate_report_templates, :generate_ansible_inventory,
|
|
176
|
+
:view_report_templates],
|
|
177
|
+
'Permissions required for the user which is used by Ansible Tower Dynamic Inventory Item'
|
|
178
|
+
|
|
179
|
+
add_all_permissions_to_default_roles
|
|
180
|
+
extend_template_helpers ForemanAnsible::RendererMethods
|
|
181
|
+
allowed_template_helpers :insights_remediation
|
|
182
|
+
|
|
183
|
+
base_role_assignment_params = { :ansible_role_ids => [],
|
|
184
|
+
:ansible_roles => [] }
|
|
185
|
+
parameter_filter Host::Managed, base_role_assignment_params.merge(:host_ansible_roles_attributes => {})
|
|
186
|
+
parameter_filter Hostgroup, base_role_assignment_params.merge(:hostgroup_ansible_roles_attributes => {})
|
|
187
|
+
|
|
188
|
+
register_global_js_file 'global'
|
|
189
|
+
|
|
190
|
+
extend_graphql_type :type => '::Types::Host' do
|
|
191
|
+
field :all_ansible_roles, ::Types::InheritedAnsibleRole.connection_type, :null => true, :method => :present_all_ansible_roles
|
|
192
|
+
field :own_ansible_roles, ::Types::AnsibleRole.connection_type, :null => true
|
|
193
|
+
field :available_ansible_roles, ::Types::AnsibleRole.connection_type, :null => true
|
|
194
|
+
field :ansible_variables_with_overrides, Types::OverridenAnsibleVariable.connection_type, :null => false
|
|
195
|
+
|
|
196
|
+
def present_all_ansible_roles
|
|
197
|
+
inherited_ansible_roles = object.inherited_ansible_roles.map { |role| ::Presenters::AnsibleRolePresenter.new(role, true) }
|
|
198
|
+
ansible_roles = object.ansible_roles.map { |role| ::Presenters::AnsibleRolePresenter.new(role, false) }
|
|
199
|
+
(inherited_ansible_roles + ansible_roles).uniq
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def ansible_variables_with_overrides
|
|
203
|
+
resolver = ::ForemanAnsible::OverrideResolver.new(object)
|
|
204
|
+
AnsibleVariable.where(:ansible_role_id => object.all_ansible_roles.pluck(:id), :override => true).map { |variable| ::Presenters::OverridenAnsibleVariablePresenter.new variable, resolver }
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
register_graphql_query_field :ansible_roles, '::Types::AnsibleRole', :collection_field
|
|
209
|
+
register_graphql_mutation_field :assign_ansible_roles, '::Mutations::Hosts::AssignAnsibleRoles'
|
|
210
|
+
register_graphql_mutation_field :delete_ansible_variable_override, ::Mutations::AnsibleVariableOverrides::Delete
|
|
211
|
+
register_graphql_mutation_field :update_ansible_variable_override, ::Mutations::AnsibleVariableOverrides::Update
|
|
212
|
+
register_graphql_mutation_field :create_ansible_variable_override, ::Mutations::AnsibleVariableOverrides::Create
|
|
213
|
+
|
|
214
|
+
divider :top_menu, :caption => N_('Ansible'), :parent => :configure_menu
|
|
215
|
+
menu :top_menu, :ansible_roles,
|
|
216
|
+
:caption => N_('Roles'),
|
|
217
|
+
:url_hash => { :controller => :ansible_roles, :action => :index },
|
|
218
|
+
:parent => :configure_menu
|
|
219
|
+
menu :top_menu, :ansible_variables,
|
|
220
|
+
:caption => N_('Variables'),
|
|
221
|
+
:url_hash => { :controller => :ansible_variables, :action => :index },
|
|
222
|
+
:parent => :configure_menu
|
|
223
|
+
|
|
224
|
+
apipie_documented_controllers [
|
|
225
|
+
"#{ForemanAnsible::Engine.root}/app/controllers/api/v2/*.rb"
|
|
226
|
+
]
|
|
227
|
+
ApipieDSL.configuration.dsl_classes_matchers += [
|
|
228
|
+
"#{ForemanAnsible::Engine.root}/app/models/*.rb",
|
|
229
|
+
"#{ForemanAnsible::Engine.root}/app/services/foreman_ansible/*.rb"
|
|
230
|
+
]
|
|
231
|
+
|
|
232
|
+
register_info_provider ForemanAnsible::AnsibleInfo
|
|
233
|
+
|
|
234
|
+
# For backwards compatiblity with 1.17
|
|
235
|
+
if respond_to?(:register_report_scanner)
|
|
236
|
+
register_report_scanner ForemanAnsible::AnsibleReportScanner
|
|
237
|
+
register_report_origin 'Ansible', 'ConfigReport'
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
<<<<<<< HEAD
|
|
241
|
+
describe_host do
|
|
242
|
+
multiple_actions_provider :ansible_hosts_multiple_actions
|
|
243
|
+
=======
|
|
244
|
+
extend_page('smart_proxies/show') do |context|
|
|
245
|
+
context.add_pagelet :smart_proxy_title_actions,
|
|
246
|
+
:name => _('Update Smart Proxy'),
|
|
247
|
+
:partial => 'foreman/smart_proxies/update_smart_proxy',
|
|
248
|
+
:onlyif => ->(proxy, view) { view.can_update_proxy?(proxy) }
|
|
249
|
+
end
|
|
250
|
+
extend_page('smart_proxies/index') do |context|
|
|
251
|
+
context.add_pagelet :smart_proxy_title_actions,
|
|
252
|
+
:name => _('Update Smart Proxy'),
|
|
253
|
+
:partial => 'foreman/smart_proxies/update_smart_proxy',
|
|
254
|
+
:onlyif => ->(proxy, view) { view.can_update_proxy?(proxy) }
|
|
255
|
+
>>>>>>> a707dab (Fixes #35143 - Add a smart proxy update button)
|
|
256
|
+
end
|
|
257
|
+
end
|
|
@@ -54,6 +54,7 @@ const EditRolesModal = ({
|
|
|
54
54
|
|
|
55
55
|
const renameData = data => ({
|
|
56
56
|
availableRoles: data.host.availableAnsibleRoles.nodes,
|
|
57
|
+
assignedRoles,
|
|
57
58
|
});
|
|
58
59
|
|
|
59
60
|
return (
|
|
@@ -64,7 +65,7 @@ const EditRolesModal = ({
|
|
|
64
65
|
baseModalProps={baseModalProps}
|
|
65
66
|
fetchFn={useFetchFn}
|
|
66
67
|
renameData={renameData}
|
|
67
|
-
renamedDataPath="availableRoles"
|
|
68
|
+
renamedDataPath="availableRoles.assignedRoles"
|
|
68
69
|
assignedRoles={assignedRoles}
|
|
69
70
|
closeModal={closeModal}
|
|
70
71
|
hostId={hostId}
|
|
@@ -13,14 +13,12 @@ import {
|
|
|
13
13
|
} from '../permissionsHelper';
|
|
14
14
|
import ErrorState from './ErrorState';
|
|
15
15
|
|
|
16
|
-
const
|
|
16
|
+
const getResultsLength = (data, path) => {
|
|
17
17
|
const split = path.split('.');
|
|
18
|
-
return split.reduce(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
throw new Error('Unexpected empty segment in response data path');
|
|
23
|
-
}, data);
|
|
18
|
+
return split.reduce(
|
|
19
|
+
(prevValue, currentValue) => prevValue + data[currentValue]?.length || 0,
|
|
20
|
+
0
|
|
21
|
+
);
|
|
24
22
|
};
|
|
25
23
|
|
|
26
24
|
const withLoading = Component => {
|
|
@@ -79,12 +77,9 @@ const withLoading = Component => {
|
|
|
79
77
|
}
|
|
80
78
|
|
|
81
79
|
const renamedData = renameData(data);
|
|
82
|
-
const
|
|
80
|
+
const resultLength = getResultsLength(renamedData, renamedDataPath);
|
|
83
81
|
|
|
84
|
-
if (
|
|
85
|
-
showEmptyState &&
|
|
86
|
-
((Array.isArray(result) && result.length === 0) || !result)
|
|
87
|
-
) {
|
|
82
|
+
if (showEmptyState && !resultLength) {
|
|
88
83
|
return emptyWrapper(
|
|
89
84
|
<EmptyState
|
|
90
85
|
{...{
|
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: 7.1.
|
|
4
|
+
version: 7.1.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: 2022-
|
|
11
|
+
date: 2022-08-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: acts_as_list
|
|
@@ -224,6 +224,7 @@ files:
|
|
|
224
224
|
- lib/foreman_ansible.rb
|
|
225
225
|
- lib/foreman_ansible/engine.rb
|
|
226
226
|
- lib/foreman_ansible/register.rb
|
|
227
|
+
- lib/foreman_ansible/register.rb.orig
|
|
227
228
|
- lib/foreman_ansible/remote_execution.rb
|
|
228
229
|
- lib/foreman_ansible/version.rb
|
|
229
230
|
- locale/Makefile
|