foreman_remote_execution 9.1.0 → 10.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release.yml +14 -0
  3. data/.tx/config +3 -1
  4. data/app/assets/javascripts/foreman_remote_execution/locale/de/foreman_remote_execution.js +1 -0
  5. data/app/assets/javascripts/foreman_remote_execution/locale/en/foreman_remote_execution.js +1 -0
  6. data/app/assets/javascripts/foreman_remote_execution/locale/en_GB/foreman_remote_execution.js +1 -0
  7. data/app/assets/javascripts/foreman_remote_execution/locale/es/foreman_remote_execution.js +1 -0
  8. data/app/assets/javascripts/foreman_remote_execution/locale/fr/foreman_remote_execution.js +1 -0
  9. data/app/assets/javascripts/foreman_remote_execution/locale/ja/foreman_remote_execution.js +1 -0
  10. data/app/assets/javascripts/foreman_remote_execution/locale/ko/foreman_remote_execution.js +1 -0
  11. data/app/assets/javascripts/foreman_remote_execution/locale/pt_BR/foreman_remote_execution.js +1 -0
  12. data/app/assets/javascripts/foreman_remote_execution/locale/ru/foreman_remote_execution.js +1 -0
  13. data/app/assets/javascripts/foreman_remote_execution/locale/zh_CN/foreman_remote_execution.js +1 -0
  14. data/app/assets/javascripts/foreman_remote_execution/locale/zh_TW/foreman_remote_execution.js +1 -0
  15. data/app/assets/javascripts/foreman_remote_execution/template_invocation.js +10 -1
  16. data/app/controllers/job_invocations_controller.rb +20 -1
  17. data/app/controllers/ui_job_wizard_controller.rb +0 -3
  18. data/app/lib/actions/remote_execution/run_host_job.rb +1 -1
  19. data/app/views/job_invocations/_form.html.erb +1 -1
  20. data/app/views/templates/script/run_command.erb +1 -0
  21. data/config/routes.rb +1 -0
  22. data/lib/foreman_remote_execution/engine.rb +8 -8
  23. data/lib/foreman_remote_execution/tasks/explain_proxy_selection.rake +12 -3
  24. data/lib/foreman_remote_execution/version.rb +1 -1
  25. data/locale/Makefile +6 -3
  26. data/locale/de/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  27. data/locale/de/foreman_remote_execution.po +53 -8
  28. data/locale/en/foreman_remote_execution.po +52 -7
  29. data/locale/en_GB/foreman_remote_execution.po +52 -7
  30. data/locale/es/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  31. data/locale/es/foreman_remote_execution.po +56 -11
  32. data/locale/foreman_remote_execution.pot +193 -126
  33. data/locale/fr/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  34. data/locale/fr/foreman_remote_execution.po +56 -11
  35. data/locale/ja/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  36. data/locale/ja/foreman_remote_execution.po +56 -11
  37. data/locale/ko/foreman_remote_execution.po +52 -7
  38. data/locale/pt_BR/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  39. data/locale/pt_BR/foreman_remote_execution.po +56 -11
  40. data/locale/ru/foreman_remote_execution.po +52 -7
  41. data/locale/zh_CN/LC_MESSAGES/foreman_remote_execution.mo +0 -0
  42. data/locale/zh_CN/foreman_remote_execution.po +56 -11
  43. data/locale/zh_TW/foreman_remote_execution.po +52 -7
  44. data/webpack/JobWizard/Footer.js +104 -0
  45. data/webpack/JobWizard/JobWizard.js +24 -16
  46. data/webpack/JobWizard/JobWizard.scss +6 -17
  47. data/webpack/JobWizard/JobWizardConstants.js +1 -1
  48. data/webpack/JobWizard/JobWizardPageRerun.js +2 -0
  49. data/webpack/JobWizard/__tests__/fixtures.js +8 -1
  50. data/webpack/JobWizard/__tests__/validation.test.js +9 -0
  51. data/webpack/JobWizard/steps/HostsAndInputs/HostPreviewModal.js +2 -0
  52. data/webpack/JobWizard/steps/HostsAndInputs/SelectedChips.js +28 -14
  53. data/webpack/JobWizard/steps/HostsAndInputs/__tests__/HostsAndInputs.test.js +3 -3
  54. data/webpack/JobWizard/steps/ReviewDetails/ReviewDetails.test.js +117 -0
  55. data/webpack/JobWizard/steps/ReviewDetails/helpers.js +43 -0
  56. data/webpack/JobWizard/steps/ReviewDetails/index.js +169 -18
  57. data/webpack/JobWizard/steps/Schedule/QueryType.js +1 -1
  58. data/webpack/JobWizard/steps/Schedule/RepeatHour.js +0 -1
  59. data/webpack/JobWizard/steps/Schedule/RepeatWeek.js +1 -1
  60. data/webpack/JobWizard/steps/Schedule/__tests__/Schedule.test.js +19 -5
  61. data/webpack/JobWizard/steps/form/DateTimePicker.js +0 -1
  62. data/webpack/JobWizard/steps/form/GroupedSelectField.js +0 -1
  63. data/webpack/JobWizard/steps/form/SelectField.js +0 -1
  64. data/webpack/react_app/components/RecentJobsCard/RecentJobsCard.js +4 -4
  65. data/webpack/react_app/components/RecentJobsCard/RecentJobsTable.js +2 -2
  66. data/webpack/react_app/components/RecentJobsCard/constants.js +2 -2
  67. data/webpack/react_app/components/RegistrationExtension/RexPull.js +0 -2
  68. metadata +21 -6
