通过服务目录快速定制参数表单

本文涉及的产品
资源编排,不限时长
简介: 服务目录支持开放部分模板参数让用户自行填写。本文通过几个例子,向读者展示如何通过服务目录快速定制参数表单。

服务目录(Service Catalog)文章索引



IT管理员可以通过服务目录创建和发布满足企业合规要求的产品,用户在启动产品的时候需要遵循一定的规则。同时服务目录也支持开放部分模板参数,让用户自行填写,帮助企业在合规与敏捷之间寻找一个平衡点。


接下来我们通过几个例子,向读者展示如何通过服务目录快速定制参数表单。


例1:将模板参数开放给用户填写

在Terraform模板中定义Variable(变量)的方式可以参考Terraform官方文档


以下面的模板为例,该模板会在当前账号下创建一个RAM角色,角色名称可以通过变量的方式由用户输入。

data "alicloud_caller_identity""current" {
}
resource"alicloud_ram_role""default" {
  name        = var.role_name
  document    =<<EOF  {
"Statement": [
      {
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::${data.alicloud_caller_identity.current.account_id}:root"          ]
        }
      }
    ],
"Version": "1"  }
EOF  description ="created by terraform"  force       = true
}
variable"role_name" {
  type =string  description ="RAM角色名称"}


如果是在本地通过CLI运行Terraform模板,可以通过CLI命令的参数、环境变量、配置文件等方式传入变量值;通过服务目录在线运行,则是用户在页面上填写表单的方式传入变量值。


用户填写参数后启动产品,可以看到Terraform模板的输出值,在RAM控制台上也可以确认新创建的RAM角色的信息。


例2:限定ECS实例规格(参数选项)

下面是第二个例子,该模板会在指定的可用区创建一台ECS,并且将实例规格开放给用户选择。如果只能输入字符串,而不是从给定的选项中选择,会存在两个问题:

  1. 用户需要从ECS控制台或者文档中找到类似于“ecs.s6-c1m1.small”的实例规格;
  2. 用户可以填写任意的规格。


服务目录底层基于ROS运行Terraform模板,支持在Terraform模板中补充ROS的参数定义,以扩展参数在页面表单上的展示和行为。


在这个例子中,我们在instance_type这个变量的description字段中使用了ROS的语法,AllowedValues表示变量的可选值,Label表示页面表单中的变量名称,Description表示备注。

resource"alicloud_instance""instance" {
  availability_zone          ="cn-hangzhou-h"  security_groups            = alicloud_security_group.group.*.id
  instance_type              = var.instance_type
  system_disk_category       ="cloud_efficiency"  system_disk_name           ="test_system_disk_name"  system_disk_description    ="test_system_disk_description"  image_id                   ="ubuntu_18_04_64_20G_alibase_20190624.vhd"  instance_name              ="test_instance"  vswitch_id                 ="vsw-bp1v8vk0cnokddgmmxxxx"  internet_max_bandwidth_out =10}
variable"instance_type" {
  type        =string  description =<<EOT
  {
"AllowedValues": ["ecs.s6-c1m1.small", "ecs.s6-c1m2.small", "ecs.s6-c1m2.large", "ecs.s6-c1m2.xlarge", "ecs.s6-c1m2.2xlarge"],
"Description": "请选择ECS实例规格",
"Label": "ECS实例规格"  }
  EOT
}


用户看到的页面表单如下图所示。


例3:选择账号中已有的VPC和VSwitch(动态参数选项)

例2中的选项是固定的,这对于ECS实例规格可能已经足够了,但如果是要选择账号中已有的VPC和VSwitch,管理员就需要把VPC和VSwitch的ID都记录下来,并且当出现新的VPC后,还要重新修改模板,添加可选值。

resource"alicloud_instance""instance" {
  availability_zone          = var.zone_id
  security_groups            = alicloud_security_group.group.*.id
  instance_type              = var.instance_type
  system_disk_category       ="cloud_efficiency"  system_disk_name           ="test_system_disk_name"  system_disk_description    ="test_system_disk_description"  image_id                   ="ubuntu_18_04_64_20G_alibase_20190624.vhd"  instance_name              ="test_instance"  vswitch_id                 = var.vswitch_Id
  internet_max_bandwidth_out =10}
