github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/publicips.go (about)

     1  package oneandone
     2  
     3  import "net/http"
     4  
     5  type PublicIp struct {
     6  	idField
     7  	typeField
     8  	IpAddress    string      `json:"ip,omitempty"`
     9  	AssignedTo   *assignedTo `json:"assigned_to,omitempty"`
    10  	ReverseDns   string      `json:"reverse_dns,omitempty"`
    11  	IsDhcp       *bool       `json:"is_dhcp,omitempty"`
    12  	State        string      `json:"state,omitempty"`
    13  	SiteId       string      `json:"site_id,omitempty"`
    14  	CreationDate string      `json:"creation_date,omitempty"`
    15  	Datacenter   *Datacenter `json:"datacenter,omitempty"`
    16  	ApiPtr
    17  }
    18  
    19  type assignedTo struct {
    20  	Identity
    21  	typeField
    22  }
    23  
    24  const (
    25  	IpTypeV4 = "IPV4"
    26  	IpTypeV6 = "IPV6"
    27  )
    28  
    29  // GET /public_ips
    30  func (api *API) ListPublicIps(args ...interface{}) ([]PublicIp, error) {
    31  	url, err := processQueryParams(createUrl(api, publicIpPathSegment), args...)
    32  	if err != nil {
    33  		return nil, err
    34  	}
    35  	result := []PublicIp{}
    36  	err = api.Client.Get(url, &result, http.StatusOK)
    37  	if err != nil {
    38  		return nil, err
    39  	}
    40  	for index, _ := range result {
    41  		result[index].api = api
    42  	}
    43  	return result, nil
    44  }
    45  
    46  // POST /public_ips
    47  func (api *API) CreatePublicIp(ip_type string, reverse_dns string, datacenter_id string) (string, *PublicIp, error) {
    48  	res := new(PublicIp)
    49  	url := createUrl(api, publicIpPathSegment)
    50  	req := struct {
    51  		DatacenterId string `json:"datacenter_id,omitempty"`
    52  		ReverseDns   string `json:"reverse_dns,omitempty"`
    53  		Type         string `json:"type,omitempty"`
    54  	}{DatacenterId: datacenter_id, ReverseDns: reverse_dns, Type: ip_type}
    55  	err := api.Client.Post(url, &req, &res, http.StatusCreated)
    56  	if err != nil {
    57  		return "", nil, err
    58  	}
    59  	res.api = api
    60  	return res.Id, res, nil
    61  }
    62  
    63  // GET /public_ips/{id}
    64  func (api *API) GetPublicIp(ip_id string) (*PublicIp, error) {
    65  	result := new(PublicIp)
    66  	url := createUrl(api, publicIpPathSegment, ip_id)
    67  	err := api.Client.Get(url, &result, http.StatusOK)
    68  	if err != nil {
    69  		return nil, err
    70  	}
    71  	result.api = api
    72  	return result, nil
    73  }
    74  
    75  // DELETE /public_ips/{id}
    76  func (api *API) DeletePublicIp(ip_id string) (*PublicIp, error) {
    77  	result := new(PublicIp)
    78  	url := createUrl(api, publicIpPathSegment, ip_id)
    79  	err := api.Client.Delete(url, nil, &result, http.StatusOK)
    80  	if err != nil {
    81  		return nil, err
    82  	}
    83  	result.api = api
    84  	return result, nil
    85  }
    86  
    87  // PUT /public_ips/{id}
    88  func (api *API) UpdatePublicIp(ip_id string, reverse_dns string) (*PublicIp, error) {
    89  	result := new(PublicIp)
    90  	url := createUrl(api, publicIpPathSegment, ip_id)
    91  	req := struct {
    92  		ReverseDns string `json:"reverse_dns,omitempty"`
    93  	}{reverse_dns}
    94  	err := api.Client.Put(url, &req, &result, http.StatusOK)
    95  	if err != nil {
    96  		return nil, err
    97  	}
    98  	result.api = api
    99  	return result, nil
   100  }
   101  
   102  func (ip *PublicIp) GetState() (string, error) {
   103  	in, err := ip.api.GetPublicIp(ip.Id)
   104  	if in == nil {
   105  		return "", err
   106  	}
   107  	return in.State, err
   108  }