飞致云-修改/删除虚拟机工作空间

记录一下通过SQL实现对飞致云添加/删除虚拟机的工作空间

相关数据库操作说明如下:

流程思维导图 思维导图

资源从工作空间中删除方法

  1. fit2cloud.cloud_account表中,过滤plugin_name字段关键值,对应信息如下

    关键字 云类型
    fit2cloud-aliyun-plugin 阿里云
    fit2cloud-aws-plugin AWS
    fit2cloud-huawei-plugin 华为云
    fit2cloud-kubernetes-plugin Docker
    fit2cloud-vsphere-plugin VMware

    执行如下SQL,可以提取出符合VMware类型的虚拟机

    1
    2
    3
    select distinct id
    from fit2cloud.cloud_account
    where plugin_name like "%vsphere%";
    上述SQL可以提取出VMware账号的id信息,如下样例: > 5ace9c28-29e5-4e14-9271-f77e5497f372 > a303b208-7433-4fb8-8ea6-a3718f6bc7a4 > e409fd2b-e9c5-4d8a-9edf-7a010e7c7537

  2. 取出第一步中的一个样例ID 5ace9c28-29e5-4e14-9271-f77e5497f372,执行如下SQL去提取该云账号下的所有虚拟机

    1
    2
    3
    4
    select distinct id
    from fit2cloud.cloud_server
    where account_id in ("5ace9c28-29e5-4e14-9271-f77e5497f372")
    and instance_status in ("Running", "Stopped");
    上述SQL可以提取出VMware账号的id = 5ace9c28-29e5-4e14-9271-f77e5497f372的虚拟机信息,如下样例: > 07b88e4f-db83-49c5-934f-16b42fa66c5f > 29e94682-6662-4c55-a5f7-e46c2093aa94 > 5c896807-681d-42f2-99a2-311a7a2959ac > 93705bcc-8023-4aec-a490-ea3bc2382a4b > ...

  3. 取出第二步中的一个样例id = 07b88e4f-db83-49c5-934f-16b42fa66c5f,执行如下SQL去删除该虚拟机在fit2cloud.tag_mapping表中对应的组织信息

    1
    2
    3
    4
    delete
    from fit2cloud.tag_mapping
    where resource_id = '07b88e4f-db83-49c5-934f-16b42fa66c5f'
    and tag_key like "%组织%";
    上述SQL会将对应的信息做删除处理,此时WEB页面并不会同步更新,需要执行下一步操作

  4. 取出第二步中的一个样例id = 07b88e4f-db83-49c5-934f-16b42fa66c5f,执行如下SQL将该虚拟机在fit2cloud.tag_mapping表中对应的workspace_id置空

    1
    2
    3
    update fit2cloud.cloud_server
    set workspace_id = ''
    where id = "07b88e4f-db83-49c5-934f-16b42fa66c5f";
    此时信息已可以正确显示到WEB页面上,刷新即可观察到相关资源已从工作空间中移除

资源添加到工作空间中的方法