variable"zone_id" {
  type        =string  description =<<EOT
  {
"AssociationProperty": "ALIYUN::ECS::Instance::ZoneId",
"Type": "String",
"Description": {
"zh-cn": "可用区配置决定了新建ECS实例的可用区。此外,如果您选择已有基础资源配置,仅能选到该可用区下的交换机。",
"en": "ECS VSwitch Zone ID defines the Availability Zone for creating ECS instance. If you choose existing Infrastructure Configuration,you can only find the VSwitch under the availabilty zone."      },
"Label": {
"zh-cn": "可用区",
"en": "ECS VSwitch Zone ID"      }
  }
  EOT
}
variable"vpc_id" {
  type        =string  description =<<EOT
  {
"AssociationProperty": "ALIYUN::ECS::VPC::VPCId",
"Label": "VPC"  }
  EOT
}
variable"vswitch_Id" {
  type        =string  description =<<EOT
  {
"AssociationProperty": "ALIYUN::ECS::VSwitch::VSwitchId",
"AssociationPropertyMetadata": {
"ZoneId": "$${zone_id}",
"VpcId": "$${vpc_id}"    },
"Label": "VSwitch"  }
  EOT
}
variable"instance_type" {
  type        =string  description =<<EOT
  {
"AssociationProperty": "ALIYUN::ECS::Instance::InstanceType",
"AssociationPropertyMetadata": {
"ZoneId": "$${zone_id}"    },
"Label": {
"zh-cn": "实例规格",
"en": "Instance Type"    }
  }
  EOT
}


可以通过动态参数选项来解决这个问题,在这个例子中,我们定义了四个参数,分别是zone_id(可用区)、vpc_id(VPC ID)、vswitch_id(VSwitch ID)和instance_type(ECS实例规格)。AssociationProperty是动态参数引用的参数类型,AssociationPropertyMetadata是筛选条件(可选),页面会根据参数类型,实时获取账号中对应的资源列表,作为参数的选项。例如根据当前选择的地域,列出该地域下的VPC列表,当用户选择VPC和可用区后,再列出对应的VSwitch列表,供用户选择。


动态参数选项同时也可以实现选项的可视化,达到类似于云产品控制台的效果。


这些参数最终会被应用到模板中。


当前支持的动态参数选项可以参考相关文档


例4:参数分组

下面的例子中,我们有网络相关的参数vpc_id、vswitch_id,也有ECS相关的参数instance_type,当参数比较多时,可以使用.metadata文件对参数进行分组,也可以在分组内对参数进行排序。


文件结构

│─ .metadata // 元数据文件

│─ main.tf // Terraform模板文件(主体)

└─ variables.tf // Terraform模板文件(变量部分)


.metadata文件

{
"ALIYUN::ROS::Interface": {
"ParameterGroups": [
      {
"Parameters": [
"zone_id"        ],
"Label": {
"default": {
"en": "Basic Configuration Settings",
"zh-cn": "基础设置"          }
        }
      },
      {
"Parameters": [
"vpc_id",
"vswitch_id"        ],
"Label": {
"default": {
"en": "Network Configuration Settings",
"zh-cn": "网络设置"          }
        }
      },
      {
"Parameters": [
"instance_type"        ],
"Label": {
"default": {
"en": "ECS Configuration Settings",
"zh-cn": "ECS设置"          }
        }
      }
    ]
  }
}


用户看到的页面表单如下图所示。


参考资料

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
JavaScript 前端开发
新建全局代码片段==》输入自定义文件名称
要在文本编辑器中创建和使用自定义代码片段,请按照以下步骤操作:首先通过设置菜单进入用户代码片段选项,并新建一个全局代码片段文件,输入自定义文件名。随后,在新创建的文件中定义代码片段,包括指定片段名称、适用范围、触发前缀、代码主体及描述。例如,“myscript”片段可设置前缀为“myscript”,并在各类文件中自动生成`&lt;script&gt;`标签。通过这种方式,可以快速插入常用的代码结构,提高编程效率。
37 1
|
4月前
表单的构成与创建、属性
表单的构成与创建、属性。
28 5
|
8月前
|
iOS开发
表单输入绑定 基本用法
表单输入绑定 基本用法
|
8月前
|
前端开发 JavaScript
前端用原生js编辑文件内容→创建生成文件(格式可以自定义)→下载文件
前端用原生js编辑文件内容→创建生成文件(格式可以自定义)→下载文件
|
前端开发 程序员
提交文件至服务器的设置——表单属性中的 enctype
提交文件至服务器的设置——表单属性中的 enctype
269 0
|
JSON 缓存 JavaScript
表单方式文件上传和获取文件属性
表单方式文件上传和获取文件属性
一分钟学会使用ApiPost中的全局参数和目录参数
一分钟学会使用ApiPost中的全局参数和目录参数
一分钟学会使用ApiPost中的全局参数和目录参数
Flutter页面参数的传递(获取&返回),比如修改昵称头像,并在上一级页面返回显示
Flutter页面参数的传递(获取&返回),比如修改昵称头像,并在上一级页面返回显示
403 0
|
前端开发
如何基于Joomla默认表单组件创建联系表单
本教程将向您展示如何基于Joomla默认组件创建联系人表单。我们将向您展示以下的方法:
如何基于Joomla默认表单组件创建联系表单
|
前端开发
bootstrap改变上传文件按钮样式,并显示已上传文件名
参考博文:  html中,文件上传时使用的的样式自定义html中默认样式很丑,这里用了Bootstrap按钮的样式,并获取文件名显示在其右侧 闲话少叙,直接上代码: 任务数据              上传                   未上传文件 function loadFile(file){     $$("#filename").
4815 0

热门文章

最新文章

相关实验场景

更多