@@ -29,6 +29,9 @@ msgstr "%s назад"
29
29
  msgid "%s job has been invoked"
30
30
  msgstr ""
31
31
 
32
+ msgid "%s more"
33
+ msgstr ""
34
+
32
35
  msgid "%{description} on %{host}"
33
36
  msgstr "%{description} на %{host}"
34
37
 
@@ -38,9 +41,6 @@ msgstr ""
38
41
  msgid "'Starts before' date must in the future"
39
42
  msgstr ""
40
43
 
41
- msgid ", and %s more"
42
- msgstr ""
43
-
44
44
  msgid "...and %s more"
45
45
  msgstr ""
46
46
 
@@ -100,6 +100,9 @@ msgstr ""
100
100
  msgid "After"
101
101
  msgstr ""
102
102
 
103
+ msgid "After %s occurences"
104
+ msgstr ""
105
+
103
106
  msgid "All fields are required."
104
107
  msgstr ""
105
108
 
@@ -157,7 +160,7 @@ msgstr "bookmark_id и search_query не могут использоваться
157
160
  msgid "Categories list failed with:"
158
161
  msgstr ""
159
162
 
160
- msgid "Category and Template"
163
+ msgid "Category and template"
161
164
  msgstr ""
162
165
 
163
166
  msgid "Choose a job template that is pre-selected in job invocation form"
@@ -169,7 +172,7 @@ msgstr "При добавлении входных параметров из «%
169
172
  msgid "Cleanup working directories"
170
173
  msgstr ""
171
174
 
172
- msgid "Clear filters"
175
+ msgid "Clear all filters"
173
176
  msgstr ""
174
177
 
175
178
  msgid "Clear input"
@@ -379,6 +382,18 @@ msgstr ""
379
382
  msgid "Evaluated at:"
380
383
  msgstr "Обработано:"
381
384
 
385
+ msgid "Every day at %s"
386
+ msgstr ""
387
+
388
+ msgid "Every hour at minute %s"
389
+ msgstr ""
390
+
391
+ msgid "Every month on %s at %s"
392
+ msgstr ""
393
+
394
+ msgid "Every week on %s at %s"
395
+ msgstr ""
396
+
382
397
  msgid "Execute the job later, at a scheduled time."
383
398
  msgstr ""
384
399
 
@@ -739,6 +754,9 @@ msgstr "Организация"
739
754
  msgid "Override the description format from the template for this invocation only"
740
755
  msgstr "Переопределить формат описания из шаблона только на время этого вызова"
741
756
 
757
+ msgid "Override the global time to pickup interval for this invocation only"
758
+ msgstr ""
759
+
742
760
  msgid "Override the timeout interval from the template for this invocation only"
743
761
  msgstr ""
744
762
 
@@ -766,9 +784,24 @@ msgstr ""
766
784
  msgid "Perform no more executions after this time"
