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  }