跳到主要内容
版本:FCP 24.11

任务模板

“应用中心”的核心价值在于将复杂的调度器命令行操作或者脚本编写操作简化为图形界面操作,使得新用户能够以尽快的速度开始使用HPC平台,降低使用门槛。因此任务管理提供了灵活的任务模板自定义能力,高级用户/管理员设定模板后,普通用户可以通过任务向导完成HPC任务的提交和管理。

权限

  • 管理员:管理员不论是否设置应用中心的权限,可以管理平台中所有应用的权限,且拥有分配普通用户创建应用的权限。管理员拥有平台中所有应用的创建权限,管理员分配普通用户使用应用的权限。
  • 普通用户:为普通用户设置应用读权限和应用写权限后,普通用户就会拥有创建应用的权限。普通用户仅能管理自己创建的应用。

任务模板语法

注:此语法仅限“直接面向调度器的任务模式”下使用

parameters: # 参数列表, 可能有多个
- name: param1 # 取值范围: [a-zA-Z0-9_]
display: 显示名称 # 界面显示用的名称
description: 描述 # 用于生成帮助文档
type: 类型 # INT | FLOAT | PATH | ENUM | STRING | BOOL | PATH_ARRAY | STRING_ARRAY | ENUM_SCRIPT
required: bool # 该参数是否为必填参数, 默认是false
usage: 用途 # SCRIPT | SCHEDULER, 默认为SCRIPT
schedPrefix: 前缀 # 如果是SCHEDULER类型, 则会在前缀后面加上参数值
option:
# 通过浏览器原生支持的fetch函数提供远程调用的能力,fetch的使用说明见:https://developer.mozilla.org/zh-CN/docs/Web/API/fetch
# type为ENUM_SCRIPT时可用
# 注意此处必须返回一个Promise<Response>,fetch的返回值即为Promise<Response>,故return 此fetch即可
# 此处只需写一组javascript表达式即可,函数中以下为一个示例:
enumScript: |-
// 此处返回即为'Promise<Response>'中的Promise
return fetch('http://101.126.29.51/api/v1/hostNodes', {
method: 'GET', // 'GET' | 'POST'
headers: {
'Authorization': 'Bearer xxxxxxx'
}
})
.then(res => res.json())
.then(res => {
// 此处返回即为'Promise<Response>'中的Response部分
// 在此处可以自定义逻辑,Response需为:{value: string, label: {title: string}[]的格式;
return res.content.map(item => ({value: item.hostname, label: {title: item.hostname}}))
})
enum: # 当type为ENUM时, 用于定义可选值
- value: 值 # 实际值
display: 描述 # 展示用
path: # 当type为PATH或PATH_ARRAY时, 用于定义文件类型
pattern: 过滤 # 文件名过滤, 缺省时不过滤
directory: bool # true | false, 是否为目录
float:
min: 最小值 # 不存在时不限制
max: 最大值 # 不存在时不限制
int:
min: 最小值 # 不存在时不限制
max: 最大值 # 不存在时不限制
string:
pattern: regex # 过滤用正则表达
# 以下一段是【restrict.resourceCheck】的说明
# 这里用于判断集群分区闲置资源情况,会提供两个变量:
# 1.选中分区的闲置资源情况【partition】
# {
# clusterId?: number; //集群id
# name?: string; //集群名称
# partitionId?: number; //分区id
# partitionName?: string; //分区名称
# idleCpu?: number; // 空闲cpu
# allocCpu?: number; // 已分配cpu
# totalCpu?: number; // cpu总量
# idleMemory?: number; // 空闲内存
# allocMemory?: number; // 已分配内存
# totalMemory?: number; // 总内存
# runningComputeCount?: number; // 运行中计算节点数量
# idleComputeCount?: number; // 空闲的计算节点数量
#}
#
# 2.输入参数中输入的数值(用于动态比较)【data】
# 此数据就是parameters定义的字段实际输入的值,示例如下:
# [
# {
# "name": "count","value": {"float": 3 },
# "def": {
# "name": "count",
# "display": "循环次数",
# "description": "循环次数",
# "type": "FLOAT",
# "required": true,
# "option": {
# "float": {
# "min": "1",
# "max": "3"
# }
# }
# }
# },
# {"name": "filepath","value": {"path": "/job-1.cwl" },"def": ... // 定义parameter的内容,省略},
# {"name": "filepath_array","value": {"paths": ["/zy4523","/zy56"]},"def": ... // 定义parameter的内容,省略},
# {"name": "String","value": { "string": "asdas"},"def": ... // 定义parameter的内容,省略},
# {"name": "stringarray","value": {"strings": [ "adas"]},"def": ... // 定义parameter的内容,省略},
# {"name": "Bool","value": {"bool": true},"def": ... // 定义parameter的内容,省略},
# {"name": "int","value": {"int": 3},"def": ... // 定义parameter的内容,省略}
# ]
# 【注意】!!!!
# 使用者在自行取参数中输入的数值(用于动态比较)【data】和分区的闲置资源情况【partition】做比较时
# 若遇到单位不同的情况,请自行做计算将单位转化,
# 例如srun提交任务内存默认单位为MiB/MB,而实际集群分区给出idleMemory单位为GiB/GB
# 那么在计算时,可以做这样的修改:
# if(num2 > partition.idleMemory) 改成 if((num2 / 1000) > partition.idleMemory))
# num2是MiB/MB的单位,转成GiB/GB的单位,需要除以1024或100
# 同理还可以做其他类型的计算
#
# return 返回字符串即可,返回字符串则视为有警告提示,没有返回,或返回空,则视为没有警告提示
restrict:
resourceCheck: |-
let num1 = data.filter(item => item.name === 'count')[0].value.float;
let num2 = data.filter(item => item.name === 'int')[0].value.int;
if (partition.idleCpu < num1) {
return '提交任务所需的CPU数量不足,任务创建成功后会处于排队中!';
}
if (partition.idleMemory < num2) {
return "提交任务所需的内存不足,任务创建成功后会处于排队中!";
}
return null

