Web门户应用集成#

Web门户中用户可以使用的应用,有模板生成。模板是一个YAML文件,里面含有提交页面的参数、应用图表、和作业提交命令等。

../_images/portal_apps.png

应用模板文件名为:应用名.yaml ,存放在/var/www/html/up/apps里。 用户登录后会自动扫描该目录中所有的.yaml文件,在桌面上生成相应的应用图标。

YAML模板文件制作步骤#

应用模板的YAML文件分两类:

  1. 需要用户输入集群参数的,如队列名,CPU核数等。

  2. 直接跳转到一个URL的,比如php/terminal.php。

不管是哪一类,里面一个必要项,是应用图标参数:icon。

第一步:制作应用图标#

应用的图标需要用图形工具制作一个64x64的PNG图形文件。运行base64命令获得图表的代码:

base64 python.png > Python程序.yaml

以上的例子是把base64转换后的图表放到名为“Python程序”的模板文件中。

然后编辑这个YAML文件,插入第一行 icon: "image/png;base64, 如下:

icon: "image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAAEAAAABGCAYAAAB8MJLDAAAAw3pUWHRSYXcgcHJvZmlsZSB0eXBl
IGV4aWYAAHjabVBbDgMhCPz3FD2CMujicdyuTXqDHr8obLO2nYThZUYg9NfzEW4DlDhw3qTUUqKC

在最后一行的尾部加上双引号,如下:

JgAAAABJRU5ErkJggg=="

这样模板中就有了应用图标的数据。

icon参数是必须要的参数

后面步骤中增加的所有参数都可放在icon参数的前面,以方便编辑YAML文件。

第二步:标识交互式应用#

添加参数gui。如果是交互式应用,如图形,web等应用,则为 gui: true 。例子:

gui: false

gui参数是必须要的参数

备注

gui参数会影响作业提交后的跳转。gui: true 作业提交后跳转到作业详情,否则跳转到作业列表。

第三步:添加集群参数#

集群参数名字为:cluster_params。这个参数定义作业提交命令(csub)里的部分选项。

cluster_params是可选参数。

cluster_params中可以有以下的可选参数:

  • queue

    取值为: auto_list (程序列出AIP中所有队列供选择)或者队列名列。

    例子1:

    cluster_params:
      queue: auto_list
    

    例子2:

    cluster_params:
      queue:
      - medium
      - high
    

    这个参数的值会转换成 csub 的-q参数。

  • distribution

    取值为:smp,即单主机作业,或 dmp,即多主机作业。

    例子:

    cluster_params:
      distribution: smp
    

    参数值为smp时,程序转换成 csub-R span[hosts=1] ,值为dmp时,则不加csub的span参数,有调度决定分配单机或多机。

  • mincpu

    让用户选择CPU核数:1、2、4、6、8、10、12、16、20、24、28、32、40、48、64、128、256。这个列表是固定的,若不能 满足需求,请不要添加这个参数,而用params(见下)来配置。

    参数的值为:1,。这个值是固定的,不能修改。

    程序把这个参数转换成 csub 的-n参数。

  • cwd

    让用户选择作业运行时的工作目录,取值为可选的最高层目录路径。值若为 $HOME 表示用户只能选择其HOME以下的任何目录, 若让用户选择其他的目录,如项目存储区的一个目录,则把项目存储区的做高层路径作为参数的值。

    例子:

    cluster_params:
      cwd: $HOME
    

    以上例子中,用户看到的应用参数如下图所示:

    ../_images/portal_par1.png

    点击工作路径参数值,用户可以浏览并选择目录:

    ../_images/portal_par2.png

    程序把这个参数转换成 csub 的-cwd参数。

  • runlimit

    让用户填入作业运行最长时间,单位为分钟。程序把这个参数转换成 csub 的-W参数。时限到后作业或被自动停止。

第三步B:应用直接跳转URL#

如果应用不适用常规的作业提交,而是有其他程序来处理,或者跳转到另外的URL,则可以放置参数url,而不需要上面的第三步、和下面 的第四、五步的操作。

备注

指定url参数,务必指定gui: true。

例子:

url: https://192.168.10.10:5601

url里的内容会以iframe的方式显示在页面上。

备注

Web门户使用NGINX的HTTPS提供服务的,如果过嵌入的页面不是HTTPS,或者在其他域名下,则需要配置NGINX做转发,URL为NGINX的转发URL。 嵌入受限于浏览器、所嵌网页和iframe等的规范。