767
785
  msgstr "Остановить после указанного числа повторений"
768
786
 
787
+ msgid "Please enter a search query"
788
+ msgstr ""
789
+
790
+ msgid "Please go back to \\\"Schedule\\\" - \\\"Future execution\\\" step to fix the error"
791
+ msgstr ""
792
+
769
793
  msgid "Please refine your search."
770
794
  msgstr ""
771
795
 
796
+ msgid "Please select at least one host"
797
+ msgstr ""
798
+
799
+ msgid "Please select at least one host collection"
800
+ msgstr ""
801
+
802
+ msgid "Please select at least one host group"
803
+ msgstr ""
804
+
772
805
  msgid "Port to use for SSH communication. Default port 22. You may override per host by setting a parameter called remote_execution_ssh_port."
773
806
  msgstr ""
774
807
 
@@ -910,6 +943,12 @@ msgstr "Выполнить задание"
910
943
  msgid "Run Puppet Once"
911
944
  msgstr ""
912
945
 
946
+ msgid "Run Script"
947
+ msgstr ""
948
+
949
+ msgid "Run a script"
950
+ msgstr ""
951
+
913
952
  msgid "Run at most N tasks at a time"
914
953
  msgstr "Максимальное количество параллельно выполняемых задач"
915
954
 
@@ -1060,6 +1099,9 @@ msgstr ""
1060
1099
  msgid "Starts"
1061
1100
  msgstr "Начало"
1062
1101
 
1102
+ msgid "Starts Before"
1103
+ msgstr ""
1104
+
1063
1105
  msgid "Starts at"
1064
1106
  msgstr ""
1065
1107
 
@@ -1244,7 +1286,7 @@ msgstr "Тип"
1244
1286
  msgid "Type has impact on when is the query evaluated to hosts."
1245
1287
  msgstr ""
1246
1288
 
1247
- msgid "Type has impact on when is the query evaluated to hosts.<br><ul><li><b>Static</b> - evaluates just after you submit this form</li><li><b>Dynamic</b> - evaluates just before the execution is started, so if it's planed in future, targeted hosts set may change before it</li></ul>"
1289
+ msgid "Type has impact on when is the query evaluated to hosts.<br><ul><li><b>Static</b> - evaluates just after you submit this form</li><li><b>Dynamic</b> - evaluates just before the execution is started, so if it's planned in future, targeted hosts set may change before it</li></ul>"
1248
1290
  msgstr ""
1249
1291
 
1250
1292
  msgid "Type of execution"
@@ -1400,7 +1442,7 @@ msgstr "ошибка при обработке шаблонов: %s"
1400
1442
  msgid "evaluates just after you submit this form"
1401
1443
  msgstr ""
1402
1444
 
1403
- msgid "evaluates just before the execution is started, so if it's planed in future, targeted hosts set may change before it"
1445
+ msgid "evaluates just before the execution is started, so if it's planned in future, targeted hosts set may change before it"
1404
1446
  msgstr ""
1405
1447
 
1406
1448
  msgid "failed"
@@ -1484,5 +1526,8 @@ msgstr ""
1484
1526
  msgid "using Smart Proxy"
1485
1527
  msgstr ""
1486
1528
 
1529
+ msgid "view host names"
1530
+ msgstr ""
1531
+
1487
1532
  msgid "yes"
1488
1533
  msgstr "да"
@@ -26,6 +26,9 @@ msgstr "%s 前"
26
26
  msgid "%s job has been invoked"
27
27
  msgstr "%s 任务已被调用"
28
28
 
29
+ msgid "%s more"
30
+ msgstr ""
31
+
29
32
  msgid "%{description} on %{host}"
30
33
  msgstr "%{host} 的 %{description}"
31
34
 
@@ -35,9 +38,6 @@ msgstr ""
35
38
  msgid "'Starts before' date must in the future"
36
39
  msgstr ""
37
40
 
38
- msgid ", and %s more"
39
- msgstr ", 和 %s 个更多"
40
-
41
41
  msgid "...and %s more"
42
42
  msgstr "...和 %s 个更多"
43
43
 
@@ -96,6 +96,9 @@ msgstr "高级项"
96
96
  msgid "After"
97
97
  msgstr ""
