本文以創建一組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****"
                }
            }
        }
    }