foreman_remote_execution 11.1.3 → 12.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/.rubocop_todo.yml +0 -8
- data/.tx/config +2 -2
- data/app/assets/javascripts/foreman_remote_execution/locale/de/foreman_remote_execution.js +27 -21
- data/app/assets/javascripts/foreman_remote_execution/locale/en/foreman_remote_execution.js +24 -15
- data/app/assets/javascripts/foreman_remote_execution/locale/en_GB/foreman_remote_execution.js +27 -9
- data/app/assets/javascripts/foreman_remote_execution/locale/es/foreman_remote_execution.js +27 -24
- data/app/assets/javascripts/foreman_remote_execution/locale/fr/foreman_remote_execution.js +27 -24
- data/app/assets/javascripts/foreman_remote_execution/locale/ja/foreman_remote_execution.js +27 -24
- data/app/assets/javascripts/foreman_remote_execution/locale/ka/foreman_remote_execution.js +1587 -0
- data/app/assets/javascripts/foreman_remote_execution/locale/ko/foreman_remote_execution.js +27 -15
- data/app/assets/javascripts/foreman_remote_execution/locale/pt_BR/foreman_remote_execution.js +27 -24
- data/app/assets/javascripts/foreman_remote_execution/locale/ru/foreman_remote_execution.js +27 -15
- data/app/assets/javascripts/foreman_remote_execution/locale/zh_CN/foreman_remote_execution.js +27 -24
- data/app/assets/javascripts/foreman_remote_execution/locale/zh_TW/foreman_remote_execution.js +27 -15
- data/app/controllers/ui_job_wizard_controller.rb +1 -4
- data/app/helpers/remote_execution_helper.rb +10 -4
- data/app/lib/actions/remote_execution/event_helpers.rb +42 -0
- data/app/lib/actions/remote_execution/run_host_job.rb +3 -16
- data/app/lib/actions/remote_execution/run_hosts_job.rb +7 -5
- data/app/models/concerns/api/v2/hosts_controller_extensions.rb +12 -0
- data/app/models/job_invocation_composer.rb +0 -1
- data/app/views/api/v2/job_invocations/base.json.rabl +14 -0
- data/app/views/templates/script/convert2rhel_analyze.erb +0 -3
- data/config/routes.rb +2 -0
- data/db/migrate/20151215114631_add_host_id_to_template_invocation.rb +1 -1
- data/db/migrate/20151217092555_migrate_to_task_groups.rb +1 -1
- data/db/migrate/20160113162007_expand_all_template_invocations.rb +2 -2
- data/db/migrate/20160114125628_rename_job_name_to_job_category.rb +2 -2
- data/db/migrate/20200623073022_rename_sudo_password_to_effective_user_password.rb +2 -2
- data/db/migrate/20220321101835_rename_ssh_provider_to_script.rb +1 -1
- data/extra/cockpit/foreman-cockpit-session +1 -1
- data/foreman_remote_execution.gemspec +3 -1
- data/lib/foreman_remote_execution/engine.rb +14 -9
- data/lib/foreman_remote_execution/version.rb +1 -1
- data/locale/Makefile +3 -4
- data/locale/action_names.rb +0 -5
- data/locale/de/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/de/foreman_remote_execution.po +24 -15
- data/locale/en/foreman_remote_execution.po +24 -15
- data/locale/en_GB/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/en_GB/foreman_remote_execution.po +24 -15
- data/locale/es/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/es/foreman_remote_execution.po +24 -15
- data/locale/foreman_remote_execution.pot +82 -69
- data/locale/fr/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/fr/foreman_remote_execution.po +24 -15
- data/locale/ja/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/ja/foreman_remote_execution.po +24 -15
- data/locale/ka/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/ka/foreman_remote_execution.po +1576 -0
- data/locale/ko/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/ko/foreman_remote_execution.po +24 -15
- data/locale/pt_BR/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/pt_BR/foreman_remote_execution.po +24 -15
- data/locale/ru/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/ru/foreman_remote_execution.po +24 -15
- data/locale/zh_CN/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/zh_CN/foreman_remote_execution.po +24 -15
- data/locale/zh_TW/LC_MESSAGES/foreman_remote_execution.mo +0 -0
- data/locale/zh_TW/foreman_remote_execution.po +24 -15
- data/test/unit/actions/run_hosts_job_test.rb +1 -1
- data/test/unit/api_params_test.rb +2 -10
- data/webpack/JobInvocationDetail/JobInvocationActions.js +22 -0
- data/webpack/JobInvocationDetail/JobInvocationConstants.js +7 -0
- data/webpack/JobInvocationDetail/JobInvocationOverview.js +104 -0
- data/webpack/JobInvocationDetail/JobInvocationSelectors.js +5 -0
- data/webpack/JobInvocationDetail/index.js +77 -0
- data/webpack/JobWizard/JobWizardPageRerun.js +10 -25
- data/webpack/JobWizard/index.js +9 -18
- data/webpack/Routes/routes.js +6 -0
- data/webpack/react_app/components/FeaturesDropdown/actions.js +4 -2
- data/webpack/react_app/components/FeaturesDropdown/constants.js +5 -0
- data/webpack/react_app/components/FeaturesDropdown/index.js +53 -14
- data/webpack/react_app/components/FeaturesDropdown/index.scss +11 -0
- data/webpack/react_app/extend/Fills.js +6 -0
- metadata +24 -10
- data/webpack/react_app/components/FeaturesDropdown/constant.js +0 -3
- /data/test/graphql/mutations/job_invocations/{create.rb → create_test.rb} +0 -0
- /data/test/unit/{renderer_scope_input.rb → renderer_scope_input_test.rb} +0 -0
@@ -383,6 +383,12 @@
|
|
383
383
|
"Try to abort the job without waiting for the results from the remote hosts": [
|
384
384
|
""
|
385
385
|
],
|
386
|
+
"New UI": [
|
387
|
+
""
|
388
|
+
],
|
389
|
+
"Switch to the new job invocation detail UI": [
|
390
|
+
""
|
391
|
+
],
|
386
392
|
"Task Details": [
|
387
393
|
"작업 자세히"
|
388
394
|
],
|
@@ -1095,6 +1101,9 @@
|
|
1095
1101
|
"Job templates": [
|
1096
1102
|
"작업 템플릿"
|
1097
1103
|
],
|
1104
|
+
"Job invocations detail": [
|
1105
|
+
""
|
1106
|
+
],
|
1098
1107
|
"Run Puppet Once": [
|
1099
1108
|
""
|
1100
1109
|
],
|
@@ -1107,6 +1116,21 @@
|
|
1107
1116
|
"Run a script": [
|
1108
1117
|
""
|
1109
1118
|
],
|
1119
|
+
"Not yet": [
|
1120
|
+
""
|
1121
|
+
],
|
1122
|
+
"Effective user:": [
|
1123
|
+
""
|
1124
|
+
],
|
1125
|
+
"Started at:": [
|
1126
|
+
""
|
1127
|
+
],
|
1128
|
+
"SSH user:": [
|
1129
|
+
""
|
1130
|
+
],
|
1131
|
+
"Template:": [
|
1132
|
+
""
|
1133
|
+
],
|
1110
1134
|
"Submit": [
|
1111
1135
|
""
|
1112
1136
|
],
|
@@ -1545,29 +1569,17 @@
|
|
1545
1569
|
"Active Filters:": [
|
1546
1570
|
""
|
1547
1571
|
],
|
1572
|
+
"A plugin bringing remote execution to the Foreman, completing the config management functionality with remote management functionality.": [
|
1573
|
+
"Foreman으로 원격 실행을 가져오는 플러그인입니다. 원격 관리 기능으로 구성 관리 기능을 완료합니다."
|
1574
|
+
],
|
1548
1575
|
"Action with sub plans": [
|
1549
1576
|
"하위 계획이 있는 작업"
|
1550
1577
|
],
|
1551
|
-
"Check for long running tasks": [
|
1552
|
-
""
|
1553
|
-
],
|
1554
|
-
"Deliver notifications about long running tasks": [
|
1555
|
-
""
|
1556
|
-
],
|
1557
1578
|
"Import Puppet classes": [
|
1558
1579
|
"Puppet 클래스 가져오기"
|
1559
1580
|
],
|
1560
1581
|
"Import facts": [
|
1561
1582
|
"팩트 불러오기"
|
1562
|
-
],
|
1563
|
-
"A plugin bringing remote execution to the Foreman, completing the config management functionality with remote management functionality.": [
|
1564
|
-
"Foreman으로 원격 실행을 가져오는 플러그인입니다. 원격 관리 기능으로 구성 관리 기능을 완료합니다."
|
1565
|
-
],
|
1566
|
-
"Distribute tasks over N seconds": [
|
1567
|
-
"N초에 걸쳐 태스크 배분"
|
1568
|
-
],
|
1569
|
-
"Time span": [
|
1570
|
-
"기간"
|
1571
1583
|
]
|
1572
1584
|
}
|
1573
1585
|
}
|
data/app/assets/javascripts/foreman_remote_execution/locale/pt_BR/foreman_remote_execution.js
CHANGED
@@ -383,6 +383,12 @@
|
|
383
383
|
"Try to abort the job without waiting for the results from the remote hosts": [
|
384
384
|
"Tente anular o trabalho sem esperar os resultados dos hosts remotos"
|
385
385
|
],
|
386
|
+
"New UI": [
|
387
|
+
""
|
388
|
+
],
|
389
|
+
"Switch to the new job invocation detail UI": [
|
390
|
+
""
|
391
|
+
],
|
386
392
|
"Task Details": [
|
387
393
|
"Detalhes da tarefa"
|
388
394
|
],
|
@@ -1097,6 +1103,9 @@
|
|
1097
1103
|
"Job templates": [
|
1098
1104
|
"Modelos de trabalho"
|
1099
1105
|
],
|
1106
|
+
"Job invocations detail": [
|
1107
|
+
""
|
1108
|
+
],
|
1100
1109
|
"Run Puppet Once": [
|
1101
1110
|
"Executar Puppet"
|
1102
1111
|
],
|
@@ -1109,6 +1118,21 @@
|
|
1109
1118
|
"Run a script": [
|
1110
1119
|
""
|
1111
1120
|
],
|
1121
|
+
"Not yet": [
|
1122
|
+
""
|
1123
|
+
],
|
1124
|
+
"Effective user:": [
|
1125
|
+
""
|
1126
|
+
],
|
1127
|
+
"Started at:": [
|
1128
|
+
""
|
1129
|
+
],
|
1130
|
+
"SSH user:": [
|
1131
|
+
""
|
1132
|
+
],
|
1133
|
+
"Template:": [
|
1134
|
+
""
|
1135
|
+
],
|
1112
1136
|
"Submit": [
|
1113
1137
|
""
|
1114
1138
|
],
|
@@ -1547,38 +1571,17 @@
|
|
1547
1571
|
"Active Filters:": [
|
1548
1572
|
""
|
1549
1573
|
],
|
1574
|
+
"A plugin bringing remote execution to the Foreman, completing the config management functionality with remote management functionality.": [
|
1575
|
+
"Um plugin trazendo execução remota ao Foreman, completando a funcionalidade de gerenciamento de configuração com a funcionalidade de gerenciamento remoto. "
|
1576
|
+
],
|
1550
1577
|
"Action with sub plans": [
|
1551
1578
|
"Ação com subplanos "
|
1552
1579
|
],
|
1553
|
-
"Check for long running tasks": [
|
1554
|
-
""
|
1555
|
-
],
|
1556
|
-
"Deliver notifications about long running tasks": [
|
1557
|
-
""
|
1558
|
-
],
|
1559
1580
|
"Import Puppet classes": [
|
1560
1581
|
"Importar classes de Puppet"
|
1561
1582
|
],
|
1562
1583
|
"Import facts": [
|
1563
1584
|
"Importar fatos"
|
1564
|
-
],
|
1565
|
-
"A plugin bringing remote execution to the Foreman, completing the config management functionality with remote management functionality.": [
|
1566
|
-
"Um plugin trazendo execução remota ao Foreman, completando a funcionalidade de gerenciamento de configuração com a funcionalidade de gerenciamento remoto. "
|
1567
|
-
],
|
1568
|
-
"Cron line format 'a b c d e', where:": [
|
1569
|
-
"Cron line format 'a b c d e', onde:"
|
1570
|
-
],
|
1571
|
-
"#~ \"Distribute execution over N seconds. If this is set and proxy batch triggering\"#~ \" is enabled, then tasks are triggered on the smart proxy in batches of size 1.\"": [
|
1572
|
-
"#~ \"Distribuir a execução ao longo de N segundos. Se essa opção estiver definida, \"#~ \"e o acionamento em lote de proxy estiver desabilitado, então, as tarefas serão\"#~ \" acionadas no proxy inteligente em lotes de tamanho 1.\""
|
1573
|
-
],
|
1574
|
-
"Distribute tasks over N seconds": [
|
1575
|
-
"Distribuir tarefas em N segundos "
|
1576
|
-
],
|
1577
|
-
"Set to distribute over": [
|
1578
|
-
"Definir para distribuir em"
|
1579
|
-
],
|
1580
|
-
"Time span": [
|
1581
|
-
"Período de tempo"
|
1582
1585
|
]
|
1583
1586
|
}
|
1584
1587
|
}
|
@@ -383,6 +383,12 @@
|
|
383
383
|
"Try to abort the job without waiting for the results from the remote hosts": [
|
384
384
|
""
|
385
385
|
],
|
386
|
+
"New UI": [
|
387
|
+
""
|
388
|
+
],
|
389
|
+
"Switch to the new job invocation detail UI": [
|
390
|
+
""
|
391
|
+
],
|
386
392
|
"Task Details": [
|
387
393
|
"Описание задачи"
|
388
394
|
],
|
@@ -1098,6 +1104,9 @@
|
|
1098
1104
|
"Job templates": [
|
1099
1105
|
"Шаблоны заданий"
|
1100
1106
|
],
|
1107
|
+
"Job invocations detail": [
|
1108
|
+
""
|
1109
|
+
],
|
1101
1110
|
"Run Puppet Once": [
|
1102
1111
|
""
|
1103
1112
|
],
|
@@ -1110,6 +1119,21 @@
|
|
1110
1119
|
"Run a script": [
|
1111
1120
|
""
|
1112
1121
|
],
|
1122
|
+
"Not yet": [
|
1123
|
+
""
|
1124
|
+
],
|
1125
|
+
"Effective user:": [
|
1126
|
+
""
|
1127
|
+
],
|
1128
|
+
"Started at:": [
|
1129
|
+
""
|
1130
|
+
],
|
1131
|
+
"SSH user:": [
|
1132
|
+
""
|
1133
|
+
],
|
1134
|
+
"Template:": [
|
1135
|
+
""
|
1136
|
+
],
|
1113
1137
|
"Submit": [
|
1114
1138
|
""
|
1115
1139
|
],
|
@@ -1548,29 +1572,17 @@
|
|
1548
1572
|
"Active Filters:": [
|
1549
1573
|
""
|
1550
1574
|
],
|
1575
|
+
"A plugin bringing remote execution to the Foreman, completing the config management functionality with remote management functionality.": [
|
1576
|
+
"Дополнительный модуль Foreman для удаленного выполнения заданий, объединяющий функции управления конфигурацией и удаленного контроля."
|
1577
|
+
],
|
1551
1578
|
"Action with sub plans": [
|
1552
1579
|
"Действия с подпланами"
|
1553
1580
|
],
|
1554
|
-
"Check for long running tasks": [
|
1555
|
-
""
|
1556
|
-
],
|
1557
|
-
"Deliver notifications about long running tasks": [
|
1558
|
-
""
|
1559
|
-
],
|
1560
1581
|
"Import Puppet classes": [
|
1561
1582
|
"Импорт классов Puppet"
|
1562
1583
|
],
|
1563
1584
|
"Import facts": [
|
1564
1585
|
"Импорт фактов"
|
1565
|
-
],
|
1566
|
-
"A plugin bringing remote execution to the Foreman, completing the config management functionality with remote management functionality.": [
|
1567
|
-
"Дополнительный модуль Foreman для удаленного выполнения заданий, объединяющий функции управления конфигурацией и удаленного контроля."
|
1568
|
-
],
|
1569
|
-
"Distribute tasks over N seconds": [
|
1570
|
-
"Распределить задачи в пределах заданного периода времени (в секундах)"
|
1571
|
-
],
|
1572
|
-
"Time span": [
|
1573
|
-
"Интервал"
|
1574
1586
|
]
|
1575
1587
|
}
|
1576
1588
|
}
|
data/app/assets/javascripts/foreman_remote_execution/locale/zh_CN/foreman_remote_execution.js
CHANGED
@@ -383,6 +383,12 @@
|
|
383
383
|
"Try to abort the job without waiting for the results from the remote hosts": [
|
384
384
|
"尝试在不等待远程主机的结果情况下终止作业"
|
385
385
|
],
|
386
|
+
"New UI": [
|
387
|
+
""
|
388
|
+
],
|
389
|
+
"Switch to the new job invocation detail UI": [
|
390
|
+
""
|
391
|
+
],
|
386
392
|
"Task Details": [
|
387
393
|
"任务详情"
|
388
394
|
],
|
@@ -1094,6 +1100,9 @@
|
|
1094
1100
|
"Job templates": [
|
1095
1101
|
"作业模板"
|
1096
1102
|
],
|
1103
|
+
"Job invocations detail": [
|
1104
|
+
""
|
1105
|
+
],
|
1097
1106
|
"Run Puppet Once": [
|
1098
1107
|
"运行 Puppet 一次"
|
1099
1108
|
],
|
@@ -1106,6 +1115,21 @@
|
|
1106
1115
|
"Run a script": [
|
1107
1116
|
""
|
1108
1117
|
],
|
1118
|
+
"Not yet": [
|
1119
|
+
""
|
1120
|
+
],
|
1121
|
+
"Effective user:": [
|
1122
|
+
""
|
1123
|
+
],
|
1124
|
+
"Started at:": [
|
1125
|
+
""
|
1126
|
+
],
|
1127
|
+
"SSH user:": [
|
1128
|
+
""
|
1129
|
+
],
|
1130
|
+
"Template:": [
|
1131
|
+
""
|
1132
|
+
],
|
1109
1133
|
"Submit": [
|
1110
1134
|
""
|
1111
1135
|
],
|
@@ -1544,38 +1568,17 @@
|
|
1544
1568
|
"Active Filters:": [
|
1545
1569
|
""
|
1546
1570
|
],
|
1571
|
+
"A plugin bringing remote execution to the Foreman, completing the config management functionality with remote management functionality.": [
|
1572
|
+
"一个将远程执行带到 Foreman 的插件,通过远程管理功能来完成配置管理功能。"
|
1573
|
+
],
|
1547
1574
|
"Action with sub plans": [
|
1548
1575
|
"有子计划的操作"
|
1549
1576
|
],
|
1550
|
-
"Check for long running tasks": [
|
1551
|
-
""
|
1552
|
-
],
|
1553
|
-
"Deliver notifications about long running tasks": [
|
1554
|
-
""
|
1555
|
-
],
|
1556
1577
|
"Import Puppet classes": [
|
1557
1578
|
"导入 Puppet 类"
|
1558
1579
|
],
|
1559
1580
|
"Import facts": [
|
1560
1581
|
"导入事实"
|
1561
|
-
],
|
1562
|
-
"A plugin bringing remote execution to the Foreman, completing the config management functionality with remote management functionality.": [
|
1563
|
-
"一个将远程执行带到 Foreman 的插件,通过远程管理功能来完成配置管理功能。"
|
1564
|
-
],
|
1565
|
-
"Cron line format 'a b c d e', where:": [
|
1566
|
-
"Cron 行格式 'a b c d e', 其中:"
|
1567
|
-
],
|
1568
|
-
"#~ \"Distribute execution over N seconds. If this is set and proxy batch triggering\"#~ \" is enabled, then tasks are triggered on the smart proxy in batches of size 1.\"": [
|
1569
|
-
"在 N 秒内分配执行。如果设置了此选项并启用了代理批处理触发,则将在智能代理上以大小为 1 的批处理触发任务。"
|
1570
|
-
],
|
1571
|
-
"Distribute tasks over N seconds": [
|
1572
|
-
"在 N 秒内分配任务"
|
1573
|
-
],
|
1574
|
-
"Set to distribute over": [
|
1575
|
-
"设置为通过...分配"
|
1576
|
-
],
|
1577
|
-
"Time span": [
|
1578
|
-
"时间跨度"
|
1579
1582
|
]
|
1580
1583
|
}
|
1581
1584
|
}
|
data/app/assets/javascripts/foreman_remote_execution/locale/zh_TW/foreman_remote_execution.js
CHANGED
@@ -383,6 +383,12 @@
|
|
383
383
|
"Try to abort the job without waiting for the results from the remote hosts": [
|
384
384
|
""
|
385
385
|
],
|
386
|
+
"New UI": [
|
387
|
+
""
|
388
|
+
],
|
389
|
+
"Switch to the new job invocation detail UI": [
|
390
|
+
""
|
391
|
+
],
|
386
392
|
"Task Details": [
|
387
393
|
"工作詳細資料"
|
388
394
|
],
|
@@ -1096,6 +1102,9 @@
|
|
1096
1102
|
"Job templates": [
|
1097
1103
|
"工作範本"
|
1098
1104
|
],
|
1105
|
+
"Job invocations detail": [
|
1106
|
+
""
|
1107
|
+
],
|
1099
1108
|
"Run Puppet Once": [
|
1100
1109
|
""
|
1101
1110
|
],
|
@@ -1108,6 +1117,21 @@
|
|
1108
1117
|
"Run a script": [
|
1109
1118
|
""
|
1110
1119
|
],
|
1120
|
+
"Not yet": [
|
1121
|
+
""
|
1122
|
+
],
|
1123
|
+
"Effective user:": [
|
1124
|
+
""
|
1125
|
+
],
|
1126
|
+
"Started at:": [
|
1127
|
+
""
|
1128
|
+
],
|
1129
|
+
"SSH user:": [
|
1130
|
+
""
|
1131
|
+
],
|
1132
|
+
"Template:": [
|
1133
|
+
""
|
1134
|
+
],
|
1111
1135
|
"Submit": [
|
1112
1136
|
""
|
1113
1137
|
],
|
@@ -1546,29 +1570,17 @@
|
|
1546
1570
|
"Active Filters:": [
|
1547
1571
|
""
|
1548
1572
|
],
|
1573
|
+
"A plugin bringing remote execution to the Foreman, completing the config management functionality with remote management functionality.": [
|
1574
|
+
"將遠端執行帶入 Foreman 的外掛程式,搭配遠端管理功能來完成配置管理。"
|
1575
|
+
],
|
1549
1576
|
"Action with sub plans": [
|
1550
1577
|
"有子計畫的動作"
|
1551
1578
|
],
|
1552
|
-
"Check for long running tasks": [
|
1553
|
-
""
|
1554
|
-
],
|
1555
|
-
"Deliver notifications about long running tasks": [
|
1556
|
-
""
|
1557
|
-
],
|
1558
1579
|
"Import Puppet classes": [
|
1559
1580
|
"匯入 Puppet 類別"
|
1560
1581
|
],
|
1561
1582
|
"Import facts": [
|
1562
1583
|
"匯入詳情"
|
1563
|
-
],
|
1564
|
-
"A plugin bringing remote execution to the Foreman, completing the config management functionality with remote management functionality.": [
|
1565
|
-
"將遠端執行帶入 Foreman 的外掛程式,搭配遠端管理功能來完成配置管理。"
|
1566
|
-
],
|
1567
|
-
"Distribute tasks over N seconds": [
|
1568
|
-
"在幾秒間散佈工作"
|
1569
|
-
],
|
1570
|
-
"Time span": [
|
1571
|
-
"時間跨度"
|
1572
1584
|
]
|
1573
1585
|
}
|
1574
1586
|
}
|
@@ -64,10 +64,7 @@ class UiJobWizardController < ApplicationController
|
|
64
64
|
job = JobInvocation.authorized.find(params[:id])
|
65
65
|
composer = JobInvocationComposer.from_job_invocation(job, params).params
|
66
66
|
job_template_inputs = JobTemplate.authorized.find(composer[:template_invocations][0][:template_id]).template_inputs_with_foreign
|
67
|
-
|
68
|
-
provider_inputs = composer[:template_invocations][0][:provider_input_values]
|
69
|
-
provider_inputs_hash = Hash[provider_inputs.map { |input| ["inputs[#{input[:name]}]", {:advanced => true, :value => input[:value]}] }]
|
70
|
-
inputs = job_template_inputs_hash.merge(provider_inputs_hash)
|
67
|
+
inputs = Hash[job_template_inputs.map { |input| ["inputs[#{input[:name]}]", {:advanced => input[:advanced], :value => (composer[:template_invocations][0][:input_values].find { |value| value[:template_input_id] == input[:id] }).try(:[], :value)}] }]
|
71
68
|
job_organization = Taxonomy.find_by(id: job.task.input[:current_organization_id])
|
72
69
|
job_location = Taxonomy.find_by(id: job.task.input[:current_location_id])
|
73
70
|
render :json => {
|
@@ -33,7 +33,8 @@ module RemoteExecutionHelper
|
|
33
33
|
links << { title: _('Host detail'),
|
34
34
|
action: { href: current_host_details_path(host), 'data-method': 'get', id: "#{host.name}-actions-detail" } }
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
|
+
if authorized_for(hash_for_rerun_job_invocation_path(id: job_invocation, host_ids: [ host.id ], authorizer: job_hosts_authorizer))
|
37
38
|
links << { title: (_('Rerun on %s') % host.name),
|
38
39
|
action: { href: rerun_job_invocation_path(job_invocation, host_ids: [ host.id ]),
|
39
40
|
'data-method': 'get', id: "#{host.name}-actions-rerun" } }
|
@@ -55,7 +56,7 @@ module RemoteExecutionHelper
|
|
55
56
|
def job_invocations_buttons
|
56
57
|
[
|
57
58
|
documentation_button_rex('3.2ExecutingaJob'),
|
58
|
-
|
59
|
+
display_link_if_authorized(_('Run Job'), hash_for_new_job_invocation_path, {:class => "btn btn-primary"}),
|
59
60
|
]
|
60
61
|
end
|
61
62
|
|
@@ -69,12 +70,12 @@ module RemoteExecutionHelper
|
|
69
70
|
title: _('Create report for this job'),
|
70
71
|
disabled: task.pending?)
|
71
72
|
end
|
72
|
-
if authorized_for(
|
73
|
+
if authorized_for(hash_for_new_job_invocation_path)
|
73
74
|
buttons << link_to(_('Rerun'), rerun_job_invocation_path(:id => job_invocation.id),
|
74
75
|
:class => 'btn btn-default',
|
75
76
|
:title => _('Rerun the job'))
|
76
77
|
end
|
77
|
-
if authorized_for(
|
78
|
+
if authorized_for(hash_for_new_job_invocation_path)
|
78
79
|
buttons << link_to(_('Rerun failed'), rerun_job_invocation_path(:id => job_invocation.id, :failed_only => 1),
|
79
80
|
:class => 'btn btn-default',
|
80
81
|
:disabled => job_invocation.failed_hosts.none?,
|
@@ -97,6 +98,11 @@ module RemoteExecutionHelper
|
|
97
98
|
:disabled => !task.cancellable?,
|
98
99
|
:method => :post)
|
99
100
|
end
|
101
|
+
if Setting[:lab_features]
|
102
|
+
buttons << link_to(_('New UI'), new_job_invocation_detail_path(:id => job_invocation.id),
|
103
|
+
class: 'btn btn-default',
|
104
|
+
title: _('Switch to the new job invocation detail UI'))
|
105
|
+
end
|
100
106
|
return buttons
|
101
107
|
end
|
102
108
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Actions
|
2
|
+
module RemoteExecution
|
3
|
+
module EventHelpers
|
4
|
+
module ClassEventHelpers
|
5
|
+
def event_states
|
6
|
+
[]
|
7
|
+
end
|
8
|
+
|
9
|
+
def event_names
|
10
|
+
event_states.map do |state|
|
11
|
+
event_name_base + '_' + event_name_suffix(state).to_s
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def feature_job_event_names(label)
|
16
|
+
event_states.map do |state|
|
17
|
+
::Foreman::Observable.event_name_for("#{event_name_base}_#{label}_#{event_name_suffix(state)}")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.included(base)
|
23
|
+
base.extend ClassEventHelpers
|
24
|
+
end
|
25
|
+
|
26
|
+
def emit_event(execution_plan, hook)
|
27
|
+
return unless root_action?
|
28
|
+
|
29
|
+
payload = event_payload(execution_plan)
|
30
|
+
base = self.class.event_name_base
|
31
|
+
suffix = self.class.event_name_suffix(hook)
|
32
|
+
if input["job_features"]&.any?
|
33
|
+
input['job_features'].each do |feature|
|
34
|
+
name = "#{base}_#{feature}_#{suffix}"
|
35
|
+
trigger_hook name, payload: payload
|
36
|
+
end
|
37
|
+
end
|
38
|
+
trigger_hook("#{base}_#{suffix}", payload: payload)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -5,8 +5,7 @@ module Actions
|
|
5
5
|
include ::Actions::Helpers::WithDelegatedAction
|
6
6
|
include ::Actions::ObservableAction
|
7
7
|
include ::Actions::RemoteExecution::TemplateInvocationProgressLogging
|
8
|
-
|
9
|
-
execution_plan_hooks.use :emit_feature_event, :on => :success
|
8
|
+
include ::Actions::RemoteExecution::EventHelpers
|
10
9
|
|
11
10
|
middleware.do_not_use Dynflow::Middleware::Common::Transaction
|
12
11
|
middleware.use Actions::Middleware::HideSecrets
|
@@ -79,20 +78,8 @@ module Actions
|
|
79
78
|
end
|
80
79
|
end
|
81
80
|
|
82
|
-
def self.
|
83
|
-
|
84
|
-
end
|
85
|
-
|
86
|
-
def emit_feature_event(execution_plan, hook = :success)
|
87
|
-
return unless root_action?
|
88
|
-
|
89
|
-
payload = event_payload(execution_plan)
|
90
|
-
if input["job_features"]&.any?
|
91
|
-
input['job_features'].each do |feature|
|
92
|
-
name = "#{self.class.event_name_base}_#{feature}_#{self.class.event_name_suffix(hook)}"
|
93
|
-
trigger_hook name, payload: payload
|
94
|
-
end
|
95
|
-
end
|
81
|
+
def self.event_states
|
82
|
+
[:success, :failure]
|
96
83
|
end
|
97
84
|
|
98
85
|
def secrets(host, job_invocation, provider)
|
@@ -3,6 +3,7 @@ module Actions
|
|
3
3
|
class RunHostsJob < Actions::ActionWithSubPlans
|
4
4
|
include Actions::RecurringAction
|
5
5
|
include Actions::ObservableAction
|
6
|
+
include Actions::RemoteExecution::EventHelpers
|
6
7
|
|
7
8
|
middleware.use Actions::Middleware::BindJobInvocation
|
8
9
|
middleware.use Actions::Middleware::RecurringLogic
|
@@ -10,7 +11,7 @@ module Actions
|
|
10
11
|
|
11
12
|
execution_plan_hooks.use :notify_on_success, :on => :success
|
12
13
|
execution_plan_hooks.use :notify_on_failure, :on => :failure
|
13
|
-
execution_plan_hooks.use :
|
14
|
+
execution_plan_hooks.use :emit_running_event, :on => :running
|
14
15
|
|
15
16
|
class CheckOnProxyActions; end
|
16
17
|
|
@@ -28,7 +29,8 @@ module Actions
|
|
28
29
|
def plan(job_invocation)
|
29
30
|
job_invocation.task_group.save! if job_invocation.task_group.try(:new_record?)
|
30
31
|
task.add_missing_task_groups(job_invocation.task_group) if job_invocation.task_group
|
31
|
-
|
32
|
+
features = job_invocation.pattern_templates.flat_map { |t| t.remote_execution_features.pluck(:label) }.uniq
|
33
|
+
action_subject(job_invocation, job_features: features)
|
32
34
|
job_invocation.targeting.resolve_hosts! if job_invocation.targeting.dynamic? || !job_invocation.targeting.resolved?
|
33
35
|
set_up_concurrency_control job_invocation
|
34
36
|
input.update(:job_category => job_invocation.job_category)
|
@@ -158,11 +160,11 @@ module Actions
|
|
158
160
|
input[:proxy_batch_size]
|
159
161
|
end
|
160
162
|
|
161
|
-
def self.
|
162
|
-
|
163
|
+
def self.event_states
|
164
|
+
[:success, :failure, :running]
|
163
165
|
end
|
164
166
|
|
165
|
-
def
|
167
|
+
def emit_running_event(plan)
|
166
168
|
emit_event(plan, :running)
|
167
169
|
end
|
168
170
|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Api
|
2
|
+
module V2
|
3
|
+
module HostsControllerExtensions
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
def index_node_permissions
|
6
|
+
super.merge({
|
7
|
+
:can_create_job_invocations => authorized_for(:controller => 'job_invocations', :action => 'create'),
|
8
|
+
})
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -271,7 +271,6 @@ class JobInvocationComposer
|
|
271
271
|
job_invocation.pattern_template_invocations.map do |template_invocation|
|
272
272
|
params = template_invocation.attributes.slice('template_id', 'effective_user')
|
273
273
|
params['input_values'] = template_invocation.input_values.map { |v| v.attributes.slice('template_input_id', 'value') }
|
274
|
-
params['provider_input_values'] = template_invocation.provider_input_values.map { |v| v.attributes.slice('name', 'value') }
|
275
274
|
params
|
276
275
|
end
|
277
276
|
end
|
@@ -3,7 +3,11 @@ object @job_invocation
|
|
3
3
|
attributes :id, :description, :job_category, :targeting_id, :status, :start_at, :status_label, :ssh_user, :time_to_pickup
|
4
4
|
|
5
5
|
node do |invocation|
|
6
|
+
pattern_template = invocation.pattern_template_invocations.first
|
6
7
|
{
|
8
|
+
:template_id => pattern_template&.template_id,
|
9
|
+
:template_name => pattern_template&.template_name,
|
10
|
+
:effective_user => pattern_template&.effective_user,
|
7
11
|
:succeeded => invocation_count(invocation, :output_key => :success_count),
|
8
12
|
:failed => invocation_count(invocation, :output_key => :failed_count),
|
9
13
|
:pending => invocation_count(invocation, :output_key => :pending_count),
|
@@ -15,3 +19,13 @@ end
|
|
15
19
|
child :task => :dynflow_task do
|
16
20
|
attributes :id, :state
|
17
21
|
end
|
22
|
+
|
23
|
+
if params.key?(:include_permissions)
|
24
|
+
node :permissions do |invocation|
|
25
|
+
authorizer = Authorizer.new(User.current)
|
26
|
+
edit_job_templates_permission = Permission.where(name: "edit_job_templates", resource_type: "JobTemplate").first
|
27
|
+
{
|
28
|
+
"edit_job_templates" => (edit_job_templates_permission && authorizer.can?("edit_job_templates", invocation, false)),
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
@@ -31,9 +31,6 @@ export CONVERT2RHEL_DISABLE_TELEMETRY=1
|
|
31
31
|
|
32
32
|
/usr/bin/convert2rhel analyze -y
|
33
33
|
|
34
|
-
# Workaround for https://issues.redhat.com/browse/RHELC-1280
|
35
|
-
subscription-manager facts --update
|
36
|
-
|
37
34
|
if grep -q ERROR /var/log/convert2rhel/convert2rhel-pre-conversion.json; then
|
38
35
|
echo "Error: Some error(s) have been found."
|
39
36
|
echo "Exiting ..."
|
data/config/routes.rb
CHANGED
@@ -22,6 +22,8 @@ Rails.application.routes.draw do
|
|
22
22
|
match 'job_invocations/:id/rerun', to: 'react#index', :via => [:get], as: 'rerun_job_invocation'
|
23
23
|
match 'old/job_invocations/new', to: 'job_invocations#new', via: [:get], as: 'form_new_job_invocation'
|
24
24
|
match 'old/job_invocations/:id/rerun', to: 'job_invocations#rerun', via: [:get, :post], as: 'form_rerun_job_invocation'
|
25
|
+
match 'experimental/job_invocations_detail/:id', to: 'react#index', :via => [:get], as: 'new_job_invocation_detail'
|
26
|
+
|
25
27
|
resources :job_invocations, :only => [:create, :show, :index] do
|
26
28
|
collection do
|
27
29
|
get 'preview_job_invocations_per_host'
|
@@ -9,7 +9,7 @@ class AddHostIdToTemplateInvocation < ActiveRecord::Migration[4.2]
|
|
9
9
|
FakeTemplateInvocation.reset_column_information
|
10
10
|
|
11
11
|
say 'Migrating existing execution locks to explicit relations, this may take a while'
|
12
|
-
FakeTemplateInvocation.all.
|
12
|
+
FakeTemplateInvocation.all.find_each do |template_invocation|
|
13
13
|
task = ForemanTasks::Task.for_action_types('Actions::RemoteExecution::RunHostJob').joins(:locks).where(
|
14
14
|
:'foreman_tasks_locks.resource_type' => 'TemplateInvocation',
|
15
15
|
:'foreman_tasks_locks.resource_id' => template_invocation.id
|
@@ -5,7 +5,7 @@ class MigrateToTaskGroups < ActiveRecord::Migration[4.2]
|
|
5
5
|
|
6
6
|
def up
|
7
7
|
say 'Migrating from locks to task groups'
|
8
|
-
FakeJobInvocation.where('task_group_id IS NULL AND task_id IS NOT NULL').
|
8
|
+
FakeJobInvocation.where('task_group_id IS NULL AND task_id IS NOT NULL').find_each do |job_invocation|
|
9
9
|
task_group = JobInvocationTaskGroup.new
|
10
10
|
task_group.task_ids = [job_invocation.task_id]
|
11
11
|
task_group.save!
|