98
98
 
99
+ msgid "After %s occurences"
100
+ msgstr ""
101
+
99
102
  msgid "All fields are required."
100
103
  msgstr "各个项都需要。"
101
104
 
@@ -153,8 +156,8 @@ msgstr "无法同时指定 bookmark_id 和 search_query"
153
156
  msgid "Categories list failed with:"
154
157
  msgstr "类别列表失败并带有:"
155
158
 
156
- msgid "Category and Template"
157
- msgstr "类别和模板"
159
+ msgid "Category and template"
160
+ msgstr ""
158
161
 
159
162
  msgid "Choose a job template that is pre-selected in job invocation form"
160
163
  msgstr "选择在作业调用表单中预先选择的作业模板"
@@ -165,8 +168,8 @@ msgstr "在外部输入设置中发现了循环的依赖关系 '%{template}' ->
165
168
  msgid "Cleanup working directories"
166
169
  msgstr "清理工作目录"
167
170
 
168
- msgid "Clear filters"
169
- msgstr "清除过滤器"
171
+ msgid "Clear all filters"
172
+ msgstr ""
170
173
 
171
174
  msgid "Clear input"
172
175
  msgstr ""
@@ -375,6 +378,18 @@ msgstr "错误:"
375
378
  msgid "Evaluated at:"
376
379
  msgstr "评估于:"
377
380
 
381
+ msgid "Every day at %s"
382
+ msgstr ""
383
+
384
+ msgid "Every hour at minute %s"
385
+ msgstr ""
386
+
387
+ msgid "Every month on %s at %s"
388
+ msgstr ""
389
+
390
+ msgid "Every week on %s at %s"
391
+ msgstr ""
392
+
378
393
  msgid "Execute the job later, at a scheduled time."
379
394
  msgstr ""
380
395
 
@@ -735,6 +750,9 @@ msgstr "机构"
735
750
  msgid "Override the description format from the template for this invocation only"
736
751
  msgstr "只为此调用覆盖来自模板的描述格式"
737
752
 
753
+ msgid "Override the global time to pickup interval for this invocation only"
754
+ msgstr ""
755
+
738
756
  msgid "Override the timeout interval from the template for this invocation only"
739
757
  msgstr "只为此调用使用该模板覆盖超时间隔"
740
758
 
@@ -762,9 +780,24 @@ msgstr "执行一个单独 Puppet 运行"
762
780
  msgid "Perform no more executions after this time"
763
781
  msgstr "在此时间后不再执行"
764
782
 
783
+ msgid "Please enter a search query"
784
+ msgstr ""
785
+
786
+ msgid "Please go back to \\\"Schedule\\\" - \\\"Future execution\\\" step to fix the error"
787
+ msgstr ""
788
+
765
789
  msgid "Please refine your search."
766
790
  msgstr "请重新调整您的搜索。"
767
791
 
792
+ msgid "Please select at least one host"
793
+ msgstr ""
794
+
795
+ msgid "Please select at least one host collection"
796
+ msgstr ""
797
+
798
+ msgid "Please select at least one host group"
799
+ msgstr ""
800
+
768
801
  msgid "Port to use for SSH communication. Default port 22. You may override per host by setting a parameter called remote_execution_ssh_port."
769
802
  msgstr "要用于 SSH 通信的端口。默认端口 22。您可以通过设置名为 remote_execution_ssh_port 的参数来按主机进行覆盖。"
770
803
 
@@ -906,6 +939,12 @@ msgstr "运行作业"
906
939
  msgid "Run Puppet Once"
907
940
  msgstr "运行 Puppet 一次"
908
941
 
942
+ msgid "Run Script"
943
+ msgstr ""
944
+
945
+ msgid "Run a script"
946
+ msgstr ""
947
+
909
948
  msgid "Run at most N tasks at a time"
910
949
  msgstr "一次最多运行 N 个任务"
911
950
 
@@ -1056,6 +1095,9 @@ msgstr "已启动"
1056
1095
  msgid "Starts"
1057
1096
  msgstr "开始"
1058
1097
 
1098
+ msgid "Starts Before"
1099
+ msgstr ""
1100
+
1059
1101
  msgid "Starts at"
1060
1102
  msgstr "开始于"
