调度器的使用说明

本说明介绍调度器的用法,包括两个命令ivic-vsched和ivic-vsched-utils,和配置文件/etc/ivic/vsched-config.yaml。

ivic-vsched

ivic-vsched没有命令行参数。运行之后,将启动调度器。调度器将循环查询数据库,用户可以按q键退出。

ivic-vsched-utils

ivic-vsched-utils命令行参数的说明如下

Usage: %s cmd [options]
       vsched-utils regression_test [<num>]

       vsched-utils dump_model [<filename>]

       vsched-utils import_model [<sqlfile>] [<modelpy>]
                               <sqlfile> default to 'virtsched/model.sql'
                               <modelpy> default to standard output
                               
       vsched-utils reload_model
                               
       vsched-utils import_sample

       vsched-utils import_xml vc|vl|vt|<filename>
                               vc for 'doc/vcluster-sample.xml'
                               vl for 'doc/vlab-sample.xml'
                               vt for 'doc/vtemplate-sample.xml'

       vsched-utils export_xml vLab@<num>|vTemplate@<num>|vCluster@<num>
 
       vsched-utils test_model [remote|local]
                               default to remote
       vsched-utils impl <operation>
       vsched-utils server
       vsched-utils proxy <server>[:<port>] <operation>
       vsched-utils redotask <id>
       vsched-utils redojob <id>
       vsched-utils massacre

regression_test

  • 运行vscheduler的回归测试,语法
    vsched-utils regression_test [<num>]
    
  • 其中 num 是部分带循环的测试脚本的循环次数

dump_model

  • dump portal 数据库的表结构,输出sql。语法
    vsched-utils dump_model [<filename>]
    

import_model

  • 将dump的sql表结构文件导入为sqlalchemy(scheduler使用的数据库对象映射库)可识别的 py 模块(ImportedModel?)
  • 语法
    vsched-utils import_model [<sqlfile>] [<modelpy>]
    
  • 其中两个参数分别是sql文件和py模块文件名,参数可忽略。

reload_model

  • 将数据库清空,危险,慎用

import_xml

  • 导入 vlab/vcluster/vtemplate 的 xml 到数据库。语法
           vsched-utils import_xml vc|vl|vt|<filename>
                                   vc for 'doc/vcluster-sample.xml'
                                   vl for 'doc/vlab-sample.xml'
                                   vt for 'doc/vtemplate-sample.xml'
    
  • 其中vc/vl/vt分别为三个样例xml文件的缩写。还可以自己指定用文件名

export_xml

  • 将数据库表中的记录,导出成 xml 文件。语法
           vsched-utils export_xml vLab@<num>|vTemplate@<num>|vCluster@<num>
    

test_model

  • 对数据库连接和数据库表作简单的检查
           vsched-utils test_model [remote|local]
    
  • 其中,remote 访问配置文件中的 portal 数据库,local 访问临时的 sqlite 数据库

impl

  • 运行 scheduler 接口命令。接口如下:
        def importTemplate(self, xml):         # 导入模板,其中xml参数是模板的xml字符串
        def listTemplate(self):                # 列模板,返回值是模板列表字符串
        def listTemplate_ByType(self, typ):    # 按照类型列模板,其中参数typ是模板类型,可选vLab, vCluster, vTemplate
        def showTemplate(self, uuid):          # 显示uuid参数所代表的模板详细信息,如果可以保证唯一性,uuid可以只给前缀
        def showTemplate_ByKey(self, key):     # 按照关键字列模板,其中参数key的语法是: vLab@id, vCluster@id, vTemplate@id,显示相应数据库表中标识为id的记录
        def removeTemplate(self, uuid):        # 删除uuid参数代表的模版,uuid如果只给前缀,必须唯一。
        def removeTemplates(self, uuid):       # 删除uuid参数代表的多个模板,参数uuid可以是前缀,作为通配符匹配多个模板
        def removeTemplate_ByKey(self, key):   # 删除key参数代报的模板
        def listInstance(self):                # 列模板实例,包括vLab/vCluster/vNode/Nic/vSwitch等对象
        def listInstance_ByType(self, typ):    # 按照类型列模板实例,参数可选vLab/vCluster/vNode/Nic/vSwitch
        def listJob(self):                     # 列举Job表的对象
        def listTask(self):                    # 列举Task表对象
        def removeInstance(self, uuid):        # 删除uuid代表的模板实例
        def removeInstances(self, uuid):       # 删除uuid前缀代表的多个模板实例
        def removeInstance_ByKey(self, key):   # 删除key代表的模板实例
        def deployV(self, template_uuid):      # 部署虚拟环境,参数是模板的uuid,程序会自动的在vLab和vCluster表中查找uuid
        def deployV_ByKey(self, template_key): # 部署虚拟环境,参数是模板的key,即vCluster@id这样的字符串
        def redeployV(self, uuid):             # 重新部署虚拟环境,参数是实例的uuid
        def redeployV_ByKey(self, key):        # 重新部署虚拟环境,参数是实例的key
        def startV(self, uuid):                # 按照uuid启动虚拟环境
        def startV_ByKey(self, key):           # 按照key启动虚拟环境
        def stopV(self, uuid):                 # 按照uuid停止虚拟环境
        def stopV_ByKey(self, key):            # 按照key停止虚拟环境
        def undeployV(self, uuid):             # 反部署
        def undeployV_ByKey(self, key):        # 反部署
    

server

  • 启动 SOAP 服务器,按照配置文件内容帮定端口和地址
  • 服务器暴露的接口同上面的impl

proxy

  • 访问 scheduler SOAP服务器暴露的接口,运行相应的命令。语法
vsched-utils proxy <server>[:<port>] <operation>
  • 其中,可以运行的接口方法同上面的impl

redotask

  • 语法
    vsched-utils redotask <id>
    
  • 强制重新执行数据库表中id指定的任务

redojob

  • 语法
    vsched-utils redojob <id>
    
  • 强制重新执行数据库表中id指定的作业

massacre

  • 大屠杀,危险,慎用。该操作将遍历数据库中所有的模板实例,并调用其反部署操作,无论是否成功都将删除该实例。

vsched-config.yaml

  • 下面是样例配置文件
    prefix: ""                         # 安装目录的前缀,默认为空,安装到根目录
    run_dir: "$prefix/var/run/ivic"    # 这三个参数暂时没有用到
    lib_dir: "$prefix/var/lib/ivic"
    www_dir: "$lib_dir/www"
    # 数据库连接字符串
    connect_string: "mysql://user:xxx@cvc.ivic.org.cn/CVC_Portal_development"
    #connect_string: "mysql://user:xxx@localhost/liqin_cvc"
    #connect_string: "sqlite:///test_vsched.db"
    user_id: 5         # 生成任务时所用的用户id
    vmc_port: 8989     # 虚拟机容器 SOAP 服务器的端口
    vsr_port: 8080     # 虚拟网桥服务器 SOAP 服务器的端口
    use_dummy_soap: 0  # 是否调用SOAP哑客户端作为测试
    thread_num: 10     # 并发线程数目
    port: 8181         # scheduler SOAP服务器的端口
    address: ""        # scheduler SOAP服务器帮定的地址