outputs: # 用于展示的输出
- path: xxx/xxx/output.file # 文件名过滤, 缺省时不过滤
type: 类型 # TEXT | IMAGE | VIDEO | AUDIO | FILE
script: |-
#!/bin/bash
# 脚本内容
echo {{ param1 }} # 引用参数param1

我们也提供了若干常用应用的任务模板,作为示例供参考使用。

创建应用

创建应用的流程是:CWL流程工具 -> 安装应用 -> 应用运行脚本 -> 页面执行任务。点击“创建”按钮,即可进入应用的添加流程,如下图所示。

访问控制

管理员为普通用户分配应用使用权限

举例:为普通用户【test】分配新建【vina】应用的权限,前提是普通用户【test】拥有新建任务的权限

步骤一:点击访问控制

步骤二:弹出权限设置对话框,输入需要分配权限的用户名【test】,点击回车。将读写权限都勾选上,点击确定,为普通用户分配了新建【vina】应用的权限

步骤三:查看【test】用户,可以新建【vina】应用

关联集群

默认情况下,应用不关联任何集群

点击关联集群,则显示未关联的集群列表和已关联在集群列表,新建任务选择此应用时,当选择现有集群运行任务时,只展示在已关联的集群列表中的“运行中”和”更新中“状态的集群,如果用户对所有配置的关联集群均没有访问权限,则显示为空

未关联集群列表:自动过滤释放中和已释放和错误的集群

已关联集群列表:自动过滤释放中和已释放和错误的集群

  • 如果没有配置关联集群,则保持目前配置不变,通过新建任务-选择应用进去之后,选择静态集群时,可以查看到当前用户有权限的所有集群
  • 如果应用中配置了关联集群,支持配置1个或者多个,通过新建任务-选择应用进去之后,选择静态集群时,仅可以查看到应用中指定的集群,如果用户对所有配置的集群均没有权限,则显示为空

权限说明:

admin和管理员角色的用户可以关联集群操作,普通用户无权限且看不到关联集群按钮