1061
1103
 
@@ -1237,8 +1279,8 @@ msgstr "类型"
1237
1279
  msgid "Type has impact on when is the query evaluated to hosts."
1238
1280
  msgstr "类型会影响到什么时候会评估到主机。"
1239
1281
 
1240
- msgid "Type has impact on when is the query evaluated to hosts.<br><ul><li><b>Static</b> - evaluates just after you submit this form</li><li><b>Dynamic</b> - evaluates just before the execution is started, so if it's planed in future, targeted hosts set may change before it</li></ul>"
1241
- msgstr "类型会对何时评估主机查询产生影响。<br><ul><li><b>静态</b> - 提交此表格后立即评估</li><li><b>动态</b> - 开始执行前进行评估,因此,如果以后计划,则目标主机集可能会在它之前发生变化</li></ul>"
1282
+ msgid "Type has impact on when is the query evaluated to hosts.<br><ul><li><b>Static</b> - evaluates just after you submit this form</li><li><b>Dynamic</b> - evaluates just before the execution is started, so if it's planned in future, targeted hosts set may change before it</li></ul>"
1283
+ msgstr ""
1242
1284
 
1243
1285
  msgid "Type of execution"
1244
1286
  msgstr ""
@@ -1393,8 +1435,8 @@ msgstr "呈现时出错:%s"
1393
1435
  msgid "evaluates just after you submit this form"
1394
1436
  msgstr "提交此表单后评估"
1395
1437
 
1396
- msgid "evaluates just before the execution is started, so if it's planed in future, targeted hosts set may change before it"
1397
- msgstr "在执行启动前进行评估,因此如果将来需要它,则目标主机设置可能会在它之前改变。"
1438
+ msgid "evaluates just before the execution is started, so if it's planned in future, targeted hosts set may change before it"
1439
+ msgstr ""
1398
1440
 
1399
1441
  msgid "failed"
1400
1442
  msgstr "失败"
@@ -1477,5 +1519,8 @@ msgstr "使用 "
1477
1519
  msgid "using Smart Proxy"
1478
1520
  msgstr "使用智能代理"
1479
1521
 
1522
+ msgid "view host names"
1523
+ msgstr ""
1524
+
1480
1525
  msgid "yes"
1481
1526
  msgstr "是"
@@ -26,6 +26,9 @@ msgstr "%s 之前"
26
26
  msgid "%s job has been invoked"
27
27
  msgstr ""
28
28
 
29
+ msgid "%s more"
30
+ msgstr ""
31
+
29
32
  msgid "%{description} on %{host}"
30
33
  msgstr "%{description} 於 %{host} 之上"
31
34
 
@@ -35,9 +38,6 @@ msgstr ""
35
38
  msgid "'Starts before' date must in the future"
36
39
  msgstr ""
37
40
 
38
- msgid ", and %s more"
39
- msgstr ""
40
-
41
41
  msgid "...and %s more"
42
42
  msgstr ""
43
43
 
@@ -97,6 +97,9 @@ msgstr ""
97
97
  msgid "After"
98
98
  msgstr ""
99
99
 
100
+ msgid "After %s occurences"
101
+ msgstr ""
102
+
100
103
  msgid "All fields are required."
101
104
  msgstr ""
102
105
 
@@ -154,7 +157,7 @@ msgstr "無法指定 bookmark_id 和 search_query"
154
157
  msgid "Categories list failed with:"
155
158
  msgstr ""
156
159
 
157
- msgid "Category and Template"
160
+ msgid "Category and template"
158
161
  msgstr ""
159
162
 
160
163
  msgid "Choose a job template that is pre-selected in job invocation form"
@@ -166,7 +169,7 @@ msgstr "在外部輸入集偵測到環狀相依性: '%{template}' -> '%{target
166
169
  msgid "Cleanup working directories"
167
170
  msgstr ""
168
171
 
169
- msgid "Clear filters"
172
+ msgid "Clear all filters"
170
173
  msgstr ""
171
174
 
172
175
  msgid "Clear input"
@@ -376,6 +379,18 @@ msgstr ""
376
379
  msgid "Evaluated at:"
377
380
  msgstr "評量於:"
378
381
 