以虚拟机ID = 07b88e4f-db83-49c5-934f-16b42fa66c5f,添加到工作空间name = VMware-test03为例

  1. fit2cloud.workspace表中提取数据,以VMware-test03为测试样例,执行SQL如下:

    1
    2
    3
    select *
    from fit2cloud.workspace
    where name = "VMware-test03";
    上述脚本执行后,会得到如下结果:

    id organization_id name description create_time
    98e7c07b-7111-44bf-b717-ec5cd5ec902e 6a7eabf3-0500-469f-b14c-533fb70dd08d VMware-test03 1607579232573
  2. 拿到测试样例的id信息,去查询tag_value表中tag_keyid的信息,如下SQL:

    1
    2
    3
    4
    select *
    from fit2cloud.tag_value
    where tag_value = "98e7c07b-7111-44bf-b717-ec5cd5ec902e"
    and tag_key like "%组织%";
    上述脚本执行后,会得到如下结果:

    id tag_key tag_value tag_value_alias create_time enable _index
    711c03be-8593-466e-bec6-fd9007d99f99 四级组织 98e7c07b-7111-44bf-b717-ec5cd5ec902e VMware-test03 1607579232613 1 0
  3. 按照如下格式,向tag_mapping表中插入一行数据:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UUID: 自行生成
    resource_id: 虚拟机ID,当前样例: 07b88e4f-db83-49c5-934f-16b42fa66c5f
    resource_type: 目前有如下mapping,当前样例应填入: VIRTUALMACHINE
    CLOUD_DISK
    DATABASE
    LOAD_BALANCER
    VIRTUALMACHINE
    tag_key: 上一步拿到的tag_key的具体值,当前样例为: 四级组织
    tag_value_id: 上一步拿到的条目对应的id值,当前样例为: 711c03be-8593-466e-bec6-fd9007d99f99
    create_time: 当前时间转换为时间戳的值 unix_timestamp(now())
    即,格式化后的SQL如下:
    1
    2
    3
    4
    5
    6
    7
    insert into fit2cloud.tag_mapping
    values (uuid(),
    "07b88e4f-db83-49c5-934f-16b42fa66c5f",
    "VIRTUALMACHINE",
    "四级组织",
    "711c03be-8593-466e-bec6-fd9007d99f99",
    unix_timestamp(now()));

    以下步骤为更新组织结构信息流程,确保实例关联的组织有正确的树形结构1

  4. 依据步骤1中提取到的organization_id(或者后续步骤7中提取到的organization_id),去organization表中查询idparent_id信息,检查parent_id == 0是否成立

    1
    2
    3
    select *
    from fit2cloud.organization
    where id = "6a7eabf3-0500-469f-b14c-533fb70dd08d";
    上述脚本执行后,会得到如下结果:

    id name english_name description create_time parent_id
    6a7eabf3-0500-469f-b14c-533fb70dd08d 北方运营中心 goldwind 北方运营中心 1606282263126 63d811f2-78d2-4cba-a882-4beab9885a8e
  5. 如果上述结果parent_id != 0,则需要去tag_value表中查询tag_value = organization_id的结果,如下SQL:

    1
    2
    3
    4
    select *
    from fit2cloud.tag_value
    where tag_value = "6a7eabf3-0500-469f-b14c-533fb70dd08d"
    and tag_key like "%组织%";
    上述脚本执行后,会得到如下结果:

    id tag_key tag_value tag_value_alias create_time enable _index
    e0e0351c-2bc4-4d90-9ca8-ae568d2d2309 三级组织 6a7eabf3-0500-469f-b14c-533fb70dd08d 北方运营中心 1606282263182 1 0
  6. 按照如下格式,向tag_mapping表中插入一行数据:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UUID: 自行生成
    resource_id: 虚拟机ID,当前样例: 07b88e4f-db83-49c5-934f-16b42fa66c5f
    resource_type: 目前有如下mapping,当前样例应填入: VIRTUALMACHINE
    CLOUD_DISK
    DATABASE
    LOAD_BALANCER
    VIRTUALMACHINE
    tag_key: 上一步拿到的tag_key的具体值,当前样例为: 三级组织
    tag_value_id: 上一步拿到的条目对应的id值,当前样例为: e0e0351c-2bc4-4d90-9ca8-ae568d2d2309
    create_time: 当前时间转换为时间戳的值 unix_timestamp(now())
    即,格式化后的SQL如下:
    1
    2
    3
    4
    5
    6
    7
    insert into fit2cloud.tag_mapping
    values (uuid(),
    "07b88e4f-db83-49c5-934f-16b42fa66c5f",
    "VIRTUALMACHINE",
    "三级组织",
    "e0e0351c-2bc4-4d90-9ca8-ae568d2d2309",
    unix_timestamp(now()));

  7. parent_id != 0,因此将步骤4中获取到的parent_id作为idorganization表中查询信息,如下SQL:

    1
    2
    3
    select *
    from fit2cloud.organization
    where id = "63d811f2-78d2-4cba-a882-4beab9885a8e";

    上述脚本执行后,会得到如下结果:

    id name english_name description create_time parent_id
    63d811f2-78d2-4cba-a882-4beab9885a8e 资产管理公司 goldwind 资产管理公司 1606282263123 87bc533d-cec8-45d1-acf0-3b2ef53d90c0

    重复执行上述步骤4-步骤7,直到获取到parent_id == 0为止.当前测试样例中,需插入到tag_mapping表中3条数据.

  8. 上述操作执行完成后,最后执行对当前虚拟机进行更新workspace操作,如下SQL:

    1
    2
    3
    update fit2cloud.cloud_server
    set workspace_id = "98e7c07b-7111-44bf-b717-ec5cd5ec902e"
    where id = "07b88e4f-db83-49c5-934f-16b42fa66c5f";
    注意: 此处的workspace_id步骤1中查询到的最底级WorkSpace

上述操作完成后,刷新WEB页面即可发现测试样例已关联到正确的工作空间.


  1. 当前测试组织为四级组织,需要逐级关联,直到一级组织↩︎