第四步:应用参数#

应用参数有两部分。第一部分为参数类别params_category,第二部分是参数列表params。

参数类别用于把参数在页面上按类别分开排列。params_category的每一项有两个参数:name(类别名),和id(类别号)。 例子:

params_category:
- name: 应用参数
  id: 1
- name: 运行参数
  id: 2

每个params里的参数必须有以下的子参数:

  • category_id

    参数的值对应于params_category中参数类别的id的值。例子: category_id: 1

  • id

    参数号,这个号在第五步里会用到。例子: id: 11

  • filed_label

    参数说明。这是任意的字串,会在应用页面上显示,如下:

    ../_images/portal_par3.png
  • filed_type

    参数类别。可取的值为:

    • input: 输入文字。

    • select_single: 从多个选项中选一个,与参数value_range配合使用。

    • value_range: 多个可选值用逗号隔开,如“1,4,8”。与select_single配合使用,这个例子中,用户可以选择1,4,或8中的一个值。

    • check_box: 勾选,即该参数的值会被使用。与参数value配合使用,只有用户勾选这个参数后,其value的值会被命令行用上。

    • file-remote: 让用户选择服务器上的文件。用户点击后会弹出服务器文件浏览窗供用户选择。与参数value配合使用。

      value定义最高路径,用户只能选择该路径以下(包含子目录)的文件。若最高目录为用户的HOME,则 value: $HOME

      如果让用户选择目录,而不是文件,则需要增加参数 value_range: /dir/*

    • value: 缺省的参数值。如果过与file-remote配合使用,则为最高可浏览的目录。

    • app_cli: 定义参数怎样放到csub命令行中。有两个选项:“arg”或“var”。

      • arg:把转换后的参数值(见下面的app_cli_convert)放到命令行的最后。多个参数值按序排放。

      • var:命令行中使用“@参数号”来指定参数值在命令行中的位置。

      详见第五步里的例子。

    • app_cli_convert: 对用户输入值的转换。转换可以使用bash命令行语法。用保留词“$value”代替用户输入的参数值。

    备注

    参数value_type已经不再使用,可以忽略。

  • required

    是否必填参数。若值为“true”, 表示若用户不填,作业不能提交。

第五步:命令行#

下面两个参数配合使用。

  • command_path

    作业提交命令,一般为csub、vncsub、或dcvsub。

  • common_params

    作业提交参数。这里可以应用上面参数的值。

    如果参数的app_cli是arg,则无需在此引用,程序会自动把参数的值添加到 命令行尾部。

    如果参数的app_cli是var,则可以用“@参数号”来指定参数值在命令行中的位置。如: common_params: -o %J.out @12, 这里@12指把参数号为12的经过转换后的用户输入的值填放在命令行的这个位置。

    警告

    如果过是作业提交参数,则必须定义为var,因为这些参数不能放到作业应用的命令行后面。

例子1:

params_category:
- name: 应用参数                    # 用户点击应用图标后的页面中会有一个名为“应用参数”的区列出下面定义的参数
  id: 1                            # 参数类别号

params:
- category_id: 1                   # 这个参数放到“应用参数”区里
  id: 11                           # 参数号为11
  filed_label: 应用命令行           # 参数显示的标签
  filed_type: input                # 参数值由用户自由填入
  value_type: 字串行                # 忽略
  required: true                   # 必填参数
  app_cli: arg                     # 参数值放到命令行最后
  app_cli_convert: $value          # 直接使用用户输入的参数值,不做任何转换

- category_id: 1                   # 这个参数放到“应用参数”区里
  id: 12                           # 参数号为12
  filed_label: 工作目录             # 参数显示的标签
  filed_type: file-remote          # 用户可以浏览服务器文件系统
  value_range: /dir/*              # 用户远程浏览服务器只能选择目录
  value_type: 字串行               # 忽略
  value: $HOME                     # 从用户HOME开始浏览
  required: true                   # 必填参数
  app_cli: var                     # 放到命令行中的某个位置
  app_cli_convert: -cwd $value     # 插入命令时的值为 “-cwd 用户输入的值”

command_path: csub                 # 用csub提交作业
common_params: -o %J.out @12       # 最后的提交命令行为:
                                   # csub -o %J.out -cwd <工作目录的值> <应用命令行的值>

以上例子在页面上的效果如下图所示。

../_images/portal_par4.png

小技巧

在开发应用模板式,可参考已安装的/var/www/html/up/apps中的yaml文件,并对照页面上的效果。