382
+ msgid "Every day at %s"
383
+ msgstr ""
384
+
385
+ msgid "Every hour at minute %s"
386
+ msgstr ""
387
+
388
+ msgid "Every month on %s at %s"
389
+ msgstr ""
390
+
391
+ msgid "Every week on %s at %s"
392
+ msgstr ""
393
+
379
394
  msgid "Execute the job later, at a scheduled time."
380
395
  msgstr ""
381
396
 
@@ -736,6 +751,9 @@ msgstr "組織"
736
751
  msgid "Override the description format from the template for this invocation only"
737
752
  msgstr "僅為這祈願從範本覆寫描述格式"
738
753
 
754
+ msgid "Override the global time to pickup interval for this invocation only"
755
+ msgstr ""
756
+
739
757
  msgid "Override the timeout interval from the template for this invocation only"
740
758
  msgstr ""
741
759
 
@@ -763,9 +781,24 @@ msgstr ""
763
781
  msgid "Perform no more executions after this time"
764
782
  msgstr "此時間之後不再進行任何執行"
765
783
 
784
+ msgid "Please enter a search query"
785
+ msgstr ""
786
+
787
+ msgid "Please go back to \\\"Schedule\\\" - \\\"Future execution\\\" step to fix the error"
788
+ msgstr ""
789
+
766
790
  msgid "Please refine your search."
767
791
  msgstr ""
768
792
 
793
+ msgid "Please select at least one host"
794
+ msgstr ""
795
+
796
+ msgid "Please select at least one host collection"
797
+ msgstr ""
798
+
799
+ msgid "Please select at least one host group"
800
+ msgstr ""
801
+
769
802
  msgid "Port to use for SSH communication. Default port 22. You may override per host by setting a parameter called remote_execution_ssh_port."
770
803
  msgstr ""
771
804
 
@@ -907,6 +940,12 @@ msgstr "執行工作"
907
940
  msgid "Run Puppet Once"
908
941
  msgstr ""
909
942
 
943
+ msgid "Run Script"
944
+ msgstr ""
945
+
946
+ msgid "Run a script"
947
+ msgstr ""
948
+
910
949
  msgid "Run at most N tasks at a time"
911
950
  msgstr "一次最多執行 N 個任務"
912
951
 
@@ -1057,6 +1096,9 @@ msgstr ""
1057
1096
  msgid "Starts"
1058
1097
  msgstr "起始"
1059
1098
 
1099
+ msgid "Starts Before"
1100
+ msgstr ""
1101
+
1060
1102
  msgid "Starts at"
1061
1103
  msgstr ""
1062
1104
 
@@ -1239,7 +1281,7 @@ msgstr "類型"
1239
1281
  msgid "Type has impact on when is the query evaluated to hosts."
1240
1282
  msgstr ""
1241
1283
 
1242
- msgid "Type has impact on when is the query evaluated to hosts.<br><ul><li><b>Static</b> - evaluates just after you submit this form</li><li><b>Dynamic</b> - evaluates just before the execution is started, so if it's planed in future, targeted hosts set may change before it</li></ul>"
1284
+ msgid "Type has impact on when is the query evaluated to hosts.<br><ul><li><b>Static</b> - evaluates just after you submit this form</li><li><b>Dynamic</b> - evaluates just before the execution is started, so if it's planned in future, targeted hosts set may change before it</li></ul>"
1243
1285
  msgstr ""
1244
1286
 
1245
1287
  msgid "Type of execution"
@@ -1395,7 +1437,7 @@ msgstr "處理時發生錯誤:%s"
1395
1437
  msgid "evaluates just after you submit this form"
1396
1438
  msgstr ""
1397
1439
 
1398
- msgid "evaluates just before the execution is started, so if it's planed in future, targeted hosts set may change before it"
1440
+ msgid "evaluates just before the execution is started, so if it's planned in future, targeted hosts set may change before it"
1399
1441
  msgstr ""
1400
1442
 
1401
1443
  msgid "failed"
@@ -1479,5 +1521,8 @@ msgstr ""
1479
1521
  msgid "using Smart Proxy"
1480
1522
  msgstr ""
1481
1523
 
1524
+ msgid "view host names"
1525
+ msgstr ""
1526
+
1482
1527
  msgid "yes"
