foreman_ansible 10.0.1 → 10.1.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/helpers/foreman_ansible/smart_proxies_helper.rb +38 -0
- data/app/views/foreman/smart_proxies/_update_smart_proxy.html.erb +1 -0
- data/app/views/foreman_ansible/job_templates/capsule_upgrade_-_ansible_default.erb +39 -3
- data/db/migrate/20221031114720_rename_capsule_upgrade_playbook.rb +21 -0
- data/lib/foreman_ansible/register.rb +13 -0
- data/lib/foreman_ansible/version.rb +1 -1
- data/test/graphql/queries/host_ansible_roles_query_test.rb +11 -8
- data/test/unit/ansible_provider_test.rb +3 -6
- data/test/unit/concerns/host_managed_extensions_test.rb +6 -6
- data/test/unit/concerns/hostgroup_extensions_test.rb +8 -8
- data/webpack/components/AnsibleHostDetail/components/JobsTab/NewRecurringJobHelper.js +4 -4
- data/webpack/components/AnsibleHostDetail/components/JobsTab/NewRecurringJobModal.js +30 -4
- data/webpack/components/AnsibleHostDetail/components/JobsTab/NewRecurringJobModal.scss +9 -2
- data/webpack/components/AnsibleHostDetail/components/RolesTab/AllRolesModal/index.js +1 -1
- data/webpack/components/AnsibleHostDetail/components/RolesTab/EditRolesModal/index.js +1 -1
- metadata +24 -62
- data/locale/ca/foreman_ansible.edit.po +0 -1162
- data/locale/ca/foreman_ansible.po.time_stamp +0 -0
- data/locale/cs_CZ/foreman_ansible.edit.po +0 -1207
- data/locale/cs_CZ/foreman_ansible.po.time_stamp +0 -0
- data/locale/de/foreman_ansible.edit.po +0 -1148
- data/locale/de/foreman_ansible.po.time_stamp +0 -0
- data/locale/en/foreman_ansible.edit.po +0 -1146
- data/locale/en/foreman_ansible.po.time_stamp +0 -0
- data/locale/en_GB/foreman_ansible.edit.po +0 -1155
- data/locale/en_GB/foreman_ansible.po.time_stamp +0 -0
- data/locale/es/foreman_ansible.edit.po +0 -1148
- data/locale/es/foreman_ansible.po.time_stamp +0 -0
- data/locale/fr/foreman_ansible.edit.po +0 -1148
- data/locale/fr/foreman_ansible.po.time_stamp +0 -0
- data/locale/gl/foreman_ansible.edit.po +0 -1156
- data/locale/gl/foreman_ansible.po.time_stamp +0 -0
- data/locale/it/foreman_ansible.edit.po +0 -1148
- data/locale/it/foreman_ansible.po.time_stamp +0 -0
- data/locale/ja/foreman_ansible.edit.po +0 -1148
- data/locale/ja/foreman_ansible.po.time_stamp +0 -0
- data/locale/ko/foreman_ansible.edit.po +0 -1148
- data/locale/ko/foreman_ansible.po.time_stamp +0 -0
- data/locale/nl_NL/foreman_ansible.edit.po +0 -1168
- data/locale/nl_NL/foreman_ansible.po.time_stamp +0 -0
- data/locale/pl/foreman_ansible.edit.po +0 -1180
- data/locale/pl/foreman_ansible.po.time_stamp +0 -0
- data/locale/pt_BR/foreman_ansible.edit.po +0 -1148
- data/locale/pt_BR/foreman_ansible.po.time_stamp +0 -0
- data/locale/ru/foreman_ansible.edit.po +0 -1149
- data/locale/ru/foreman_ansible.po.time_stamp +0 -0
- data/locale/sv_SE/foreman_ansible.edit.po +0 -1180
- data/locale/sv_SE/foreman_ansible.po.time_stamp +0 -0
- data/locale/zh_CN/foreman_ansible.edit.po +0 -1148
- data/locale/zh_CN/foreman_ansible.po.time_stamp +0 -0
- data/locale/zh_TW/foreman_ansible.edit.po +0 -1148
- data/locale/zh_TW/foreman_ansible.po.time_stamp +0 -0
- data/test/unit/actions/run_ansible_job_test.rb +0 -0
- data/test/unit/actions/run_proxy_ansible_command_test.rb +0 -0
- data/webpack/components/AnsibleHostDetail/components/JobsTab/PreviousJobsTable.js.orig +0 -151
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f66c95bc367d1265d1be106e25a63a8fcfae2b95fd8d209f683c260c8d0d3647
|
|
4
|
+
data.tar.gz: cfad57982a9e2cf39324caf14f656df50148cd451dba92e963cbd54dd22a8875
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 340ab3cb55ecc5c54eb76f483e5e6b24e677831488dad250fd4c4b58ac33f37c7cdd27445246a95594d5f17db091e2df3445f3266c97dbd26dba34ecc88879ab
|
|
7
|
+
data.tar.gz: f50cb95108f5809cc30b8fdb6627b041d3261949c98fe15e149cef799e5e98ddea3955b39d642de6f1625817ce5e2e1e7e3314b3e59c6e6cb7788e8c59ad0fe3
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module ForemanAnsible
|
|
2
|
+
module SmartProxiesHelper
|
|
3
|
+
def can_update_proxy?(proxy)
|
|
4
|
+
hosts = proxy.smart_proxy_hosts
|
|
5
|
+
|
|
6
|
+
return if !can_schedule_jobs? ||
|
|
7
|
+
hosts.empty? ||
|
|
8
|
+
!hosts.all? { |host| can_execute_on_host?(host) }
|
|
9
|
+
|
|
10
|
+
begin
|
|
11
|
+
version = proxy.statuses[:version].version
|
|
12
|
+
rescue Foreman::Exception
|
|
13
|
+
return false
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
foreman_version = Foreman::Version.new
|
|
17
|
+
proxy_version = Foreman::Version.new(version['version'])
|
|
18
|
+
|
|
19
|
+
foreman_major = foreman_version.major.to_i
|
|
20
|
+
foreman_minor = foreman_version.minor.to_i
|
|
21
|
+
|
|
22
|
+
proxy_major = proxy_version.major.to_i
|
|
23
|
+
proxy_minor = proxy_version.minor.to_i
|
|
24
|
+
|
|
25
|
+
foreman_major > proxy_major ||
|
|
26
|
+
(foreman_major == proxy_major && foreman_minor > proxy_minor)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def proxy_update_button(proxy)
|
|
30
|
+
feature = RemoteExecutionFeature.feature(:ansible_run_capsule_upgrade)
|
|
31
|
+
return if feature.nil?
|
|
32
|
+
|
|
33
|
+
path = new_job_invocation_path(:host_ids => proxy.infrastructure_host_facets.pluck(:host_id),
|
|
34
|
+
:feature => feature.label)
|
|
35
|
+
link_to(_('Upgrade'), path)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= proxy_update_button(subject) %>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<%#
|
|
2
|
-
name:
|
|
2
|
+
name: Smart Proxy Upgrade Playbook
|
|
3
3
|
snippet: false
|
|
4
4
|
template_inputs:
|
|
5
5
|
- name: target_version
|
|
6
|
-
required:
|
|
6
|
+
required: false
|
|
7
7
|
input_type: user
|
|
8
8
|
advanced: false
|
|
9
9
|
value_type: plain
|
|
@@ -24,6 +24,9 @@ feature: ansible_run_capsule_upgrade
|
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
- hosts: all
|
|
27
|
+
vars:
|
|
28
|
+
target_version: "<%= input('target_version').present? ? input('target_version') : product_short_version %>"
|
|
29
|
+
<% if plugin_present?('foreman_theme_satellite') -%>
|
|
27
30
|
tasks:
|
|
28
31
|
- name: Gather the rpm package facts
|
|
29
32
|
package_facts:
|
|
@@ -44,7 +47,7 @@ feature: ansible_run_capsule_upgrade
|
|
|
44
47
|
"--whitelist=#{input('whitelist_options')}"
|
|
45
48
|
end -%>
|
|
46
49
|
- name: Upgrade Capsule server using satellite-maintain
|
|
47
|
-
shell: satellite-maintain upgrade run --assumeyes --target-version
|
|
50
|
+
shell: satellite-maintain upgrade run --assumeyes --target-version={{ target_version }} <%= whitelist_option %>
|
|
48
51
|
register: result
|
|
49
52
|
|
|
50
53
|
- name: Re-Gather the rpm package facts after the upgrade
|
|
@@ -71,3 +74,36 @@ feature: ansible_run_capsule_upgrade
|
|
|
71
74
|
- name: satellite-maintain upgrade return code is non-zero
|
|
72
75
|
fail:
|
|
73
76
|
msg: "Failed! Capsule server upgrade failed. See /var/log/foreman-installer/capsule.log in the Capsule server for more information"
|
|
77
|
+
<% else -%>
|
|
78
|
+
tasks:
|
|
79
|
+
- name: Gather the rpm package facts
|
|
80
|
+
package_facts:
|
|
81
|
+
manager: auto
|
|
82
|
+
|
|
83
|
+
- name: Fail if the target server is a Foreman server
|
|
84
|
+
fail:
|
|
85
|
+
msg: "This playbook cannot be executed on a Foreman server. Use only on a Smart Proxy server."
|
|
86
|
+
when: "'foreman' in ansible_facts.packages"
|
|
87
|
+
|
|
88
|
+
- name: Install foreman release gpg key
|
|
89
|
+
rpm_key:
|
|
90
|
+
state: present
|
|
91
|
+
key: http://yum.theforeman.org/releases/{{ target_version }}/RPM-GPG-KEY-foreman
|
|
92
|
+
when: target_version != "nightly"
|
|
93
|
+
|
|
94
|
+
- name: Update foreman repositories
|
|
95
|
+
package:
|
|
96
|
+
name: https://yum.theforeman.org/releases/{{ target_version }}/el{{ ansible_distribution_major_version }}/{{ ansible_architecture }}/foreman-release.rpm
|
|
97
|
+
state: installed
|
|
98
|
+
|
|
99
|
+
- name: Clean yum metadata
|
|
100
|
+
command: yum clean all
|
|
101
|
+
|
|
102
|
+
- name: Update all packages
|
|
103
|
+
package:
|
|
104
|
+
name: '*'
|
|
105
|
+
state: latest
|
|
106
|
+
|
|
107
|
+
- name: Run the installer
|
|
108
|
+
shell: foreman-installer
|
|
109
|
+
<% end -%>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
class RenameCapsuleUpgradePlaybook < ActiveRecord::Migration[6.0]
|
|
2
|
+
MAPPING = {
|
|
3
|
+
'Capsule Upgrade Playbook' => 'Smart Proxy Upgrade Playbook'
|
|
4
|
+
}.freeze
|
|
5
|
+
|
|
6
|
+
def up
|
|
7
|
+
rename(MAPPING)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def down
|
|
11
|
+
rename(MAPPING.invert)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def rename(mapping)
|
|
17
|
+
mapping.each do |old, new|
|
|
18
|
+
Template.where(name: old).update_all(name: new)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -244,4 +244,17 @@ Foreman::Plugin.register :foreman_ansible do
|
|
|
244
244
|
describe_hostgroup do
|
|
245
245
|
hostgroup_actions_provider :ansible_hostgroups_actions
|
|
246
246
|
end
|
|
247
|
+
|
|
248
|
+
extend_page('smart_proxies/show') do |context|
|
|
249
|
+
context.add_pagelet :smart_proxy_title_actions,
|
|
250
|
+
:name => _('Update Smart Proxy'),
|
|
251
|
+
:partial => 'foreman/smart_proxies/update_smart_proxy',
|
|
252
|
+
:onlyif => ->(proxy, view) { view.can_update_proxy?(proxy) }
|
|
253
|
+
end
|
|
254
|
+
extend_page('smart_proxies/index') do |context|
|
|
255
|
+
context.add_pagelet :smart_proxy_title_actions,
|
|
256
|
+
:name => _('Update Smart Proxy'),
|
|
257
|
+
:partial => 'foreman/smart_proxies/update_smart_proxy',
|
|
258
|
+
:onlyif => ->(proxy, view) { view.can_update_proxy?(proxy) }
|
|
259
|
+
end
|
|
247
260
|
end
|
|
@@ -37,13 +37,15 @@ module Queries
|
|
|
37
37
|
let(:data) { result['data']['host']['allAnsibleRoles'] }
|
|
38
38
|
|
|
39
39
|
it 'allows to fetch inherited roles' do
|
|
40
|
-
|
|
40
|
+
assert_equal 2, data['totalCount']
|
|
41
|
+
|
|
41
42
|
r1_data = data['nodes'].first
|
|
42
43
|
r2_data = data['nodes'].second
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
|
|
45
|
+
assert_equal role1.name, r1_data['name']
|
|
46
|
+
assert r1_data['inherited']
|
|
47
|
+
assert_equal role2.name, r2_data['name']
|
|
48
|
+
assert_not r2_data['inherited']
|
|
47
49
|
end
|
|
48
50
|
|
|
49
51
|
it 'allow fetching variables' do
|
|
@@ -52,9 +54,10 @@ module Queries
|
|
|
52
54
|
FactoryBot.create(:ansible_variable, ansible_role: role2, override: true)
|
|
53
55
|
r1_vars = data['nodes'].first['ansibleVariables']
|
|
54
56
|
r2_vars = data['nodes'].second['ansibleVariables']
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
|
|
58
|
+
assert_equal 2, r1_vars['totalCount']
|
|
59
|
+
assert_equal 1, r2_vars['totalCount']
|
|
60
|
+
assert_equal var1.key, r1_vars['nodes'].first['key']
|
|
58
61
|
end
|
|
59
62
|
end
|
|
60
63
|
end
|
|
@@ -19,11 +19,8 @@ class AnsibleProviderTest < ActiveSupport::TestCase
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
context 'when it is using the ansible_run_host feature' do
|
|
22
|
-
let(:rex_feature) do
|
|
23
|
-
RemoteExecutionFeature.where(:label => 'ansible_run_host').first
|
|
24
|
-
end
|
|
25
|
-
|
|
26
22
|
it 'has remote_execution_command false' do
|
|
23
|
+
rex_feature = RemoteExecutionFeature.where(:label => 'ansible_run_host', :name => 'Run Ansible roles').first_or_create
|
|
27
24
|
template_invocation.template.remote_execution_features << rex_feature
|
|
28
25
|
assert_not command_options[:remote_execution_command]
|
|
29
26
|
end
|
|
@@ -51,12 +48,12 @@ class AnsibleProviderTest < ActiveSupport::TestCase
|
|
|
51
48
|
describe '#proxy_batch_size' do
|
|
52
49
|
it 'returns integer if setting is string' do
|
|
53
50
|
Setting.expects(:[]).with('foreman_ansible_proxy_batch_size').returns('10')
|
|
54
|
-
|
|
51
|
+
assert_equal 10, ForemanAnsible::AnsibleProvider.proxy_batch_size
|
|
55
52
|
end
|
|
56
53
|
|
|
57
54
|
it 'returns nil if setting is empty' do
|
|
58
55
|
Setting.expects(:[]).with('foreman_ansible_proxy_batch_size').returns('')
|
|
59
|
-
|
|
56
|
+
assert_nil ForemanAnsible::AnsibleProvider.proxy_batch_size
|
|
60
57
|
end
|
|
61
58
|
end
|
|
62
59
|
end
|
|
@@ -18,23 +18,23 @@ class HostManagedExtensionsTest < ActiveSupport::TestCase
|
|
|
18
18
|
|
|
19
19
|
describe '#all_ansible_roles' do
|
|
20
20
|
test 'returns assigned roles for host without a hostgroup' do
|
|
21
|
-
|
|
21
|
+
assert_equal [@role1], @host.all_ansible_roles
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
test 'returns assigned and inherited roles for host with a hostgroup' do
|
|
25
25
|
@host.hostgroup = @hostgroup
|
|
26
|
-
|
|
26
|
+
assert_equal [@role2, @role1], @host.all_ansible_roles
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
describe '#inherited_ansible_roles' do
|
|
31
31
|
test 'returns empty array for host without hostgroup' do
|
|
32
|
-
@host.inherited_ansible_roles
|
|
32
|
+
assert_equal [], @host.inherited_ansible_roles
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
test 'returns roles inherited from a hostgroup' do
|
|
36
36
|
@host.hostgroup = @hostgroup
|
|
37
|
-
|
|
37
|
+
assert_equal [@role2], @host.inherited_ansible_roles
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
@@ -54,13 +54,13 @@ class HostManagedExtensionsTest < ActiveSupport::TestCase
|
|
|
54
54
|
FactoryBot.create(:host_ansible_role, :ansible_role_id => @role1.id, :position => 1, :host_id => host.id)
|
|
55
55
|
FactoryBot.create(:host_ansible_role, :ansible_role_id => @role2.id, :position => 2, :host_id => host.id)
|
|
56
56
|
FactoryBot.create(:host_ansible_role, :ansible_role_id => @role3.id, :position => 0, :host_id => host.id)
|
|
57
|
-
|
|
57
|
+
assert_equal [@role3, @role1, @role2], host.ansible_roles
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
test 'should order hostgroup roles before host roles' do
|
|
61
61
|
host = FactoryBot.create(:host, :hostgroup => @hostgroup)
|
|
62
62
|
FactoryBot.create(:host_ansible_role, :ansible_role_id => @role1.id, :position => 0, :host_id => host.id)
|
|
63
|
-
|
|
63
|
+
assert_equal [@role2, @role1], host.all_ansible_roles
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
test 'should find hosts with role2' do
|
|
@@ -20,45 +20,45 @@ class HostgroupExtensionsTest < ActiveSupport::TestCase
|
|
|
20
20
|
describe '#all_ansible_roles' do
|
|
21
21
|
test 'returns assigned roles without any parent hostgroup' do
|
|
22
22
|
@hostgroup.host_ansible_roles
|
|
23
|
-
|
|
23
|
+
assert_equal [@role1, @role3], @hostgroup.all_ansible_roles
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
test 'returns assigned and inherited roles with from parent hostgroup' do
|
|
27
27
|
@hostgroup.parent = @hostgroup_parent
|
|
28
|
-
|
|
28
|
+
assert_equal [@role2, @role1, @role3], @hostgroup.all_ansible_roles
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
describe '#inherited_ansible_roles' do
|
|
33
33
|
test 'returns empty array for hostgroup without any parent' do
|
|
34
|
-
@hostgroup.inherited_ansible_roles
|
|
34
|
+
assert_equal [], @hostgroup.inherited_ansible_roles
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
test 'returns roles inherited from a chain of parents' do
|
|
38
38
|
@hostgroup.parent = @hostgroup_parent
|
|
39
|
-
|
|
39
|
+
assert_equal [@role2], @hostgroup.inherited_ansible_roles
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
describe '#inherited_and_own_ansible_roles' do
|
|
44
44
|
test 'returns only hostgroup roles' do
|
|
45
|
-
|
|
45
|
+
assert_equal [@role2], @hostgroup_parent.inherited_and_own_ansible_roles
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
test 'returns only hostgroup roles including inheritance' do
|
|
49
49
|
@hostgroup.parent = @hostgroup_parent
|
|
50
|
-
|
|
50
|
+
assert_equal [@role2, @role1], @hostgroup.inherited_and_own_ansible_roles
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
test 'should return ordered roles for hostgroup' do
|
|
55
55
|
@hostgroup.parent = @hostgroup_parent
|
|
56
|
-
|
|
56
|
+
assert_equal [@role2, @role1], @hostgroup.inherited_and_own_ansible_roles
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
describe '#cloned_ansibe_roles' do
|
|
60
60
|
test 'clone ansible roles from hostgroup parent' do
|
|
61
|
-
@hostgroup_parent.
|
|
61
|
+
assert_equal @hostgroup_parent.all_ansible_roles, @hostgroup_parent.clone.all_ansible_roles
|
|
62
62
|
end
|
|
63
63
|
end
|
|
64
64
|
|
|
@@ -19,12 +19,12 @@ export const rangeValidator = date => {
|
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
export const createValidationSchema = () => {
|
|
22
|
-
const
|
|
22
|
+
const required = __('Required field');
|
|
23
23
|
|
|
24
24
|
return Yup.object().shape({
|
|
25
|
-
repeat: Yup.string().required(
|
|
26
|
-
startTime: Yup.string().required(
|
|
27
|
-
startDate: Yup.string().required(
|
|
25
|
+
repeat: Yup.string().required(required),
|
|
26
|
+
startTime: Yup.string().required(required),
|
|
27
|
+
startDate: Yup.string().required(required),
|
|
28
28
|
});
|
|
29
29
|
};
|
|
30
30
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
+
import { useDispatch } from 'react-redux';
|
|
4
|
+
import { push } from 'connected-react-router';
|
|
3
5
|
import { Formik, Field as FormikField } from 'formik';
|
|
4
6
|
import { useMutation } from '@apollo/client';
|
|
5
7
|
import { translate as __ } from 'foremanReact/common/I18n';
|
|
@@ -33,6 +35,7 @@ import jobsQuery from '../../../../graphql/queries/recurringJobs.gql';
|
|
|
33
35
|
|
|
34
36
|
const NewRecurringJobModal = props => {
|
|
35
37
|
const { onClose, resourceId, resourceName } = props;
|
|
38
|
+
const dispatch = useDispatch();
|
|
36
39
|
|
|
37
40
|
const [callMutation] = useMutation(createJobInvocation, {
|
|
38
41
|
refetchQueries: [
|
|
@@ -81,10 +84,31 @@ const NewRecurringJobModal = props => {
|
|
|
81
84
|
actions.push(<Spinner key="spinner" size="lg" />);
|
|
82
85
|
}
|
|
83
86
|
|
|
87
|
+
const modalDescription = (
|
|
88
|
+
<>
|
|
89
|
+
{__('This job will run all the assigned Ansible roles.')}
|
|
90
|
+
<br />
|
|
91
|
+
{__('For more advanced scheduling options')}{' '}
|
|
92
|
+
<Button
|
|
93
|
+
variant="link"
|
|
94
|
+
isInline
|
|
95
|
+
onClick={() =>
|
|
96
|
+
dispatch(
|
|
97
|
+
push(`/job_invocations/new?host_ids%5B%5D=${resourceId}`)
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
key="schedule-job-action"
|
|
101
|
+
>
|
|
102
|
+
{__('view remote execution page.')}
|
|
103
|
+
</Button>
|
|
104
|
+
</>
|
|
105
|
+
);
|
|
106
|
+
|
|
84
107
|
return (
|
|
85
108
|
<Modal
|
|
86
|
-
variant={ModalVariant.
|
|
87
|
-
title=
|
|
109
|
+
variant={ModalVariant.small}
|
|
110
|
+
title={__('Schedule recurring Ansible roles job')}
|
|
111
|
+
description={modalDescription}
|
|
88
112
|
ouiaId="modal-recurring-ansible-run"
|
|
89
113
|
isOpen={props.isOpen}
|
|
90
114
|
className="foreman-modal modal-high"
|
|
@@ -103,14 +127,16 @@ const NewRecurringJobModal = props => {
|
|
|
103
127
|
<FormikField
|
|
104
128
|
name="startTime"
|
|
105
129
|
component={TimePickerField}
|
|
106
|
-
label="Start
|
|
130
|
+
label="Start time"
|
|
107
131
|
isRequired
|
|
108
132
|
is24Hour
|
|
133
|
+
width="250px"
|
|
134
|
+
menuAppendTo={() => document.body}
|
|
109
135
|
/>
|
|
110
136
|
<FormikField
|
|
111
137
|
name="startDate"
|
|
112
138
|
component={DatePickerField}
|
|
113
|
-
label="Start
|
|
139
|
+
label="Start date"
|
|
114
140
|
isRequired
|
|
115
141
|
validators={[rangeValidator]}
|
|
116
142
|
/>
|
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
z-index: 1040;
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
-
.modal-high {
|
|
6
|
-
height:
|
|
5
|
+
.foreman-modal.modal-high {
|
|
6
|
+
height: 50vh;
|
|
7
|
+
@media only screen and (max-height: 960px) {
|
|
8
|
+
height: 70vh;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.pf-c-form-control, .pf-c-date-picker, .pf-c-date-picker__input {
|
|
12
|
+
width: 250px
|
|
13
|
+
}
|
|
7
14
|
}
|
|
@@ -24,7 +24,7 @@ const AllRolesModal = ({ hostGlobalId, onClose, history }) => {
|
|
|
24
24
|
title: __('All assigned Ansible roles'),
|
|
25
25
|
disableFocusTrap: true,
|
|
26
26
|
description: __(
|
|
27
|
-
'This list consists of host assigned roles and group assigned roles. Group assigned roles will always be executed prior to host assigned roles'
|
|
27
|
+
'This list consists of host assigned roles and group assigned roles. Group assigned roles will always be executed prior to host assigned roles.'
|
|
28
28
|
),
|
|
29
29
|
};
|
|
30
30
|
|
|
@@ -28,7 +28,7 @@ const EditRolesModal = ({
|
|
|
28
28
|
title: __('Edit Ansible Roles'),
|
|
29
29
|
disableFocusTrap: true,
|
|
30
30
|
description: __(
|
|
31
|
-
'Add, remove or reorder host assigned Ansible roles. This host has also group assigned roles that are not displayed here and will always be executed prior to host assigned roles'
|
|
31
|
+
'Add, remove or reorder host assigned Ansible roles. This host has also group assigned roles that are not displayed here and will always be executed prior to host assigned roles.'
|
|
32
32
|
),
|
|
33
33
|
};
|
|
34
34
|
|