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
@@ -0,0 +1 @@
1
+ locales['foreman_remote_execution'] = locales['foreman_remote_execution'] || {}; locales['foreman_remote_execution']['zh_CN'] = {"domain":"foreman_remote_execution","locale_data":{"foreman_remote_execution":{"":{"Project-Id-Version":"foreman_remote_execution 9.0.1","Report-Msgid-Bugs-To":"","PO-Revision-Date":"2016-02-15 13:54+0000","Last-Translator":"FULL NAME <EMAIL@ADDRESS>","Language-Team":"Chinese (China) (http://www.transifex.com/foreman/foreman/language/zh_CN/)","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Language":"zh_CN","Plural-Forms":"nplurals=1; plural=0;","lang":"zh_CN","domain":"foreman_remote_execution","plural_forms":"nplurals=1; plural=0;"},"Another interface is already set as execution. Are you sure you want to use this one instead?":["已经将另一个接口设置为执行。您确定要改用这个吗?"],"There was an error while updating the status, try refreshing the page.":["更新状态时出错,请尝试刷新页面。"],"List foreign input sets":["列出外部输入集"],"Show foreign input set details":["显示外部输入集详细信息"],"Target template ID":["目标模板 ID"],"Include all inputs from the foreign template":["在外部模板中包含所有输入格式"],"A comma separated list of input names to be included from the foreign template.":["要从外部模板中包含的输入名称的列表,以逗号分隔。"],"Input set description":["输入集描述"],"Create a foreign input set":["建立外部输入集"],"Delete a foreign input set":["删除外部输入集"],"Update a foreign input set":["更新外部输入集"],"List job invocations":["列出作业调用"],"Show job invocation":["显示作业调用"],"Show Job status for the hosts":["显示主机的作业状态"],"The job template to use, parameter is required unless feature was specified":["要使用的任务模板,除非已指定功能,否则参数是必需的"],"Invocation type, one of %s":["调用类型,%s 其中之一"],"Execute the jobs on hosts in randomized order":["以随机顺序在主机上执行作业"],"Inputs to use":["要使用的輸入"],"SSH provider specific options":["SSH 供应商特定的选项"],"What user should be used to run the script (using sudo-like mechanisms). Defaults to a template parameter or global setting.":["应该使用什么用户来运行脚本(使用类似于 sudo 的机制)。默认为模板参数或全局设置。"],"Set password for effective user (using sudo-like mechanisms)":["为有效用户设置密码(使用类似 sudo 的机制)"],"Set SSH user":[""],"Set SSH password":["设置 SSH 密码"],"Set SSH key passphrase":["设置 SSH 密钥口令"],"Create a recurring job":["创建一个重复运行的作业"],"How often the job should occur, in the cron format":["作业运行的频率,使用 cron 格式"],"Repeat a maximum of N times":["最多重复 N 次"],"Perform no more executions after this time":["在此时间后不再执行"],"Designation of a special purpose":["设计特殊目的"],"Schedule the job to start at a later time":["把作业调度在一个以后的时间开始"],"Schedule the job for a future time":["把作业调度到一个以后的时间"],"Indicates that the action should be cancelled if it cannot be started before this time.":["这代表,如果操作无法在这个时间前开始则操作应该被取消。"],"Control concurrency level and distribution over time":["控制并发级别和时间分布"],"Distribute tasks over N seconds":["在 N 秒内分配任务"],"Run at most N tasks at a time":["一次最多运行 N 个任务"],"Override the description format from the template for this invocation only":["只为此调用覆盖来自模板的描述格式"],"Override the timeout interval from the template for this invocation only":["只为此调用使用该模板覆盖超时间隔"],"Remote execution feature label that should be triggered, job template assigned to this feature will be used":["应触发的远程执行功能标签,将使用分配给此功能的任务模板"],"Override the global time to pickup interval for this invocation only":[""],"Create a job invocation":["创建一个作业调用"],"Get output for a host":["获取主机的输出"],"Get raw output for a host":["获取主机的原始输出"],"Cancel job invocation":["取消作业调用"],"The job could not be cancelled.":["此作业无法取消。"],"Rerun job on failed hosts":["在失败的主机上重新运行作业"],"Could not rerun job %{id} because its template could not be found":["无法重新运行作业 %{id},因为它的模板没有找到"],"Get outputs of hosts in a job":["获取作业中主机的输出"],"Host with id '%{id}' was not found":["找不到 id 为 '%{id}' 的主机"],"Only one of feature or job_template_id can be specified":["只能指定一个功能或 job_template_id"],"List job templates":["列出作业模板"],"List job templates per location":["列出各個位置上的工作範本"],"List job templates per organization":["列出每个机构的作业模板"],"Import a job template from ERB":["从 ERB 导入作业模版"],"Template ERB":["模版 ERB"],"Overwrite template if it already exists":["如果已存在则覆盖模版"],"Export a job template to ERB":["把作业模板导出到 ERB"],"Show job template details":["显示作业模板详情"],"Template name":["模板名称"],"Job category":["作业类别"],"This template is used to generate the description. Input values can be used using the syntax %{package}. You may also include the job category and template name using %{job_category} and %{template_name}.":["这个模块用来生成描述。输入值可以使用语法 %{package}。您可以使用 %{job_category} 和 %{template_name} 来包括作业类型和模板名称。"],"Provider type":["供应商类型"],"Whether or not the template is locked for editing":["此模板是否被锁定用于编辑"],"Effective user options":["有效的用户选项"],"What user should be used to run the script (using sudo-like mechanisms)":["应该使用什么用户来运行脚本(使用类似于 sudo 的机制)"],"Whether it should be allowed to override the effective user from the invocation form.":["是否应允许从调用表单中覆盖有效用户。"],"Whether the current user login should be used as the effective user":["当前用户登录名是否应用作有效用户"],"Create a job template":["创建作业模板"],"Update a job template":["更新作业模板"],"Template version":["模板版本"],"Delete a job template":["删除作业模板"],"Clone a provision template":["克隆置备模板"],"List remote execution features":["列出远程执行功能"],"Show remote execution feature":["显示远程执行功能"],"Job template ID to be used for the feature":["用于功能的作业模板 ID"],"List template invocations belonging to job invocation":["列出属于作业调用的模板调用"],"Identifier of the Host interface for Remote execution":["主机接口的标识符,用于远程执行"],"Set 'host_registration_remote_execution_pull' parameter for the host. If it is set to true, pull provider client will be deployed on the host":[""],"List of proxy IDs to be used for remote execution":["用于远程执行的代理 ID 列表"],"Trying to abort the job":["尝试中止作业"],"Trying to cancel the job":["尝试取消作业"],"The job cannot be aborted at the moment.":["目前无法终止作业。"],"The job cannot be cancelled at the moment.":["目前无法取消作业。"],"Problem with previewing the template: %{error}. Note that you must save template input changes before you try to preview it.":["预览模板有问题:%{error}。请注意,在预览前需要保存模板输入的改变。"],"Job template imported successfully.":["成功导入作业模版。"],"Unable to save template. Correct highlighted errors":["无法保存模版。纠正高亮显示的错误。"],"Run":["运行"],"Schedule Remote Job":["调度远程作业"],"Jobs":["工作"],"Job invocations":["作业调用"],"%s":["%s"],"Web Console":["Web 控制台"],"Success":["成功"],"Failed":["失败"],"Pending":["待处理"],"Cancelled":["已取消"],"queued to start executing in %{time}":["已排队,在 %{time} 开始实施"],"queued":["已排队"],"running %{percent}%%":["运行 %{percent}%%"],"succeeded":["已成功"],"cancelled":["已取消"],"failed":["失败"],"unknown status":["未知的状态"],"Any Organization":["任意机构"],"Any Location":["任意位置"],"error":["错误"],"Host detail":["主机详情"],"Rerun on %s":["在 %s 重新运行"],"Host task":["主机任务"],"N/A":["不适用"],"Run Job":["运行作业"],"Create Report":["创建报告"],"Create report for this job":["为这个作业创建报告"],"Rerun":["重新运行"],"Rerun the job":["重新运行作业"],"Rerun failed":["重新运行失败"],"Rerun on failed hosts":["在失败的主机上重新运行"],"Job Task":["作业任务"],"See the last task details":["查看最后的任务详情"],"Cancel Job":["取消作业"],"Try to cancel the job":["尝试取消作业"],"Abort Job":["终止作业"],"Try to abort the job without waiting for the results from the remote hosts":["尝试在不等待远程主机的结果情况下终止作业"],"Task Details":["任务详情"],"See the task details":["查看任务详情"],"Try to cancel the job on a host":["尝试取消主机上的作业"],"Try to abort the job on a host without waiting for its result":["尝试在不等待结果的情况下终止主机中的作业"],"Could not render the preview because no host matches the search query.":["由于没有主机匹配搜索查询,因此无法呈现预览。"],"in %s":["在 %s"],"%s ago":["%s 前"],"Use default description template":["使用默认描述模板"],"Description template":["描述模板"],"This template is used to generate the description.<br/>Input values can be used using the syntax %{package}.<br/>You may also include the job category and template<br/>name using %{job_category} and %{template_name}.":["这个模块用来生成描述。<br/>输入值可以使用语法%{package}。<br/>您可以使用 {job_category} 和 {template_name} 来<br/>包括作业类型和模板名称。"],"Could not use any template used in the job invocation":["无法使用作业调用中使用的任何模板"],"Failed rendering template: %s":["呈现模板失败:%s"],"Task cancelled":["任务被取消"],"Job execution failed":["作业执行失败"],"%{description} on %{host}":["%{host} 的 %{description}"],"Remote action:":["远程操作:"],"Job cancelled by user":["作业被用户取消"],"Exit status: %s":["退出状态:%s"],"Job finished with error":["作业完成但带有错误"],"Error loading data from proxy":["从代理加载数据时出错"],"User can not execute job on host %s":["用户不能在主机 %s 上执行作业"],"User can not execute this job template":["用户无法执行这个作业模板"],"User can not execute job on infrastructure host %s":["用户无法在基础架构主机 %s 上执行作业"],"User can not execute this job template on %s":["用户不能在 %s 上执行这个作业模板"],"The only applicable proxy %{proxy_names} is down":["唯一可用的代理 %{proxy_names} 已停机"],"Could not use any proxy for the %{provider} job. Consider configuring %{global_proxy}, %{fallback_proxy} in settings":["无法为 %%{provider} 作业使用任何代理。考虑在设置中配置 %{global_proxy} 和 %{fallback_proxy}"],"REX job has succeeded - %s":["REX 作业已成功 - %s"],"REX job has failed - %s":["REX 作业已失败 - %s"],"included template '%s' not found":["没有找到包括的模板 '%s'"],"input macro with name '%s' used, but no input with such name defined for this template":["使用名称为 '%s' 的输入宏,当没有为这个模板定义使用这个名称的输入"],"Unable to fetch public key":["无法获取公共密钥"],"Unable to remove host from known hosts":["无法从已知主机中删除主机"],"REX job has finished - %s":["REX 作业已完成 - %s"],"Should this interface be used for remote execution?":["该接口应该用于远程执行吗?"],"Interface with the '%s' identifier was specified as a remote execution interface, however the interface was not found on the host. If the interface exists, it needs to be created in Foreman during the registration.":["带有'%s'标识符的接口被指定为远程执行接口,但是在主机上找不到该接口。如果该接口存在,则需要在注册过程中在 Foreman 中创建该接口。"],"host already has an execution interface":["主机已有一个执行接口"],"This template is locked. Please clone it to a new template to customize.":["此模板已锁定。请将它克隆到一个新的模板进行定制。"],"Circular dependency detected in foreign input set '%{template}' -> '%{target_template}'. Templates stack: %{templates_stack}":["在外部输入设置中发现了循环的依赖关系 '%{template}' -> '%{target_template}'。模板堆栈:%{templates_stack}"],"Execution":["执行"],"Last execution succeeded":["最后成功的执行"],"No execution finished yet":["尚未执行完毕"],"Last execution cancelled":["最后的执行已取消"],"Last execution failed":["最后的执行失败"],"Unknown execution status":["未知的执行状态"],"Recursive rendering of templates detected":["检测到递归的模板呈现"],"error during rendering: %s":["呈现时出错:%s"],"template":["模板"],"Cannot specify both bookmark_id and search_query":["无法同时指定 bookmark_id 和 search_query"],"Unknown input %{input_name} for template %{template_name}":["未知输入%{input_name}模板用于模板%{template_name}"],"Template with id '%{id}' was not found":["找不到 id 为 '%{id}' 的模板"],"Feature input %{input_name} not defined in template %{template_name}":["功能输入%{input_name} 未在模板%{template_name} 中定义"],"No template mapped to feature %{feature_name}":["没有映射到功能 %{feature_name} 的模板"],"The template %{template_name} mapped to feature %{feature_name} is not accessible by the user":["用户无法访问映射到功能 %{feature_name} 的模板 %{template_name}"],"Job Invocation":["作业调用"],"Duplicated inputs detected: %{duplicated_inputs}":["检测到重复的输入:%{duplicated_inputs}"],"Unknown remote execution feature %s":["未知的远程执行功能 %s"],"Effective user method \\\"%{current_value}\\\" is not one of %{valid_methods}":["有效的用户方法 \\\"%{current_value}\\\" 不是 %{valid_methods} 之一"],"Could not find any suitable interface for execution":["无法找到适合执行的接口"],"Subscribe to my failed jobs":["订阅到我失败的作业"],"Subscribe to my succeeded jobs":["订阅到我成功的作业"],"Subscribe to all my jobs":["订阅到所有主机"],"Script":["脚本"],"Static Query":["静态查询"],"Dynamic Query":["动态查询"],"Alphabetical":["按字母"],"Randomized":["随机化"],"Cannot resolve hosts without a user":["无法解析没有用户的主机"],"Cannot resolve hosts without a bookmark or search query":["无法解析没有书签或搜索查询的主机"],"Must select a bookmark or enter a search query":["必须选择一个书签或输入一个搜索查询"],"Input":["输入"],"Not all required inputs have values. Missing inputs: %s":["並不是所有需要的輸入都有值。缺少的输入:%s"],"Internal proxy selector can only be used if Katello is enabled":["如果启用了Katello,则只能使用内部代理选择器"],"default_capsule method missing from SmartProxy":["SmartProxy 中缺少 default_capsule 方法"],"Can't find Job Invocation for an id %s":["无法为 ID %s 找到作业调用"],"Latest Jobs":["最新的作业"],"Name":["名称"],"State":["状态"],"Started":["已启动"],"No jobs available":["没有可用的作业"],"Results":["结果"],"Schedule":["调度"],"Concurrency level limited to":["对...的并发等级限制"],"tasks at a time":["在一个时间点的任务"],"Set to distribute over":["设置为通过...分配"],"seconds":["秒"],"Scheduled to start before":["调度在这个时间前开始"],"Scheduled to start at":["调度开始于"],"Timeout to kill after":["超时至终止时间"],"Target hosts":["目标主机"],"Bookmark":["书签"],"Manual selection":["手动选择"],"using ":["使用 "],"Execution order":["执行顺序"],"Organization":["机构"],"Location":["位置"],"SSH User":["SSH 用户"],"Evaluated at:":["评估于:"],"User Inputs":["用户输入"],"Description":["描述"],"Job template":["作业模板"],"Resolves to":["解析到"],"hosts":["主机"],"Refresh":["刷新"],"Preview":["预览"],"Display advanced fields":["显示高级字段"],"Hide advanced fields":["隐藏高级字段"],"SSH user":[""],"A user to be used for SSH.":[""],"Effective user":["有效的用户"],"A user to be used for executing the script. If it differs from the SSH user, su or sudo is used to switch the accounts.":["要使用執行這 script 的使用者。如果使用者與 SSH 使用者不同,會用 su 或 sudo 來切換使用者。"],"Timeout to kill":["超时至结束"],"Time in seconds from the start on the remote host after which the job should be killed.":["在远程主机上开始后,以秒计算时间,之后结束作业。"],"Time to pickup":[""],"Interval in seconds, if the job is not picked up by a client within this interval it will be cancelled.":[""],"Password":["密码"],"Password is stored encrypted in DB until the job finishes. For future or recurring executions, it is removed after the last execution.":["在作业完成之前,密码都会以加密方式存储在数据库中。对于未来或周期性执行,该密码将在最后一次执行后被删除。"],"Private key passphrase":["私钥密码口令"],"Key passhprase is only applicable for SSH provider. Other providers ignore this field. <br> Passphrase is stored encrypted in DB until the job finishes. For future or recurring executions, it is removed after the last execution.":["密钥口令只适用于 SSH 提供商。其他提供商会忽略此字段。<br>在任务完成之前,都会以加密方式存储在数据库中。对于未来或周期性执行,该密码将在最后一次执行后被删除。"],"Effective user password":["有效用户密码"],"Effective user password is only applicable for SSH provider. Other providers ignore this field. <br> Password is stored encrypted in DB until the job finishes. For future or recurring executions, it is removed after the last execution.":["有效用户密码只适用于 SSH 提供商。其他提供商会忽略此字段。<br>在任务完成之前,密码会以加密方式存储在数据库中。对于未来或周期性执行,该密码将在最后一次执行后删除。"],"Concurrency level":["并发等級"],"Run at most N tasks at a time. If this is set and proxy batch triggering is enabled, then tasks are triggered on the smart proxy in batches of size 1.":["一次最多运行 N 个任务。如果设置了此选项并启用了代理批处理触发,则将在智能代理上以大小为 1 的批处理触发任务。"],"Time span":["时间跨度"],"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.":["在 N 秒内分配执行。如果设置了此选项并启用了代理批处理触发,则将在智能代理上以大小为 1 的批处理触发任务。"],"Execution ordering":["执行顺序"],"Execution ordering determines whether the jobs should be executed on hosts in alphabetical order or in randomized order.<br><ul><li><b>Ordered</b> - executes the jobs on hosts in alphabetical order</li><li><b>Randomized</b> - randomizes the order in which jobs are executed on hosts</li></ul>":["执行顺序确定了应按字母顺序还是随机顺序在主机上执行作业。<br><ul><li><b>Ordered</b> - 以字母顺序在主机上执行作业</li><li><b>Randomized</b> - 以随机顺序在主机上执行作业</li></ul>"],"Type of query":["查询类型"],"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>":[""],"The final host list may change because the selected query is dynamic. It will be rerun during execution.":["由于所选查询是动态的,因此最终主机列表可能会更改。将在执行期间重新运行。"],"...and %{count} more":["...和 %{count} 个更多"],"No hosts found.":["找不到主机。"],"Close":["关闭"],"Current organization %{org_c} is different from job's organization %{org_j}.":["当前机构 %{org_c} 与作业机构 %{org_j} 不同。"],"Current location %{loc_c} is different from job's location %{loc_j}.":["当前位置 %{loc_c} 与作业位置 %{loc_j} 不同。"],"The dynamic query '%{query}' was not resolved yet. The list of hosts to which it would resolve now can be seen %{here}.":["动态查询 '%{query}' 还没有解析。现在应该解析的主机列表可在 %{here} 查看。"],"here":["这里"],"effective user":["有效用户"],"Total hosts":["主机总数"],"Hosts gone missing":["主机丢失"],"This can happen if the host is removed or moved to another organization or location after the job was started":["如果在作业开始后将主机删除或移动到其他机构或位置,则可能会发生这种情况"],"Providers and templates":["供应商和模板"],"User input":["用户输入"],"Value":["值"],"Search Query":["搜索查询"],"Status":["状态"],"Succeeded":["已成功"],"Start":["开始"],"Job invocation":["工作调用"],"Use new job wizard":[""],"Overview":["概况"],"Preview templates":["预览模板"],"Recurring logic":["重复逻辑"],"Job Invocations":["作业调用"],"Foreman can run arbitrary commands on remote hosts using different providers, such as SSH or Ansible. Communication goes through the Smart Proxy so Foreman does not have to have direct access to the target hosts and can scale to control many hosts.":["Foreman 可以在远程主机上使用不同的方法(如 SSH 或 Ansible)运行命令。网络交流会通过智能代理进行,因此 Foreman 不需要直接访问目标主机,并可以扩展来控制多个主机。"],"Learn more about this in the documentation.":["如需了解更多信息,请参阅文档。"],"Job":["任务"],"Type":["类型"],"Add Foreign Input Set":["添加外部输入集"],"add an input set for this template to reference a different template inputs":["为此模板添加一个输入集,以引用其他模板输入"],"Snippet":["程序代码片段"],"Select an ERB file to upload in order to import a job template. The template must contain metadata in the first ERB comment.":["选择要上传的 ERB 文件来导入任务模版。这个模版必须包含第一个 ERB 注释里的元数据。"],"Overwrite":["覆盖"],"Whether to overwrite the template if it already exists":["如果已存在是否覆盖模版"],"Job Templates":["作业模板"],"Edit %s":["编辑 %s"],"Edit Job Template":["编辑作业模板"],"Import":["导入"],"New Job Template":["新作业模板"],"JobTemplate|Name":["JobTemplate|Name"],"JobTemplate|Snippet":["JobTemplate|Snippet"],"JobTemplate|Locked":["JobTemplate|Locked"],"Actions":["操作"],"This template is locked for editing.":["该模板被锁定进行编辑。"],"The execution interface is used for remote execution":["用于远程执行的执行接口"],"Remote execution":["远程执行"],"Remote Execution":["远程执行"],"Proxies":["代理服务器"],"Select as many remote execution proxies as applicable for this subnet. When multiple proxies with the same provider are added, actions will be load balanced among them.":["选择适用于该子网的尽可能多的远程执行代理。当添加具有相同提供者的多个代理时,将在它们之间平衡操作。"],"You are not allowed to see the currently assigned template. Saving the form now would unassign the template.":["您没有权限查看当前分配的模板。现在保存表单将取消分配模板。"],"Remote Execution Features":["远程执行功能"],"Label":["标签"],"Edit Remote Execution Feature":["编辑远程执行功能"],"A job '%{job_name}' has %{status} at %{time}":["作业 '%{job_name}' 的 %%{status}(在 %%{time})"],"Job result":["作业结果"],"Failed hosts":["失败的主机"],"See more details at %s":["在 %s 参阅更多细节"],"Foreign input set":["外来输入集"],"remove template input set":["删除模板输入集"],"A comma separated list of input names to be excluded from the foreign template.":["以逗号分隔的输入名称列表,将从外部模板中排除。"],"Template Invocation for %s":["%s 的模板调用"],"Back to Job":["回到作业"],"Toggle command":["切换命令"],"Toggle STDERR":["切换 STDERR"],"Toggle STDOUT":["切换 STDOUT"],"Toggle DEBUG":["切换 DEBUG"],"Target: ":["目标:"],"using Smart Proxy":["使用智能代理"],"Scroll to bottom":["滚动到底部"],"Scroll to top":["滚动到顶部"],"Could not display data for job invocation.":["无法显示用于作业调用的数据。"],"Unsupported or no operating system found for this host.":["该主机不支持或找不到操作系统。"],"A job '%{subject}' has finished successfully":["作业 '%{subject}' 已成功完成"],"Job Details":["作业详情"],"A job '%{subject}' has failed":["作业 '%%{subject}' 已失败"],"Remote execution job":["远程执行作业"],"A notification when a job finishes":["作业完成后的通知"],"Unable to create mail notification: %s":["无法创建邮件通知:%s"],"Search the host for any proxy with Remote Execution, useful when the host has no subnet or the subnet does not have an execution proxy":["在主机上搜索具有远程执行功能的任何代理,当主机没有子网或子网没有执行代理时,此命令很有用"],"Fallback to Any Proxy":["退回至任何代理服务器"],"Search for remote execution proxy outside of the proxies assigned to the host. The search will be limited to the host's organization and location.":["在分配给主机的代理之外搜索远程执行代理。搜索将会限制在主机的机构和位置内。"],"Enable Global Proxy":["启用全局代理服务器"],"Default user to use for SSH. You may override per host by setting a parameter called remote_execution_ssh_user.":["SSH 默认使用的用户。可通过设置名为 remote_execution_ssh_user 的参数来按主机覆盖"],"Default user to use for executing the script. If the user differs from the SSH user, su or sudo is used to switch the user.":["用于执行脚本的默认用户。如果用户与 SSH 用户不同,则使用 su 或 sudo 切换用户。"],"Effective User":["有效用户"],"What command should be used to switch to the effective user. One of %s":["应该使用什么命令切换到有效用户。%s 之一"],"Effective User Method":["有效用户方法"],"Whether we should sync templates from disk when running db:seed.":["运行 db:seed 时是否应该从磁盘同步模板。"],"Sync Job Templates":["同步作业模板"],"Port to use for SSH communication. Default port 22. You may override per host by setting a parameter called remote_execution_ssh_port.":["要用于 SSH 通信的端口。默认端口 22。您可以通过设置名为 remote_execution_ssh_port 的参数来按主机进行覆盖。"],"SSH Port":["SSH 端口"],"Should the ip addresses on host interfaces be preferred over the fqdn? It is useful when DNS not resolving the fqdns properly. You may override this per host by setting a parameter called remote_execution_connect_by_ip. For dual-stacked hosts you should consider the remote_execution_connect_by_ip_prefer_ipv6 setting":["相比 fqdn,是否应优先使用主机接口上的 ip 地址?当 DNS 未能成功解析 fqdns 时,它很有用。您可以通过设置参数 remote_execution_connect_by_ip 来覆盖每个主机的这个地址。对于多堆栈的主机,您应该考虑 remote_execution_connect_by_ip_prefer_ipv6 设置"],"Connect by IP":["按 IP 连接"],"When connecting using ip address, should the IPv6 addresses be preferred? If no IPv6 address is set, it falls back to IPv4 automatically. You may override this per host by setting a parameter called remote_execution_connect_by_ip_prefer_ipv6. By default and for compatibility, IPv4 will be preferred over IPv6 by default":["使用 ip 地址进行连接时,是否应该首选 IPv6 地址?如果没有设置 IPv6 地址,它会自动回退到使用 IPv4。您可以通过设置名为remote_execution_connect_by_ip_prefer_prefer_ipv6 的参数来针对单个主机进行覆盖。默认情况下,为了实现兼容的目的,IPv4 将优先于 IPv6。"],"Prefer IPv6 over IPv4":["首选 IPv6 而不是 IPv4 "],"Default password to use for SSH. You may override per host by setting a parameter called remote_execution_ssh_password":["SSH 默认使用的密码。可通过设置名为 remote_execution_ssh_password 的参数来按主机覆盖"],"Default SSH password":["默认 SSH 密码"],"Default key passphrase to use for SSH. You may override per host by setting a parameter called remote_execution_ssh_key_passphrase":["SSH 默认使用的密钥口令。可通过设置名为 remote_execution_ssh_key_passphrase 的参数来按主机覆盖"],"Default SSH key passphrase":["默认的 SSH 密钥口令"],"Amount of workers in the pool to handle the execution of the remote execution jobs. Restart of the dynflowd/foreman-tasks service is required.":["在池中用来处理远程执行任务的工作节点的数量。需要重启 dynflowd/foreman-tasks 服务。"],"Workers pool size":["工作节点池的大小"],"When enabled, working directories will be removed after task completion. You may override this per host by setting a parameter called remote_execution_cleanup_working_dirs.":["如果启用,工作目录会在任务完成后被删除。使用名为 remote_execution_cleanup_working_dirs 的参数可以在相关主机上覆盖这个设置。"],"Cleanup working directories":["清理工作目录"],"Where to find the Cockpit instance for the Web Console button. By default, no button is shown.":["在哪里可以找到 Web Console 按钮的 Cockpit 实例。默认情况下,不显示任何按钮。"],"Cockpit URL":["Cockpit URL"],"Choose a job template that is pre-selected in job invocation form":["选择在作业调用表单中预先选择的作业模板"],"Form Job Template":["来自作业模板"],"Select a report template used for generating a report for a particular remote execution job":["选择用于生成特定远程执行作业的报告模板"],"Job Invocation Report Template":["作业调用报告模板"],"Time in seconds within which the host has to pick up a job. If the job is not picked up within this limit, the job will be cancelled. Defaults to 1 day.":[""],"Job templates":["作业模板"],"Run Puppet Once":["运行 Puppet 一次"],"Perform a single Puppet run":["执行一个单独 Puppet 运行"],"Run Script":[""],"Run a script":[""],"Does not repeat":["没有创建"],"Cronline":["Cronline"],"Monthly":["每月"],"Weekly":["每周"],"Daily":["每日"],"Hourly":["每小时"],"Immediate execution":[""],"Future execution":[""],"Recurring execution":[""],"Category and template":[""],"Target hosts and inputs":["目标主机和输入"],"Advanced fields":["高级项"],"Review details":["审阅详情"],"Type of execution":[""],"Hosts":["主机"],"Host collections":["主机集合"],"Host groups":["主机组"],"Search query":["搜索查询"],"Run job":["运行作业"],"Use old form":[""],"Current organization %s is different from job's organization %s. This job may run on different hosts than before.":[""],"Current location %s is different from job's location %s. This job may run on different hosts than before.":[""],"'Starts before' date must in the future":[""],"Please go back to \\\\\\\"Schedule\\\\\\\" - \\\\\\\"Future execution\\\\\\\" step to fix the error":[""],"Use legacy form":[""],"Edit job description template":["编辑作业描述模板"],"Preview job description":["预览作业描述"],"For example: 1, 2, 3, 4, 5...":["例如:1, 2, 3, 4, 5..."],"Key passphrase is only applicable for SSH provider. Other providers ignore this field. Passphrase is stored encrypted in DB until the job finishes. For future or recurring executions, it is removed after the last execution.":["密钥口令只适用于 SSH 提供商。其他提供商会忽略此字段。在任务完成之前,都会以加密方式存储在数据库中。对于未来或周期性执行,该密码将在最后一次执行后被删除。"],"Effective user password is only applicable for SSH provider. Other providers ignore this field. Password is stored encrypted in DB until the job finishes. For future or recurring executions, it is removed after the last execution.":["有效用户密码只适用于 SSH 提供商。其他提供商会忽略此字段。在任务完成之前,密码会以加密方式存储在数据库中。对于未来或周期性执行,该密码将在最后一次执行后删除。"],"All fields are required.":["各个项都需要。"],"Error":["错误"],"Errors:":["错误:"],"Categories list failed with:":["类别列表失败并带有:"],"Templates list failed with:":["模板列表失败并带有:"],"Template failed with:":["模板失败并带有:"],"Preview Hosts":["预览主机"],"...and %s more":["...和 %s 个更多"],"%s more":[""],"Clear all filters":[""],"There are no available input fields for the selected template.":["所选模板没有可用的输入字段。"],"Please select at least one host":[""],"Please enter a search query":[""],"Please select at least one host collection":[""],"Please select at least one host group":[""],"Filter by hosts":["按主机过滤"],"Filter by host collections":["按主机集过滤"],"Filter by host groups":["按主机组过滤"],"Apply to":["应用到"],"Never":["决不"],"After %s occurences":[""],"Every hour at minute %s":[""],"Every day at %s":[""],"Every week on %s at %s":[""],"Every month on %s at %s":[""],"Cron line":["Cron 行"],"No Target Hosts":["没有目标主机"],"view host names":[""],"Hide all advanced fields":["隐藏所有高级字段"],"Show all advanced fields":["现实所有高级字段"],"Schedule type":["调度类型"],"Recurrence":["重复发生"],"Starts at":["开始于"],"Starts Before":[""],"Starts":["开始"],"Now":[""],"Repeats":["重复"],"Ends":["结束"],"Purpose":["目的"],"Static query":["静态查询"],"Dynamic query":["动态查询"],"Description Template":["描述模板"],"A special label for tracking a recurring job. There can be only one active job with a given purpose at a time.":["用于跟踪周期性作业的特殊标签。一次只能有一个具有给定目的的活跃作业。"],"Query type":["查询类型"],"Type has impact on when is the query evaluated to hosts.":["类型会影响到什么时候会评估到主机。"],"evaluates just after you submit this form":["提交此表单后评估"],"evaluates just before the execution is started, so if it's planned in future, targeted hosts set may change before it":[""],"Cron line format 'a b c d e', where:":["Cron 行格式 'a b c d e', 其中:"],"is minute (range: 0-59)":["分钟(范围:0-59)"],"is hour (range: 0-23)":["小时(范围:0-23)"],"is day of month (range: 1-31)":["日期(范围:1-31)"],"is month (range: 1-12)":["月份(范围:1-12)"],"is day of week (range: 0-6)":["星期几(范围:0-6)"],"At":["位于"],"Invalid time format":["无效的时间格式"],"At minute":["于分钟"],"range: 0-59":[""],"Create":["创建"],"Minute can only be a number between 0-59":[""],"Days":["天"],"Days of week":["星期几"],"For Future execution a 'Starts at' date or 'Starts before' date must be selected. Immediate execution can be selected in the previous step.":[""],"'Starts before' date must be after 'Starts at' date":[""],"Clear input":[""],"Starts before":["开始前"],"End time needs to be after start time":["结束时间需要在开始时间后"],"On":["上"],"After":[""],"Repeat amount can only be a positive number":["重复数量只能是一个正数"],"occurences":[""],"Select the type of execution":[""],"Execute the job now.":[""],"Execute the job later, at a scheduled time.":[""],"Execute the job on a repeating schedule.":[""],"Invalid date":["无效的日期"],"open-help-tooltip-button":["open-help-tooltip-button"],"Reset to default":["重置为默认"],"Has to be a positive number":["必须为一个正数"],"Please refine your search.":["请重新调整您的搜索。"],"You have %s results to display. Showing first %s results":["您有 %s 个结果现实。显示前 %s 个结果"],"Opening job invocation form":[""],"%s job has been invoked":["%s 任务已被调用"],"Schedule a job":["调度一个作业"],"Recent jobs":["最近的作业"],"View all jobs":["查看所有作业"],"View finished jobs":["查看完成的作业"],"View running jobs":["查看运行的作业"],"View scheduled jobs":["查看调度的作业"],"Finished":["完成"],"Running":["執行中"],"Scheduled":["调度的"],"No results found":["没有找到结果"],"Remote Execution Interface":["远程执行接口"],"yes":["是"],"no":["否"],"Inherit from host parameter":["从主机参数继承"],"Yes (override)":["是(覆盖)"],"No (override)":["否(覆盖)"],"REX pull mode":[""],"Setup remote execution pull mode. If set to `Yes`, pull provider client will be deployed on the registered host. The inherited value is based on the `host_registration_remote_execution_pull` parameter. It can be inherited e.g. from host group, operating system, organization. When overridden, the selected value will be stored on host parameter level.":[""],"Host":["主机"],"Active Filters:":[""],"Action with sub plans":["有子计划的操作"],"Import Puppet classes":["导入 Puppet 类"],"Import facts":["导入事实"],"A plugin bringing remote execution to the Foreman, completing the config management functionality with remote management functionality.":["一个将远程执行带到 Foreman 的插件,通过远程管理功能来完成配置管理功能。"],", and %s more":[", 和 %s 个更多"],"Category and Template":["类别和模板"],"Clear filters":["清除过滤器"],"#~ \"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> - evalu\"#~ \"ates just before the execution is started, so if it's planed in future, target\"#~ \"ed hosts set may change before it</li></ul>\"":["#~ \"类型会对何时评估主机查询产生影响。<br><ul><li><b>静态</b> - 提交此表格后立即评估</li><li><b>动态</b> - 开始执行前进\"#~ \"行评估,因此,如果以后计划,则目标主机集可能会在它之前发生变化</li></ul>\""],"#~ \"evaluates just before the execution is started, so if it's planed in future, t\"#~ \"argeted hosts set may change before it\"":["在执行启动前进行评估,因此如果将来需要它,则目标主机设置可能会在它之前改变。"]}}};
@@ -0,0 +1 @@
1
+ locales['foreman_remote_execution'] = locales['foreman_remote_execution'] || {}; locales['foreman_remote_execution']['zh_TW'] = {"domain":"foreman_remote_execution","locale_data":{"foreman_remote_execution":{"":{"Project-Id-Version":"foreman_remote_execution 9.0.1","Report-Msgid-Bugs-To":"","PO-Revision-Date":"2016-02-15 13:54+0000","Last-Translator":"FULL NAME <EMAIL@ADDRESS>","Language-Team":"Chinese (Taiwan) (http://www.transifex.com/foreman/foreman/language/zh_TW/)","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Language":"zh_TW","Plural-Forms":"nplurals=1; plural=0;","lang":"zh_TW","domain":"foreman_remote_execution","plural_forms":"nplurals=1; plural=0;"},"Another interface is already set as execution. Are you sure you want to use this one instead?":["另一個介面已設為執行。行您是否確定要使用此介面?"],"There was an error while updating the status, try refreshing the page.":["更新狀態時發生錯誤,請更新此頁面。"],"List foreign input sets":["列出外部輸入集"],"Show foreign input set details":["顯示外部輸入集的詳細資料"],"Target template ID":["目標範本 ID"],"Include all inputs from the foreign template":[""],"A comma separated list of input names to be included from the foreign template.":["從外部範本納入的輸入名稱清單,以逗號隔開。"],"Input set description":["輸入集的描述"],"Create a foreign input set":["建立外部輸入集"],"Delete a foreign input set":["刪除外部輸入集"],"Update a foreign input set":["更新外部輸入集"],"List job invocations":["列出工作祈願"],"Show job invocation":["顯示工作祈願"],"Show Job status for the hosts":[""],"The job template to use, parameter is required unless feature was specified":[""],"Invocation type, one of %s":["祈願類型,%s 之一"],"Execute the jobs on hosts in randomized order":[""],"Inputs to use":["要使用的輸入"],"SSH provider specific options":["SSH 供應者特定選項"],"What user should be used to run the script (using sudo-like mechanisms). Defaults to a template parameter or global setting.":["哪位使用者該用來執行此 script(使用類似 sudo 機制)。預設值設為範本參數或全域設定。"],"Set password for effective user (using sudo-like mechanisms)":[""],"Set SSH user":[""],"Set SSH password":[""],"Set SSH key passphrase":[""],"Create a recurring job":["建立週期性工作"],"How often the job should occur, in the cron format":["工作多常發生,格式同 cron"],"Repeat a maximum of N times":["重複最多 N 次"],"Perform no more executions after this time":["此時間之後不再進行任何執行"],"Designation of a special purpose":[""],"Schedule the job to start at a later time":["排程工作至晚一點的時間"],"Schedule the job for a future time":["排程工作至未來時間"],"Indicates that the action should be cancelled if it cannot be started before this time.":["這表示如果不能在這時間之前開始,就應該取消動作。"],"Control concurrency level and distribution over time":["隨時間控制週期等級並散佈"],"Distribute tasks over N seconds":["在幾秒間散佈工作"],"Run at most N tasks at a time":["一次最多執行 N 個任務"],"Override the description format from the template for this invocation only":["僅為這祈願從範本覆寫描述格式"],"Override the timeout interval from the template for this invocation only":[""],"Remote execution feature label that should be triggered, job template assigned to this feature will be used":[""],"Override the global time to pickup interval for this invocation only":[""],"Create a job invocation":["建立工作祈願"],"Get output for a host":["取得主機輸出"],"Get raw output for a host":[""],"Cancel job invocation":[""],"The job could not be cancelled.":[""],"Rerun job on failed hosts":[""],"Could not rerun job %{id} because its template could not be found":[""],"Get outputs of hosts in a job":[""],"Host with id '%{id}' was not found":["找不到 ID 為 '%{id}' 的主機"],"Only one of feature or job_template_id can be specified":[""],"List job templates":["列出工作範本"],"List job templates per location":["列出各個位置上的工作範本"],"List job templates per organization":["列出各個組織的工作範本"],"Import a job template from ERB":[""],"Template ERB":[""],"Overwrite template if it already exists":[""],"Export a job template to ERB":[""],"Show job template details":["顯示工作範本的詳情"],"Template name":["範本名稱"],"Job category":["工作類別"],"This template is used to generate the description. Input values can be used using the syntax %{package}. You may also include the job category and template name using %{job_category} and %{template_name}.":["這範本是用來產生描述。輸入值可以使用 %{package} 語法。您也可以使用 %{job_category} 與 %{template_name} 來包括工作類別與範本名稱。"],"Provider type":["供應商種類"],"Whether or not the template is locked for editing":["範本是否鎖定並禁止進行編輯"],"Effective user options":["有效的使用者選項"],"What user should be used to run the script (using sudo-like mechanisms)":["哪位使用者該用來執行此 script(使用類似 sudo 機制)"],"Whether it should be allowed to override the effective user from the invocation form.":["是否允許從祈願清單覆寫有效使用者。"],"Whether the current user login should be used as the effective user":["目前登入的使用者是否應作為有效使用者"],"Create a job template":["建立工作範本"],"Update a job template":["更新工作範本"],"Template version":["範本版本"],"Delete a job template":["刪除工作範本"],"Clone a provision template":["複製佈建範本"],"List remote execution features":["列出遠端執行功能"],"Show remote execution feature":["顯示遠端執行功能"],"Job template ID to be used for the feature":["要給這功能使用的工作範本 ID"],"List template invocations belonging to job invocation":[""],"Identifier of the Host interface for Remote execution":[""],"Set 'host_registration_remote_execution_pull' parameter for the host. If it is set to true, pull provider client will be deployed on the host":[""],"List of proxy IDs to be used for remote execution":[""],"Trying to abort the job":[""],"Trying to cancel the job":[""],"The job cannot be aborted at the moment.":[""],"The job cannot be cancelled at the moment.":[""],"Problem with previewing the template: %{error}. Note that you must save template input changes before you try to preview it.":["預覽範本時發生問題:%{error}。請注意,您必須在預覽範本前,先儲存範本輸入的變更。"],"Job template imported successfully.":[""],"Unable to save template. Correct highlighted errors":[""],"Run":["執行"],"Schedule Remote Job":[""],"Jobs":["工作"],"Job invocations":["工作祈願"],"%s":["%s"],"Web Console":[""],"Success":["成功"],"Failed":["已失敗"],"Pending":["等待處理中"],"Cancelled":["已取消"],"queued to start executing in %{time}":[""],"queued":["已排程"],"running %{percent}%%":[""],"succeeded":["已成功"],"cancelled":["已取消"],"failed":["已失敗"],"unknown status":["未知的狀態"],"Any Organization":["任何組織"],"Any Location":["任何位置"],"error":[""],"Host detail":["主機詳細資料"],"Rerun on %s":["傳回於 %s"],"Host task":[""],"N/A":["N/A"],"Run Job":["執行工作"],"Create Report":[""],"Create report for this job":[""],"Rerun":["重新執行"],"Rerun the job":["重新執行工作"],"Rerun failed":["重新執行失敗"],"Rerun on failed hosts":["在失敗的主機上重新執行"],"Job Task":["工作任務"],"See the last task details":["檢視最後工作的詳情"],"Cancel Job":["取消工作"],"Try to cancel the job":["試著取消工作"],"Abort Job":[""],"Try to abort the job without waiting for the results from the remote hosts":[""],"Task Details":["工作詳細資料"],"See the task details":["檢視工作的詳情"],"Try to cancel the job on a host":["試著取消主機上的工作"],"Try to abort the job on a host without waiting for its result":[""],"Could not render the preview because no host matches the search query.":[""],"in %s":["%s 中"],"%s ago":["%s 之前"],"Use default description template":["使用預設的描述範本"],"Description template":["描述範本"],"This template is used to generate the description.<br/>Input values can be used using the syntax %{package}.<br/>You may also include the job category and template<br/>name using %{job_category} and %{template_name}.":[""],"Could not use any template used in the job invocation":["無法使用任何用於這工作祈願的範本"],"Failed rendering template: %s":["無法生成範本:%s"],"Task cancelled":[""],"Job execution failed":[""],"%{description} on %{host}":["%{description} 於 %{host} 之上"],"Remote action:":["遠端動作:"],"Job cancelled by user":[""],"Exit status: %s":["退出狀態:%s"],"Job finished with error":["工作完成但發生錯誤"],"Error loading data from proxy":["從代理載入資料時發生錯誤"],"User can not execute job on host %s":["使用者無法在主機 %s 上執行工作"],"User can not execute this job template":["使用者無法執行此工作範本"],"User can not execute job on infrastructure host %s":[""],"User can not execute this job template on %s":["使用者無法在 %s 上執行此工作範本"],"The only applicable proxy %{proxy_names} is down":["",""],"Could not use any proxy for the %{provider} job. Consider configuring %{global_proxy}, %{fallback_proxy} in settings":[""],"REX job has succeeded - %s":[""],"REX job has failed - %s":[""],"included template '%s' not found":["找不到包含的範本 '%s'"],"input macro with name '%s' used, but no input with such name defined for this template":["使用了名為 '%s' 的輸入巨集,但此範本並未輸入這樣的名稱"],"Unable to fetch public key":["無法取得公開金鑰"],"Unable to remove host from known hosts":[""],"REX job has finished - %s":[""],"Should this interface be used for remote execution?":[""],"Interface with the '%s' identifier was specified as a remote execution interface, however the interface was not found on the host. If the interface exists, it needs to be created in Foreman during the registration.":[""],"host already has an execution interface":["主機已有執行介面"],"This template is locked. Please clone it to a new template to customize.":["此範本已鎖定。請將它複製至一個新的範本以自訂化。"],"Circular dependency detected in foreign input set '%{template}' -> '%{target_template}'. Templates stack: %{templates_stack}":["在外部輸入集偵測到環狀相依性: '%{template}' -> '%{target_template}'。範本堆疊:%{templates_stack}"],"Execution":["執行"],"Last execution succeeded":["最後的執行成功"],"No execution finished yet":["尚無執行完成"],"Last execution cancelled":[""],"Last execution failed":["最後的執行失敗"],"Unknown execution status":["未知的執行狀態"],"Recursive rendering of templates detected":["偵測到遞迴處理範本"],"error during rendering: %s":["處理時發生錯誤:%s"],"template":["範本"],"Cannot specify both bookmark_id and search_query":["無法指定 bookmark_id 和 search_query"],"Unknown input %{input_name} for template %{template_name}":["未知的輸入 %{input_name} 給範本 %{template_name}"],"Template with id '%{id}' was not found":["找不到 ID 為 '%{id}' 的範本"],"Feature input %{input_name} not defined in template %{template_name}":["未知的輸入 %{input_name} 未定義於範本 %{template_name}"],"No template mapped to feature %{feature_name}":["沒有範本定義至功能 %{feature_name}"],"The template %{template_name} mapped to feature %{feature_name} is not accessible by the user":["使用者無法存取範本 %{template_name} 對應至功能 %{feature_name}"],"Job Invocation":["工作祈願"],"Duplicated inputs detected: %{duplicated_inputs}":["偵測到重複的輸入:%{duplicated_inputs}"],"Unknown remote execution feature %s":["未知的遠端執行功能 %s"],"Effective user method \\\"%{current_value}\\\" is not one of %{valid_methods}":["有效使用者方法 \\\"%{current_value}\\\" 並非 %{valid_methods} 之一"],"Could not find any suitable interface for execution":[""],"Subscribe to my failed jobs":[""],"Subscribe to my succeeded jobs":[""],"Subscribe to all my jobs":[""],"Script":[""],"Static Query":["靜態查詢"],"Dynamic Query":["動態查詢"],"Alphabetical":[""],"Randomized":[""],"Cannot resolve hosts without a user":["沒有使用者就無法解析主機"],"Cannot resolve hosts without a bookmark or search query":["沒有書籤或搜尋查詢,就無法解析主機"],"Must select a bookmark or enter a search query":["必須選擇書籤或輸入搜尋查詢"],"Input":["輸入"],"Not all required inputs have values. Missing inputs: %s":["並不是所需的輸入都有值。缺少的輸入:%s"],"Internal proxy selector can only be used if Katello is enabled":[""],"default_capsule method missing from SmartProxy":[""],"Can't find Job Invocation for an id %s":[""],"Latest Jobs":[""],"Name":["名稱"],"State":["狀態"],"Started":[""],"No jobs available":[""],"Results":[""],"Schedule":["排程"],"Concurrency level limited to":[""],"tasks at a time":[""],"Set to distribute over":[""],"seconds":["秒"],"Scheduled to start before":[""],"Scheduled to start at":[""],"Timeout to kill after":[""],"Target hosts":["目標主機"],"Bookmark":["書籤"],"Manual selection":["手動選擇"],"using ":[""],"Execution order":[""],"Organization":["組織"],"Location":["位置"],"SSH User":[""],"Evaluated at:":["評量於:"],"User Inputs":[""],"Description":["說明"],"Job template":["工作範本"],"Resolves to":["解析至"],"hosts":["主機"],"Refresh":["重新整理"],"Preview":["預覽"],"Display advanced fields":["顯示進階欄位"],"Hide advanced fields":["隱藏進階欄位"],"SSH user":[""],"A user to be used for SSH.":[""],"Effective user":["有效的使用者"],"A user to be used for executing the script. If it differs from the SSH user, su or sudo is used to switch the accounts.":["要使用執行這 script 的使用者。如果使用者與 SSH 使用者不同,會用 su 或 sudo 來切換使用者。"],"Timeout to kill":[""],"Time in seconds from the start on the remote host after which the job should be killed.":[""],"Time to pickup":[""],"Interval in seconds, if the job is not picked up by a client within this interval it will be cancelled.":[""],"Password":["密碼"],"Password is stored encrypted in DB until the job finishes. For future or recurring executions, it is removed after the last execution.":[""],"Private key passphrase":[""],"Key passhprase is only applicable for SSH provider. Other providers ignore this field. <br> Passphrase is stored encrypted in DB until the job finishes. For future or recurring executions, it is removed after the last execution.":[""],"Effective user password":[""],"Effective user password is only applicable for SSH provider. Other providers ignore this field. <br> Password is stored encrypted in DB until the job finishes. For future or recurring executions, it is removed after the last execution.":[""],"Concurrency level":["同步等級"],"Run at most N tasks at a time. If this is set and proxy batch triggering is enabled, then tasks are triggered on the smart proxy in batches of size 1.":[""],"Time span":["時間跨度"],"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.":[""],"Execution ordering":[""],"Execution ordering determines whether the jobs should be executed on hosts in alphabetical order or in randomized order.<br><ul><li><b>Ordered</b> - executes the jobs on hosts in alphabetical order</li><li><b>Randomized</b> - randomizes the order in which jobs are executed on hosts</li></ul>":[""],"Type of query":["查詢類型"],"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>":[""],"The final host list may change because the selected query is dynamic. It will be rerun during execution.":["最終主機清單可能會改變,因為選擇查詢是動態的。這會在執行時重新執行。"],"...and %{count} more":["",""],"No hosts found.":["找不到主機。"],"Close":["關閉"],"Current organization %{org_c} is different from job's organization %{org_j}.":[""],"Current location %{loc_c} is different from job's location %{loc_j}.":[""],"The dynamic query '%{query}' was not resolved yet. The list of hosts to which it would resolve now can be seen %{here}.":["動態查詢 '%{query}' 尚未被解析。該解析的主機清單可以在 %{here} 找到。"],"here":["這裏"],"effective user":[""],"Total hosts":["主機總數"],"Hosts gone missing":[""],"This can happen if the host is removed or moved to another organization or location after the job was started":[""],"Providers and templates":["供應者與範本"],"User input":["使用者輸入"],"Value":["值"],"Search Query":[""],"Status":["狀態"],"Succeeded":["已成功"],"Start":["開始"],"Job invocation":["工作祈願"],"Use new job wizard":[""],"Overview":["概覽"],"Preview templates":[""],"Recurring logic":["週期邏輯"],"Job Invocations":[""],"Foreman can run arbitrary commands on remote hosts using different providers, such as SSH or Ansible. Communication goes through the Smart Proxy so Foreman does not have to have direct access to the target hosts and can scale to control many hosts.":[""],"Learn more about this in the documentation.":["欲知更多,請參閱文件。"],"Job":["工作"],"Type":["類型"],"Add Foreign Input Set":["新增外部輸入集"],"add an input set for this template to reference a different template inputs":["為此範本新增輸入集,以參照至不同的範本輸入"],"Snippet":["程式碼片段"],"Select an ERB file to upload in order to import a job template. The template must contain metadata in the first ERB comment.":[""],"Overwrite":["覆寫"],"Whether to overwrite the template if it already exists":[""],"Job Templates":["工作範本"],"Edit %s":["編輯 %s"],"Edit Job Template":["編輯工作範本"],"Import":["匯入"],"New Job Template":["新工作範本"],"JobTemplate|Name":["JobTemplate|Name"],"JobTemplate|Snippet":["JobTemplate|Snippet"],"JobTemplate|Locked":["JobTemplate|Locked"],"Actions":["動作"],"This template is locked for editing.":["此範本已鎖定,因此無法編輯。"],"The execution interface is used for remote execution":["用來遠端執行的執行介面"],"Remote execution":["遠端執行"],"Remote Execution":["遠端執行"],"Proxies":["代理伺服器"],"Select as many remote execution proxies as applicable for this subnet. When multiple proxies with the same provider are added, actions will be load balanced among them.":["為此子網路儘可能選擇遠端執行代理。加入有著同樣供應者的多重代理之後,動作就會在這些代理上進行負載平衡。"],"You are not allowed to see the currently assigned template. Saving the form now would unassign the template.":["您不能看到目前指定的範本。現在儲存表單會取消指定範本。"],"Remote Execution Features":["遠端執行功能"],"Label":["標籤"],"Edit Remote Execution Feature":["編輯遠端執行功能"],"A job '%{job_name}' has %{status} at %{time}":[""],"Job result":[""],"Failed hosts":[""],"See more details at %s":[""],"Foreign input set":["外部輸入集"],"remove template input set":["移除範本輸入集"],"A comma separated list of input names to be excluded from the foreign template.":["從外部範本排除的輸入名稱清單,以逗號隔開。"],"Template Invocation for %s":[""],"Back to Job":["回到工作"],"Toggle command":["切換指令"],"Toggle STDERR":["切換 STDERR"],"Toggle STDOUT":["切換 STDOUT"],"Toggle DEBUG":["切換 DEBUG"],"Target: ":["目標:"],"using Smart Proxy":[""],"Scroll to bottom":["捲動至底端"],"Scroll to top":["捲動至頂端"],"Could not display data for job invocation.":[""],"Unsupported or no operating system found for this host.":["不支援或此主機上找不到作業系統。"],"A job '%{subject}' has finished successfully":[""],"Job Details":[""],"A job '%{subject}' has failed":[""],"Remote execution job":[""],"A notification when a job finishes":[""],"Unable to create mail notification: %s":[""],"Search the host for any proxy with Remote Execution, useful when the host has no subnet or the subnet does not have an execution proxy":["使用遠端執行為代理搜尋主機,這在主機沒有子網路、或子網路沒有執行代理時很有用"],"Fallback to Any Proxy":[""],"Search for remote execution proxy outside of the proxies assigned to the host. The search will be limited to the host's organization and location.":[""],"Enable Global Proxy":[""],"Default user to use for SSH. You may override per host by setting a parameter called remote_execution_ssh_user.":["使用 SSH 的預設使用者。您可以透過設定參數呼叫 remote_execution_ssh_user 來覆寫每台主機的設定。"],"Default user to use for executing the script. If the user differs from the SSH user, su or sudo is used to switch the user.":["要使用執行這 script 的預設使用者。如果使用者與 SSH 使用者不同,會用 su 或 sudo 來切換使用者。"],"Effective User":[""],"What command should be used to switch to the effective user. One of %s":["該用哪個指令來切換至有效的使用者。%s 之一"],"Effective User Method":[""],"Whether we should sync templates from disk when running db:seed.":["執行 db:seed 時是否要從磁碟同步範本。"],"Sync Job Templates":[""],"Port to use for SSH communication. Default port 22. You may override per host by setting a parameter called remote_execution_ssh_port.":[""],"SSH Port":[""],"Should the ip addresses on host interfaces be preferred over the fqdn? It is useful when DNS not resolving the fqdns properly. You may override this per host by setting a parameter called remote_execution_connect_by_ip. For dual-stacked hosts you should consider the remote_execution_connect_by_ip_prefer_ipv6 setting":[""],"Connect by IP":[""],"When connecting using ip address, should the IPv6 addresses be preferred? If no IPv6 address is set, it falls back to IPv4 automatically. You may override this per host by setting a parameter called remote_execution_connect_by_ip_prefer_ipv6. By default and for compatibility, IPv4 will be preferred over IPv6 by default":[""],"Prefer IPv6 over IPv4":[""],"Default password to use for SSH. You may override per host by setting a parameter called remote_execution_ssh_password":[""],"Default SSH password":[""],"Default key passphrase to use for SSH. You may override per host by setting a parameter called remote_execution_ssh_key_passphrase":[""],"Default SSH key passphrase":[""],"Amount of workers in the pool to handle the execution of the remote execution jobs. Restart of the dynflowd/foreman-tasks service is required.":[""],"Workers pool size":[""],"When enabled, working directories will be removed after task completion. You may override this per host by setting a parameter called remote_execution_cleanup_working_dirs.":[""],"Cleanup working directories":[""],"Where to find the Cockpit instance for the Web Console button. By default, no button is shown.":[""],"Cockpit URL":[""],"Choose a job template that is pre-selected in job invocation form":[""],"Form Job Template":[""],"Select a report template used for generating a report for a particular remote execution job":[""],"Job Invocation Report Template":[""],"Time in seconds within which the host has to pick up a job. If the job is not picked up within this limit, the job will be cancelled. Defaults to 1 day.":[""],"Job templates":["工作範本"],"Run Puppet Once":[""],"Perform a single Puppet run":[""],"Run Script":[""],"Run a script":[""],"Does not repeat":[""],"Cronline":[""],"Monthly":["每個月"],"Weekly":["每週"],"Daily":["每天"],"Hourly":[""],"Immediate execution":[""],"Future execution":[""],"Recurring execution":[""],"Category and template":[""],"Target hosts and inputs":[""],"Advanced fields":[""],"Review details":[""],"Type of execution":[""],"Hosts":["主機"],"Host collections":[""],"Host groups":["主機群組"],"Search query":["搜尋查詢"],"Run job":[""],"Use old form":[""],"Current organization %s is different from job's organization %s. This job may run on different hosts than before.":[""],"Current location %s is different from job's location %s. This job may run on different hosts than before.":[""],"'Starts before' date must in the future":[""],"Please go back to \\\\\\\"Schedule\\\\\\\" - \\\\\\\"Future execution\\\\\\\" step to fix the error":[""],"Use legacy form":[""],"Edit job description template":[""],"Preview job description":[""],"For example: 1, 2, 3, 4, 5...":[""],"Key passphrase is only applicable for SSH provider. Other providers ignore this field. Passphrase is stored encrypted in DB until the job finishes. For future or recurring executions, it is removed after the last execution.":[""],"Effective user password is only applicable for SSH provider. Other providers ignore this field. Password is stored encrypted in DB until the job finishes. For future or recurring executions, it is removed after the last execution.":[""],"All fields are required.":[""],"Error":["錯誤"],"Errors:":[""],"Categories list failed with:":[""],"Templates list failed with:":[""],"Template failed with:":[""],"Preview Hosts":[""],"...and %s more":[""],"%s more":[""],"Clear all filters":[""],"There are no available input fields for the selected template.":[""],"Please select at least one host":[""],"Please enter a search query":[""],"Please select at least one host collection":[""],"Please select at least one host group":[""],"Filter by hosts":[""],"Filter by host collections":[""],"Filter by host groups":[""],"Apply to":[""],"Never":["永不"],"After %s occurences":[""],"Every hour at minute %s":[""],"Every day at %s":[""],"Every week on %s at %s":[""],"Every month on %s at %s":[""],"Cron line":["Cron 行"],"No Target Hosts":[""],"view host names":[""],"Hide all advanced fields":[""],"Show all advanced fields":[""],"Schedule type":[""],"Recurrence":[""],"Starts at":[""],"Starts Before":[""],"Starts":["起始"],"Now":[""],"Repeats":["重複"],"Ends":["結束"],"Purpose":[""],"Static query":[""],"Dynamic query":[""],"Description Template":[""],"A special label for tracking a recurring job. There can be only one active job with a given purpose at a time.":[""],"Query type":[""],"Type has impact on when is the query evaluated to hosts.":[""],"evaluates just after you submit this form":[""],"evaluates just before the execution is started, so if it's planned in future, targeted hosts set may change before it":[""],"Cron line format 'a b c d e', where:":[""],"is minute (range: 0-59)":["是分鐘(範圍:0-59)"],"is hour (range: 0-23)":["是小時(範圍:0-23)"],"is day of month (range: 1-31)":["是日期(範圍:1-31)"],"is month (range: 1-12)":["是月份(範圍:1-12)"],"is day of week (range: 0-6)":["是星期幾(範圍:0-6)"],"At":["於"],"Invalid time format":[""],"At minute":[""],"range: 0-59":[""],"Create":["建立"],"Minute can only be a number between 0-59":[""],"Days":["天"],"Days of week":["星期幾"],"For Future execution a 'Starts at' date or 'Starts before' date must be selected. Immediate execution can be selected in the previous step.":[""],"'Starts before' date must be after 'Starts at' date":[""],"Clear input":[""],"Starts before":[""],"End time needs to be after start time":[""],"On":["開啟"],"After":[""],"Repeat amount can only be a positive number":[""],"occurences":[""],"Select the type of execution":[""],"Execute the job now.":[""],"Execute the job later, at a scheduled time.":[""],"Execute the job on a repeating schedule.":[""],"Invalid date":[""],"open-help-tooltip-button":[""],"Reset to default":["重設為預設值"],"Has to be a positive number":[""],"Please refine your search.":[""],"You have %s results to display. Showing first %s results":[""],"Opening job invocation form":[""],"%s job has been invoked":[""],"Schedule a job":[""],"Recent jobs":[""],"View all jobs":[""],"View finished jobs":[""],"View running jobs":[""],"View scheduled jobs":[""],"Finished":["已完成"],"Running":["執行中"],"Scheduled":[""],"No results found":[""],"Remote Execution Interface":[""],"yes":["是"],"no":["否"],"Inherit from host parameter":[""],"Yes (override)":[""],"No (override)":[""],"REX pull mode":[""],"Setup remote execution pull mode. If set to `Yes`, pull provider client will be deployed on the registered host. The inherited value is based on the `host_registration_remote_execution_pull` parameter. It can be inherited e.g. from host group, operating system, organization. When overridden, the selected value will be stored on host parameter level.":[""],"Host":["主機"],"Active Filters:":[""],"Action with sub plans":["有子計畫的動作"],"Import Puppet classes":["匯入 Puppet 類別"],"Import facts":["匯入詳情"],"A plugin bringing remote execution to the Foreman, completing the config management functionality with remote management functionality.":["將遠端執行帶入 Foreman 的外掛程式,搭配遠端管理功能來完成配置管理。"]}}};
@@ -31,7 +31,16 @@ function refresh_search_query(value){
31
31
 
32
32
  function show_preview_hosts_modal() {
33
33
  var form = $('form#job_invocation_form');
34
- var data = form.serializeArray();
34
+ var data = form
35
+ .serializeArray()
36
+ .filter(item =>
37
+ [
38
+ 'targeting[search_query]',
39
+ 'targeting[bookmark_id]',
40
+ 'targeting[targeting_type]',
41
+ 'targeting[randomized_ordering]',
42
+ ].includes(item.name)
43
+ );
35
44
  request = $.ajax({
36
45
  data: data,
37
46
  type: 'GET',
@@ -130,6 +130,25 @@ class JobInvocationsController < ApplicationController
130
130
  redirect_back(:fallback_location => job_invocation_path(@job_invocation))
131
131
  end
132
132
 
133
+ def preview_job_invocations_per_host
134
+ job_invocations = resource_base.search_for("targeted_host_id = #{params[:host_id]} and (status=#{params[:status]})").limit(params[:limit] || 3)
135
+
136
+ job_invocations = job_invocations.map do |job|
137
+ @job_invocation = job
138
+ template_invocation = job.template_invocations.find { |template_inv| template_inv.host_id == params[:host_id].to_i }
139
+ task = template_invocation.try(:run_host_job_task)
140
+ status_mapper = task ? HostStatus::ExecutionStatus::ExecutionTaskStatusMapper.new(task) : job
141
+ {
142
+ start_at: job.start_at,
143
+ description: job.description,
144
+ id: job.id,
145
+ status: status_mapper.status,
146
+ status_label: status_mapper.status_label,
147
+ }
148
+ end
149
+ render :json => {:job_invocations => job_invocations}
150
+ end
151
+
133
152
  private
134
153
 
135
154
  def action_permission
@@ -140,7 +159,7 @@ class JobInvocationsController < ApplicationController
140
159
  'create'
141
160
  when 'cancel'
142
161
  'cancel'
143
- when 'chart'
162
+ when 'chart', 'preview_job_invocations_per_host'
144
163
  'view'
145
164
  else
146
165
  super
@@ -68,9 +68,6 @@ class UiJobWizardController < ApplicationController
68
68
  job_organization = Taxonomy.find_by(id: job.task.input[:current_organization_id])
69
69
  job_location = Taxonomy.find_by(id: job.task.input[:current_location_id])
70
70
  render :json => {
71
- :provider_input_values => composer[:template_invocations][0][:provider_input_values],
72
- :provider_input_values1 => job[:provider_input_values],
73
- :job2 => composer[:template_invocations][0],
74
71
  :job => composer,
75
72
  :job_organization => job_organization,
76
73
  :job_location => job_location,
@@ -180,7 +180,7 @@ module Actions
180
180
  end
181
181
 
182
182
  def exit_status
183
- input[:with_event_logging] ? task.template_invocation.template_invocation_events.find_by(event_type: 'exit').event : delegated_output[:exit_status]
183
+ input[:with_event_logging] ? task.template_invocation.template_invocation_events.find_by(event_type: 'exit')&.event : delegated_output[:exit_status]
184
184
  end
185
185
 
186
186
  def host_id
@@ -127,7 +127,7 @@
127
127
  </div>
128
128
 
129
129
  <div class="form-group">
130
- <%= add_label({ :label => _('Type of query'), :label_help => _("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>") }, f, :targetting_type) %>
130
+ <%= add_label({ :label => _('Type of query'), :label_help => _("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>") }, f, :targetting_type) %>
131
131
 
132
132
  <div class="col-md-4">
133
133
  <%= radio_button_f targeting_fields, :targeting_type, :value => Targeting::STATIC_TYPE, :text => _(Targeting::TYPES[Targeting::STATIC_TYPE]) %>
@@ -5,6 +5,7 @@ model: JobTemplate
5
5
  job_category: Commands
6
6
  description_format: "Run %{command}"
7
7
  provider_type: script
8
+ feature: run_script
8
9
  template_inputs:
9
10
  - name: command
10
11
  description: Command to run on the host
data/config/routes.rb CHANGED
@@ -24,6 +24,7 @@ Rails.application.routes.draw do
24
24
  match 'old/job_invocations/:id/rerun', to: 'job_invocations#rerun', via: [:get, :post], as: 'form_rerun_job_invocation'
25
25
  resources :job_invocations, :only => [:create, :show, :index] do
26
26
  collection do
27
+ get 'preview_job_invocations_per_host'
27
28
  post 'refresh'
28
29
  get 'chart'
29
30
  get 'preview_hosts'
@@ -47,8 +47,9 @@ module ForemanRemoteExecution
47
47
 
48
48
  initializer 'foreman_remote_execution.register_plugin', before: :finisher_hook do |_app|
49
49
  Foreman::Plugin.register :foreman_remote_execution do
50
- requires_foreman '>= 3.6'
50
+ requires_foreman '>= 3.7'
51
51
  register_global_js_file 'global'
52
+ register_gettext
52
53
 
53
54
  apipie_documented_controllers ["#{ForemanRemoteExecution::Engine.root}/app/controllers/api/v2/*.rb"]
54
55
  ApipieDSL.configuration.dsl_classes_matchers += [
@@ -183,7 +184,7 @@ module ForemanRemoteExecution
183
184
  permission :lock_job_templates, { :job_templates => [:lock, :unlock] }, :resource_type => 'JobTemplate'
184
185
  permission :create_job_invocations, { :job_invocations => [:new, :create, :legacy_create, :refresh, :rerun, :preview_hosts],
185
186
  'api/v2/job_invocations' => [:create, :rerun] }, :resource_type => 'JobInvocation'
186
- permission :view_job_invocations, { :job_invocations => [:index, :chart, :show, :auto_complete_search], :template_invocations => [:show],
187
+ permission :view_job_invocations, { :job_invocations => [:index, :chart, :show, :auto_complete_search, :preview_job_invocations_per_host], :template_invocations => [:show],
187
188
  'api/v2/job_invocations' => [:index, :show, :output, :raw_output, :outputs] }, :resource_type => 'JobInvocation'
188
189
  permission :view_template_invocations, { :template_invocations => [:show],
189
190
  'api/v2/template_invocations' => [:template_invocations], :ui_job_wizard => [:job_invocation] }, :resource_type => 'TemplateInvocation'
@@ -342,12 +343,6 @@ module ForemanRemoteExecution
342
343
  ::Api::V2::RegistrationCommandsController.include ::ForemanRemoteExecution::Concerns::Api::V2::RegistrationCommandsControllerExtensions::ApipieExtensions
343
344
  end
344
345
 
345
- initializer 'foreman_remote_execution.register_gettext', after: :load_config_initializers do |_app|
346
- locale_dir = File.join(File.expand_path('../../..', __FILE__), 'locale')
347
- locale_domain = 'foreman_remote_execution'
348
- Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
349
- end
350
-
351
346
  rake_tasks do
352
347
  %w[explain_proxy_selection.rake].each do |rake_file|
353
348
  full_path = File.expand_path("../tasks/#{rake_file}", __FILE__)
@@ -367,5 +362,10 @@ module ForemanRemoteExecution
367
362
  :description => N_('Perform a single Puppet run'),
368
363
  :host_action_button => true
369
364
  )
365
+ RemoteExecutionFeature.register(
366
+ :run_script,
367
+ N_('Run Script'),
368
+ :description => N_('Run a script')
369
+ )
370
370
  end
371
371
  end
@@ -14,8 +14,16 @@ namespace :foreman_remote_execution do
14
14
  options[:host] = ENV['HOST']
15
15
  options[:provider] = ENV['PROVIDER']
16
16
 
17
+ providers = ::RemoteExecutionProvider.provider_proxy_features
18
+
17
19
  raise 'Environment variable HOST has to be set' unless options[:host]
18
- raise 'Environment variable PROVIDER has to be set' unless options[:provider]
20
+ unless providers.map(&:downcase).include?(options[:provider]&.downcase)
21
+ aliases = providers.group_by { |p| ::RemoteExecutionProvider.provider_for(p) }
22
+ .select { |_, names| names.count > 1 }
23
+ .values
24
+ .map { |a| a.join(' = ') }
25
+ raise "Environment variable PROVIDER has to be set to one of #{providers.join(', ')}. Note provider aliases #{aliases.join(', ')}."
26
+ end
19
27
 
20
28
  if ENV['FOREMAN_USER']
21
29
  User.current = User.friendly.find(ENV['FOREMAN_USER'])
@@ -26,11 +34,12 @@ namespace :foreman_remote_execution do
26
34
  Organization.current = Organization.friendly.find(ENV['ORGANIZATION']) if ENV['ORGANIZATION']
27
35
 
28
36
  selector = ::RemoteExecutionProxySelector.new
37
+ provider = ::RemoteExecutionProvider.provider_for(options[:provider])
29
38
 
30
39
  results = Host.search_for(options[:host]).map do |host|
31
40
  host_base = { :host => host }
32
- proxies = selector.available_proxies(host, options[:provider])
33
- determined_proxy = selector.determine_proxy(host, options[:provider])
41
+ proxies = selector.available_proxies(host, provider.proxy_feature)
42
+ determined_proxy = selector.determine_proxy(host, provider.proxy_feature)
34
43
  counts = selector.instance_variable_get('@tasks')
35
44
  counts.default = 0
36
45
 
@@ -1,3 +1,3 @@
1
1
  module ForemanRemoteExecution
2
- VERSION = '9.1.0'.freeze
2
+ VERSION = '10.0.0'.freeze
3
3
  end
data/locale/Makefile CHANGED
@@ -14,6 +14,7 @@ POFILES = $(shell find . -name '$(DOMAIN).po')
14
14
  MOFILES = $(patsubst %.po,%.mo,$(POFILES))
15
15
  POXFILES = $(patsubst %.po,%.pox,$(POFILES))
16
16
  EDITFILES = $(patsubst %.po,%.edit.po,$(POFILES))
17
+ JSFILES = $(shell find ../app/assets/javascripts/*/locale -name '$(DOMAIN).js')
17
18
 
18
19
  %.mo: %.po
19
20
  mkdir -p $(shell dirname $@)/LC_MESSAGES
@@ -42,18 +43,20 @@ uniq-po:
42
43
  done
43
44
 
44
45
  tx-pull: $(EDITFILES)
45
- tx pull -f
46
+ cd .. && tx pull -f
46
47
  for f in $(EDITFILES) ; do \
47
48
  sed -i 's/^\("Project-Id-Version: \).*$$/\1$(DOMAIN) $(VERSION)\\n"/' $$f; \
48
49
  done
49
50
 
50
51
  tx-update: tx-pull
51
52
  @echo
52
- @echo Run rake plugin:gettext[$(DOMAIN)] from the Foreman installation, then make -C locale mo-files to finish
53
+ @echo Run rake plugin:gettext[$(DOMAIN)] from the Foreman installation
54
+ @echo then run rake plugin:po_to_json[$(DOMAIN)] from the Foreman installation
55
+ @echo then run make -C locale mo-files to finish
53
56
  @echo
54
57
 
55
58
  mo-files: $(MOFILES)
56
- git add $(POFILES) $(POTFILE) ../locale/*/LC_MESSAGES
59
+ git add $(POFILES) $(POTFILE) $(JSFILES) ../locale/*/LC_MESSAGES
57
60
  git commit -m "i18n - pulling from tx"
58
61
  @echo
59
62
  @echo Changes commited!
@@ -31,6 +31,9 @@ msgstr "vor %s"
31
31
  msgid "%s job has been invoked"
32
32
  msgstr ""
33
33
 
34
+ msgid "%s more"
35
+ msgstr ""
36
+
34
37
  msgid "%{description} on %{host}"
35
38
  msgstr "%{description} auf %{host}"
36
39
 
@@ -40,9 +43,6 @@ msgstr ""
40
43
  msgid "'Starts before' date must in the future"
41
44
  msgstr ""
42
45
 
43
- msgid ", and %s more"
44
- msgstr ""
45
-
46
46
  msgid "...and %s more"
47
47
  msgstr ""
48
48
 
@@ -102,6 +102,9 @@ msgstr "Erweiterte Felder"
102
102
  msgid "After"
103
103
  msgstr ""
104
104
 
105
+ msgid "After %s occurences"
106
+ msgstr ""
107
+
105
108
  msgid "All fields are required."
106
109
  msgstr "Alle Felder sind erforderlich."
107
110
 
@@ -159,7 +162,7 @@ msgstr "bookmark_id und search_query konnte nicht angegeben werden"
159
162
  msgid "Categories list failed with:"
160
163
  msgstr ""
161
164
 
162
- msgid "Category and Template"
165
+ msgid "Category and template"
163
166
  msgstr ""
164
167
 
165
168
  msgid "Choose a job template that is pre-selected in job invocation form"
@@ -171,7 +174,7 @@ msgstr "Zirkuläre Abhängigkeit im Fremdeingabe-Satz gefunden '%{template}' ->
171
174
  msgid "Cleanup working directories"
172
175
  msgstr "Arbeitsverzeichnisse bereinigen"
173
176
 
174
- msgid "Clear filters"
177
+ msgid "Clear all filters"
175
178
  msgstr ""
176
179
 
177
180
  msgid "Clear input"
@@ -381,6 +384,18 @@ msgstr "Fehler:"
381
384
  msgid "Evaluated at:"
382
385
  msgstr "Evaluiert an:"
383
386
 
387
+ msgid "Every day at %s"
388
+ msgstr ""
389
+
390
+ msgid "Every hour at minute %s"
391
+ msgstr ""
392
+
393
+ msgid "Every month on %s at %s"
394
+ msgstr ""
395
+
396
+ msgid "Every week on %s at %s"
397
+ msgstr ""
398
+
384
399
  msgid "Execute the job later, at a scheduled time."
385
400
  msgstr ""
386
401
 
@@ -741,6 +756,9 @@ msgstr "Organisation"
741
756
  msgid "Override the description format from the template for this invocation only"
742
757
  msgstr "Beschreibungsformat der Vorlage nur für diesen Aufruf außer Kraft setzen "
743
758
 
759
+ msgid "Override the global time to pickup interval for this invocation only"
760
+ msgstr ""
761
+
744
762
  msgid "Override the timeout interval from the template for this invocation only"
745
763
  msgstr "Überschreibe das Timeout-Intervall des Templates / Musters nur für diese Invokation / diesen Aufruf"
746
764
 
@@ -768,9 +786,24 @@ msgstr "Führe einen einzelnen Puppet-Lauf aus"
768
786
  msgid "Perform no more executions after this time"
769
787
  msgstr "Danach nicht mehr ausführen"
770
788
 
789
+ msgid "Please enter a search query"
790
+ msgstr ""
791
+
792
+ msgid "Please go back to \\\"Schedule\\\" - \\\"Future execution\\\" step to fix the error"
793
+ msgstr ""
794
+
771
795
  msgid "Please refine your search."
772
796
  msgstr ""
773
797
 
798
+ msgid "Please select at least one host"
799
+ msgstr ""
800
+
801
+ msgid "Please select at least one host collection"
802
+ msgstr ""
803
+
804
+ msgid "Please select at least one host group"
805
+ msgstr ""
806
+
774
807
  msgid "Port to use for SSH communication. Default port 22. You may override per host by setting a parameter called remote_execution_ssh_port."
775
808
  msgstr ""
776
809
  "Port für die Verwendung von SSH Kommunikation. Standardport 22. \n"
@@ -914,6 +947,12 @@ msgstr "Job ausführen"
914
947
  msgid "Run Puppet Once"
915
948
  msgstr "Puppet einmal ausführen"
916
949
 
950
+ msgid "Run Script"
951
+ msgstr ""
952
+
953
+ msgid "Run a script"
954
+ msgstr ""
955
+
917
956
  msgid "Run at most N tasks at a time"
918
957
  msgstr "Höchstens n Aufgaben gleichzeitig ausführen"
919
958
 
@@ -1064,6 +1103,9 @@ msgstr "Gestartet"
1064
1103
  msgid "Starts"
1065
1104
  msgstr "Beginnt"
1066
1105
 
1106
+ msgid "Starts Before"
1107
+ msgstr ""
1108
+
1067
1109
  msgid "Starts at"
1068
1110
  msgstr ""
1069
1111
 
@@ -1246,8 +1288,8 @@ msgstr "Typ"
1246
1288
  msgid "Type has impact on when is the query evaluated to hosts."
1247
1289
  msgstr ""
1248
1290
 
1249
- 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>"
1250
- msgstr "Typ hat Einfluss darauf, wann die Abfrage an Hosts ausgewertet wird. <br><ul><li><b>Statisch </b> – wird direkt nach dem Absenden dieses Formulars ausgewertet </li><li><b>Dynamisch </b> – wird unmittelbar vor dem Start der Ausführung evaluiert , wenn es also in der Zukunft geplant ist, kann das abgezielte Host set sich zuvor ändern </li></ul>"
1291
+ 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>"
1292
+ msgstr ""
1251
1293
 
1252
1294
  msgid "Type of execution"
1253
1295
  msgstr ""
@@ -1402,7 +1444,7 @@ msgstr "Fehler beim Rendern: %s"
1402
1444
  msgid "evaluates just after you submit this form"
1403
1445
  msgstr ""
1404
1446
 
1405
- msgid "evaluates just before the execution is started, so if it's planed in future, targeted hosts set may change before it"
1447
+ msgid "evaluates just before the execution is started, so if it's planned in future, targeted hosts set may change before it"
1406
1448
  msgstr ""
1407
1449
 
1408
1450
  msgid "failed"
@@ -1486,5 +1528,8 @@ msgstr "verwende"
1486
1528
  msgid "using Smart Proxy"
1487
1529
  msgstr ""
1488
1530
 
1531
+ msgid "view host names"
1532
+ msgstr ""
1533
+
1489
1534
  msgid "yes"
1490
1535
  msgstr "ja"