1483
1528
  msgstr "是"
@@ -0,0 +1,104 @@
1
+ import React from 'react';
2
+ import { useSelector } from 'react-redux';
3
+ import PropTypes from 'prop-types';
4
+ import {
5
+ Button,
6
+ WizardFooter,
7
+ WizardContextConsumer,
8
+ Tooltip,
9
+ Spinner,
10
+ } from '@patternfly/react-core';
11
+ import { translate as __ } from 'foremanReact/common/I18n';
12
+ import { WIZARD_TITLES } from './JobWizardConstants';
13
+ import { selectIsSubmitting } from './JobWizardSelectors';
14
+
15
+ export const Footer = ({ canSubmit, onSave }) => {
16
+ const isSubmitting = useSelector(selectIsSubmitting);
17
+ return (
18
+ <WizardFooter>
19
+ <WizardContextConsumer>
20
+ {({ activeStep, onNext, onBack, onClose, goToStepByName }) => {
21
+ const isValid =
22
+ activeStep && activeStep.enableNext !== undefined
23
+ ? activeStep.enableNext
24
+ : true;
25
+
26
+ return (
27
+ <>
28
+ <Button
29
+ variant="primary"
30
+ type="submit"
31
+ onClick={onNext}
32
+ isDisabled={!isValid || isSubmitting}
33
+ >
34
+ {activeStep.name === WIZARD_TITLES.review
35
+ ? __('Submit')
36
+ : __('Next')}
37
+ </Button>
38
+ <Button
39
+ variant="secondary"
40
+ onClick={onBack}
41
+ isDisabled={
42
+ activeStep.name === WIZARD_TITLES.categoryAndTemplate
43
+ }
44
+ >
45
+ {__('Back')}
46
+ </Button>
47
+ <Tooltip
48
+ content={
49
+ <div>
50
+ {canSubmit
51
+ ? __('Start job')
52
+ : __('Fill all required fields in all the steps')}
53
+ </div>
54
+ }
55
+ >
56
+ <Button
57
+ variant="tertiary"
58
+ onClick={onSave}
59
+ isAriaDisabled={!canSubmit}
60
+ isDisabled={isSubmitting}
61
+ >
62
+ {__('Run on selected hosts')}
63
+ </Button>
64
+ </Tooltip>
65
+ <Tooltip
66
+ content={
67
+ <div>
68
+ {canSubmit
69
+ ? __('Skip to review step')
70
+ : __(
71
+ 'Fill all required fields in all the steps to start the job'
72
+ )}
73
+ </div>
74
+ }
75
+ >
76
+ <Button
77
+ variant="tertiary"
78
+ onClick={() => goToStepByName(WIZARD_TITLES.review)}
79
+ isAriaDisabled={!canSubmit}
80
+ isDisabled={isSubmitting}
81
+ >
82
+ {__('Skip to review')}
83
+ </Button>
84
+ </Tooltip>
85
+ <Button variant="link" onClick={onClose}>
86
+ {__('Cancel')}
87
+ </Button>
88
+ {isSubmitting && (
89
+ <div>
90
+ <Spinner size="lg" />
91
+ </div>
92
+ )}
93
+ </>
94
+ );
95
+ }}
96
+ </WizardContextConsumer>
97
+ </WizardFooter>
98
+ );
99
+ };
100
+
101
+ Footer.propTypes = {
102
+ canSubmit: PropTypes.bool.isRequired,
103
+ onSave: PropTypes.func.isRequired,
104
+ };
@@ -37,6 +37,7 @@ import { useAutoFill } from './autofill';
37
37
  import { submit } from './submit';
38
38
  import { generateDefaultDescription } from './JobWizardHelpers';
39
39
  import { StartsBeforeErrorAlert } from './StartsBeforeErrorAlert';
40
+ import { Footer } from './Footer';
40
41
  import './JobWizard.scss';
41
42
 
