github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/sms/v3/templates/requests.go (about) 1 package templates 2 3 import ( 4 "github.com/chnsz/golangsdk" 5 ) 6 7 // TemplateOpts 创建/更新虚拟机模板 8 type TemplateOpts struct { 9 // 模板名称 10 Name string `json:"name" required:"true"` 11 // 是否是通用模板,只有为true才能在console中显示 12 IsTemplate *bool `json:"is_template" required:"true"` 13 // Region信息,如 cn-north-4 14 Region string `json:"region" required:"true"` 15 // 项目ID 16 ProjectID string `json:"projectid" required:"true"` 17 // 可用区,如 cn-north-4b 18 AvailabilityZone string `json:"availability_zone,omitempty"` 19 // 目标端服务器名称 20 TargetServerName string `json:"target_server_name,omitempty"` 21 // 虚拟机规格 22 Flavor string `json:"flavor,omitempty"` 23 // VPC信息 24 Vpc *VpcRequest `json:"vpc,omitempty"` 25 // 网卡信息,支持多个网卡,如果是自动创建,只填一个,id使用“autoCreate” 26 Nics []NicRequest `json:"nics,omitempty"` 27 // 安全组,支持多个安全组,如果是自动创建,只填一个,id使用“autoCreate” 28 SecurityGroups []SgRequest `json:"security_groups,omitempty"` 29 // 公网IP信息 30 PublicIP *EipRequest `json:"publicip,omitempty"` 31 // 磁盘信息 32 Disks []DiskRequest `json:"disk,omitempty"` 33 // 磁盘类型: "SAS", "SSD", "GPSSD", "ESSD" 34 VolumeType string `json:"volumetype,omitempty"` 35 // 数据盘磁盘类型: "SAS", "SSD", "GPSSD", "ESSD" 36 DataVolumeType string `json:"data_volume_type,omitempty"` 37 // 目的端服务器密码 38 ServerPassword string `json:"target_password,omitempty"` 39 } 40 41 // VpcRequest vpc对象 42 type VpcRequest struct { 43 // 虚拟私有云ID,如果是自动创建,填“autoCreate” 44 Id string `json:"id" required:"true"` 45 // 虚拟私有云名称 46 Name string `json:"name" required:"true"` 47 // VPC的网段,默认192.168.0.0/16 48 Cidr string `json:"cidr,omitempty"` 49 } 50 51 // NicRequest 网卡资源 52 type NicRequest struct { 53 // 子网ID,如果是自动创建,使用"autoCreate" 54 Id string `json:"id" required:"true"` 55 // 子网名称 56 Name string `json:"name" required:"true"` 57 // 子网网关/掩码 58 Cidr string `json:"cidr,omitempty"` 59 // 虚拟机IP地址,如果没有这个字段,自动分配IP 60 Ip string `json:"ip,omitempty"` 61 } 62 63 // SgRequest 安全组object 64 type SgRequest struct { 65 // 安全组ID 66 Id string `json:"id" required:"true"` 67 // 安全组名称 68 Name string `json:"name" required:"true"` 69 } 70 71 // EipRequest 公网ip 72 type EipRequest struct { 73 // 弹性公网IP类型,默认为5_bgp 74 Type string `json:"type" required:"true"` 75 // 带宽大小,单位:Mbit/s 76 BandwidthSize int `json:"bandwidth_size" required:"true"` 77 } 78 79 // DiskRequest 磁盘模板 80 type DiskRequest struct { 81 // 磁盘序号,从0开始 82 Index int `json:"index" required:"true"` 83 // 磁盘名称 84 Name string `json:"name" required:"true"` 85 // 磁盘类型,同volumetype字段 86 Disktype string `json:"disktype" required:"true"` 87 // 磁盘大小,单位:GB 88 Size int `json:"size" required:"true"` 89 } 90 91 // Create 新增模板信息 92 func Create(c *golangsdk.ServiceClient, opts *TemplateOpts) (string, error) { 93 b, err := golangsdk.BuildRequestBody(opts, "template") 94 if err != nil { 95 return "", err 96 } 97 98 var rst golangsdk.Result 99 _, rst.Err = c.Post(rootURL(c), b, &rst.Body, nil) 100 101 var r CreateTemplateResp 102 if err := rst.ExtractInto(&r); err != nil { 103 return "", err 104 } 105 106 return r.ID, nil 107 } 108 109 // Get 查询指定ID模板信息 110 func Get(c *golangsdk.ServiceClient, id string) (*TemplateResponse, error) { 111 var rst golangsdk.Result 112 _, rst.Err = c.Get(templateURL(c, id), &rst.Body, nil) 113 114 var r struct { 115 Template TemplateResponse `json:"template"` 116 } 117 118 err := rst.ExtractInto(&r) 119 if err != nil { 120 return nil, err 121 } 122 123 return &r.Template, nil 124 } 125 126 // Update 修改模板信息 127 func Update(c *golangsdk.ServiceClient, id string, opts *TemplateOpts) *golangsdk.ErrResult { 128 b, err := golangsdk.BuildRequestBody(opts, "template") 129 if err != nil { 130 return nil 131 } 132 133 var r golangsdk.ErrResult 134 _, r.Err = c.Put(templateURL(c, id), b, nil, nil) 135 return &r 136 } 137 138 // Delete 删除指定ID的模板 139 func Delete(c *golangsdk.ServiceClient, id string) *golangsdk.ErrResult { 140 var r golangsdk.ErrResult 141 _, r.Err = c.Delete(templateURL(c, id), nil) 142 return &r 143 }