本文以创建一组ECS实例为例,为您介绍如何将Excel模板转换为ROS模板。

Excel模板语法

您需要将参数、资源类型及属性值填入Excel模板的第一个Sheet页当中,图形示例如下:

Excel

Excel模板填写说明如下:

  • 第1列:参数、资源类型及其属性。
    配置项 是否必选 说明
    ROS::Parameters 转换后的ROS模板中的参数。

    ROS::Parameters下方的表格中填写参数名称。您可以在第2列~第n列中通过!Ref引用参数。

    ROS::Resources 转换后的ROS模板中的资源。

    ROS::Resources下方的表格中填写资源类型,然后填写资源类型对应的属性名称。您可以按照相同方法定义多个资源类型。

    关于资源类型的更多信息,请参见资源类型索引

  • 第2列~第n列:参数取值或资源类型的属性值。每一列代表一个模板。

您可以在Excel模板中添加注释:

  • 单元格以#开始注释整行内容。
  • 如果单元格中填写了资源类型,则在此单元格中换行显示的其他内容也作为注释。

步骤一:编辑源模板文件

您可以按照Excel模板语法编辑模板文件,也可以访问EcsInstance.xlsx,下载Excel模板文件示例。

本文示例中,Excel模板中填写了第2列和第3列内容,转换后将生成2个模板。

步骤二:转换模板

执行以下命令,将Excel模板转换为ROS模板,并在当前目录生成template-{number}.json

说明 {number}取值为整数,从0开始依次递增。例如:template-0.json代表第2列填写的模板,template-1.json代表第3列填写的模板。
rostran transform templates/excel/EcsInstance.xlsx --target-path tests/template.json

步骤三:查看转换后的ROS模板

本示例中,共生成template-0.jsontemplate-1.json两个模板文件,具体如下:

  • template-0.json
    {
        "ROSTemplateFormatVersion": "2015-09-01",
        "Parameters": {
            "ZoneId": {
                "Type": "String",
                "Default": "cn-beijing-h"
            },
            "SystemDiskSize": {
                "Type": "Number",
                "Default": 100
            }
        },
        "Resources": {
            "MyInstance": {
                "Type": "ALIYUN::ECS::InstanceGroup",
                "Properties": {
                    "RegionId": "cn-beijing",
                    "ZoneId": "cn-beijing-h",
                    "ChargeType": "PostPaid",
                    "InstanceType": "ecs.g5.large",
                    "Amount": 200,
                    "SystemDiskCategory": "cloud_efficiency",
                    "SystemDiskSize": 100,
                    "DiskMappings": [{
                        "Category": "cloud_ssd",
                        "Size": 200
                    }],
                    "ImageId": "EasyShopLinux2019****",
                    "Password": "pass****",
                    "VpcId": {
                        "Ref": "MyVpc"
                    },
                    "VSwitchId": {
                        "Ref": "MyVSwitch"
                    },
                    "InternetMaxBandwidthOut": 0,
                    "SecurityGroupId": "sg-2zej2g9ep36k3yhh****"
                }
            },
            "MyVpc": {
                "Type": "ALIYUN::ECS::Vpc",
                "Properties": {
                    "VpcName": "MyVpcName"
                }
            },
            "MyVSwitch": {
                "Type": "ALIYUN::ECS::VSwitch",
                "Properties": {
                    "VpcId": {
                        "Ref": "MyVpc"
                    },
                    "ZoneId": "cn-beijing-h",
                    "VSwitchName": "MyVSwitchName"
                }
            }
        }
    }
  • template-1.json
    {
        "ROSTemplateFormatVersion": "2015-09-01",
        "Parameters": {
            "ZoneId": {
                "Type": "String"
            },
            "SystemDiskSize": {
                "Type": "Number"
            }
        },
        "Resources": {
            "MyInstance": {
                "Type": "ALIYUN::ECS::InstanceGroup",
                "Properties": {
                    "RegionId": "cn-beijing",
                    "ZoneId": {
                        "Ref": "ZoneId"
                    },
                    "ChargeType": "PostPaid",
                    "InstanceType": "ecs.r5.6xlarge",
                    "Amount": 50,
                    "SystemDiskCategory": "cloud_ssd",
                    "SystemDiskSize": 100,
                    "DiskMappings": [{
                        "Category": "cloud_ssd",
                        "Size": 200
                    }],
                    "ImageId": "EasyShopLinux2019****",
                    "Password": "password",
                    "VpcId": "vpc-bp1397wjfjjzlck86****",
                    "VSwitchId": "vsw-bp1apypxlcxdao9w7****",
                    "InternetMaxBandwidthOut": 0,
                    "SecurityGroupId": "sg-2zej2g9ep36k3yhh****"
                }
            }
        }
    }