42
43
  export const JobWizard = ({ rerunData }) => {
@@ -420,6 +421,22 @@ export const JobWizard = ({ rerunData }) => {
420
421
  ];
421
422
  const location = useForemanLocation();
422
423
  const organization = useForemanOrganization();
424
+ const onSave = () => {
425
+ submit({
426
+ jobTemplateID,
427
+ templateValues,
428
+ advancedValues,
429
+ scheduleValue,
430
+ dispatch,
431
+ selectedTargets,
432
+ hostsSearchQuery,
433
+ location,
434
+ organization,
435
+ feature: routerSearch?.feature,
436
+ provider: templateResponse.provider_name,
437
+ advancedInputs: templateResponse.advanced_template_inputs,
438
+ });
439
+ };
423
440
  return (
424
441
  <>
425
442
  {isStartsBeforeError && <StartsBeforeErrorAlert />}
@@ -429,22 +446,13 @@ export const JobWizard = ({ rerunData }) => {
429
446
  steps={steps}
430
447
  height="100%"
431
448
  className="job-wizard"
432
- onSave={() => {
433
- submit({
434
- jobTemplateID,
435
- templateValues,
436
- advancedValues,
437
- scheduleValue,
438
- dispatch,
439
- selectedTargets,
440
- hostsSearchQuery,
441
- location,
442
- organization,
443
- feature: routerSearch?.feature,
444
- provider: templateResponse.provider_name,
445
- advancedInputs: templateResponse.advanced_template_inputs,
446
- });
447
- }}
449
+ onSave={onSave}
450
+ footer={
451
+ <Footer
452
+ canSubmit={!!steps[steps.length - 1].enableNext}
453
+ onSave={onSave}
454
+ />
455
+ }
448
456
  />
449
457
  </>
450
458
  );
@@ -6,20 +6,15 @@
6
6
 
7
7
  .pf-c-wizard__nav.pf-m-expanded {
8
8
  z-index: calc(
9
- var(--pf-c-wizard__footer--ZIndex) + 2
10
- ); // So the small screen navigation can be shown above the select box
9
+ var(--pf-c-wizard__toggle--ZIndex) + 2
10
+ ); // So the small screen navigation can be shown above the select box and wizard body
11
11
  }
12
12
 
13
13
  .pf-c-wizard__main {
14
14
  overflow: visible;
15
15
  z-index: calc(
16
- var(--pf-c-wizard__footer--ZIndex) + 1
17
- ); // So the select box can be shown above the wizard footer
18
- }
19
- .pf-c-wizard__nav {
20
- z-index: calc(
21
- var(--pf-c-wizard__footer--ZIndex) + 2
22
- ); // So the navigation box can be shown above the wizard body
16
+ var(--pf-c-wizard__toggle--ZIndex) + 1
17
+ ); // So the select box can be shown above the wizard footer and navigation toggle
23
18
  }
24
19
  .pf-c-wizard__main-body {
25
20
  max-width: 500px;
@@ -34,14 +29,8 @@
34
29
  }
35
30
 
36
31
  .target-hosts-and-inputs {
37
- .hosts-chip-group {
38
- margin-top: 8px;
39
- float: left;
40
- clear: left;
41
- display: block;
42
- }
43
- .clear-chips {
44
- margin-top: 8px;
32
+ .pf-c-chip-group.pf-m-category {
33
+ margin-bottom: 10px;
45
34
  }
46
35
  .pf-c-select__toggle-typeahead {
47
36
  border: 0px;
@@ -23,7 +23,7 @@ export const SCHEDULE_TYPES = {
23
23
  };
24
24
 
25
25
  export const WIZARD_TITLES = {
26
- categoryAndTemplate: __('Category and Template'),
26
+ categoryAndTemplate: __('Category and template'),
27
27
  hostsAndInputs: __('Target hosts and inputs'),
28
28
  advanced: __('Advanced fields'),
29
29
  schedule: __('Schedule'),
@@ -86,6 +86,7 @@ const JobWizardPageRerun = ({
86
86
  <React.Fragment>
87
87
  {jobOrganization?.id !== currentOrganization?.id && (
88
88
  <Alert
89
+ isInline
89
90
  className="job-wizard-alert"
90
91
  variant="warning"
91
92
  title={sprintf(
@@ -99,6 +100,7 @@ const JobWizardPageRerun = ({
99
100
  )}
100
101
  {jobLocation?.id !== currentLocation?.id && (
101
102
  <Alert
103
+ isInline
102
104
  className="job-wizard-alert"
103
105
  variant="warning"
104
106
  title={sprintf(