github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/waf_hw/v1/premium_instances/requests.go (about)

     1  /*
     2   Copyright (c) Huawei Technologies Co. Ltd. 2021. All rights reserved.
     3  */
     4  
     5  package premium_instances
     6  
     7  import (
     8  	"fmt"
     9  	"github.com/chnsz/golangsdk"
    10  )
    11  
    12  // requestOpts defines the request header and language.
    13  var requestOpts = golangsdk.RequestOpts{
    14  	MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
    15  }
    16  
    17  // CreateInstanceOpts the parameters in the creating request body
    18  type CreateInstanceOpts struct {
    19  	Region        string   `json:"region" required:"true"`
    20  	ChargeMode    int      `json:"chargemode" required:"true"`
    21  	AvailableZone string   `json:"available_zone" required:"true"`
    22  	Arch          string   `json:"arch" required:"true"`
    23  	NamePrefix    string   `json:"instancename" required:"true"`
    24  	Specification string   `json:"specification" required:"true"`
    25  	CpuFlavor     string   `json:"cpu_flavor" required:"true"`
    26  	VpcId         string   `json:"vpc_id" required:"true"`
    27  	SubnetId      string   `json:"subnet_id" required:"true"`
    28  	SecurityGroup []string `json:"security_group" required:"true"`
    29  	Count         int      `json:"count" required:"true"`
    30  	Ipv6Enable    string   `json:"ipv6_enable,omitempty"`
    31  	VolumeType    string   `json:"volume_type,omitempty"`
    32  	ClusterId     string   `json:"cluster_id,omitempty"`
    33  	PoolId        string   `json:"pool_id,omitempty"`
    34  	ResTenant     *bool    `json:"res_tenant,omitempty"`
    35  }
    36  
    37  // ListInstanceOpts the parameters in the querying request.
    38  type ListInstanceOpts struct {
    39  	EnterpriseProjectId string `q:"enterprise_project_id"`
    40  	Page                int    `q:"page"`
    41  	PageSize            int    `q:"pagesize"`
    42  	InstanceName        string `q:"instancename"`
    43  }
    44  
    45  // UpdateInstanceOpts the parameters in the updating request.
    46  type UpdateInstanceOpts struct {
    47  	InstanceName string `json:"instancename"`
    48  }
    49  
    50  // CreateInstance will create a dedicated waf instance based on the values in CreateOpts.
    51  func CreateInstance(c *golangsdk.ServiceClient, opts CreateInstanceOpts) (*CreationgRst, error) {
    52  	return CreateWithEpsId(c, opts, "")
    53  }
    54  
    55  func generateEpsIdQuery(epsId string) string {
    56  	if len(epsId) == 0 {
    57  		return ""
    58  	}
    59  	return fmt.Sprintf("?enterprise_project_id=%s", epsId)
    60  }
    61  
    62  func CreateWithEpsId(c *golangsdk.ServiceClient, opts CreateInstanceOpts, epsId string) (*CreationgRst, error) {
    63  	b, err := golangsdk.BuildRequestBody(opts, "")
    64  	if err != nil {
    65  		return nil, err
    66  	}
    67  
    68  	var rst golangsdk.Result
    69  	_, err = c.Post(rootURL(c)+generateEpsIdQuery(epsId), b, &rst.Body, &golangsdk.RequestOpts{
    70  		MoreHeaders: requestOpts.MoreHeaders,
    71  	})
    72  
    73  	if err == nil {
    74  		var r CreationgRst
    75  		if err = rst.ExtractInto(&r); err == nil {
    76  			return &r, nil
    77  		}
    78  	}
    79  	return nil, err
    80  }
    81  
    82  // GetInstance get the waf instance detail.
    83  func GetInstance(c *golangsdk.ServiceClient, id string) (*DedicatedInstance, error) {
    84  	return GetWithEpsId(c, id, "")
    85  }
    86  
    87  func GetWithEpsId(c *golangsdk.ServiceClient, id string, epsId string) (*DedicatedInstance, error) {
    88  	var rst golangsdk.Result
    89  	_, err := c.Get(resourceURL(c, id)+generateEpsIdQuery(epsId), &rst.Body, &golangsdk.RequestOpts{
    90  		MoreHeaders: requestOpts.MoreHeaders,
    91  	})
    92  
    93  	if err == nil {
    94  		var r DedicatedInstance
    95  		if err = rst.ExtractInto(&r); err == nil {
    96  			return &r, nil
    97  		}
    98  	}
    99  	return nil, err
   100  }
   101  
   102  // ListInstance query a list of waf instance base on ListInstanceOpts
   103  func ListInstance(c *golangsdk.ServiceClient, opts ListInstanceOpts) (*DedicatedInstanceList, error) {
   104  	url := rootURL(c)
   105  	query, err := golangsdk.BuildQueryString(opts)
   106  	if err != nil {
   107  		return nil, err
   108  	}
   109  	url += query.String()
   110  
   111  	var rst golangsdk.Result
   112  	_, err = c.Get(url, &rst.Body, &golangsdk.RequestOpts{
   113  		MoreHeaders: requestOpts.MoreHeaders,
   114  	})
   115  
   116  	if err == nil {
   117  		var r DedicatedInstanceList
   118  		if err = rst.ExtractInto(&r); err == nil {
   119  			return &r, nil
   120  		}
   121  	}
   122  	return nil, err
   123  }
   124  
   125  // UpdateInstance query a list of waf instance base on UpdateInstanceOpts
   126  func UpdateInstance(c *golangsdk.ServiceClient, id string, opts UpdateInstanceOpts) (*DedicatedInstance, error) {
   127  	return UpdateWithEpsId(c, id, opts, "")
   128  }
   129  
   130  func UpdateWithEpsId(c *golangsdk.ServiceClient, id string, opts UpdateInstanceOpts, epsId string) (
   131  	*DedicatedInstance, error) {
   132  	b, err := golangsdk.BuildRequestBody(opts, "")
   133  	if err != nil {
   134  		return nil, err
   135  	}
   136  
   137  	var rst golangsdk.Result
   138  	_, err = c.Put(resourceURL(c, id)+generateEpsIdQuery(epsId), b, &rst.Body, &golangsdk.RequestOpts{
   139  		OkCodes:     []int{200},
   140  		MoreHeaders: requestOpts.MoreHeaders,
   141  	})
   142  
   143  	if err == nil {
   144  		var r DedicatedInstance
   145  		if err = rst.ExtractInto(&r); err == nil {
   146  			return &r, nil
   147  		}
   148  	}
   149  	return nil, err
   150  
   151  }
   152  
   153  // Delete will permanently delete a engine based on its unique ID.
   154  func Delete(c *golangsdk.ServiceClient, id string) (*DedicatedInstance, error) {
   155  	return DeleteWithEpsId(c, id, "")
   156  }
   157  
   158  func DeleteWithEpsId(c *golangsdk.ServiceClient, id string, epsId string) (*DedicatedInstance, error) {
   159  	var rst golangsdk.Result
   160  	_, err := c.DeleteWithResponse(resourceURL(c, id)+generateEpsIdQuery(epsId), &rst.Body, &golangsdk.RequestOpts{
   161  		OkCodes:     []int{200},
   162  		MoreHeaders: requestOpts.MoreHeaders},
   163  	)
   164  
   165  	if err == nil {
   166  		var r DedicatedInstance
   167  		if err = rst.ExtractInto(&r); err == nil {
   168  			return &r, nil
   169  		}
   170  	}
   171  	return nil, err
   172  }