github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/container/containerv1/subnets.go (about)

     1  package containerv1
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/IBM-Cloud/bluemix-go/client"
     7  )
     8  
     9  //Subnet ...
    10  type Subnet struct {
    11  	ID          string           `json:"id"`
    12  	Type        string           `json:"type"`
    13  	VlanID      string           `json:"vlan_id"`
    14  	IPAddresses []string         `json:"ip_addresses"`
    15  	Properties  SubnetProperties `json:"properties"`
    16  }
    17  
    18  //SubnetProperties ...
    19  type SubnetProperties struct {
    20  	CIDR              string `json:"cidr"`
    21  	NetworkIdentifier string `json:"network_identifier"`
    22  	Note              string `json:"note"`
    23  	SubnetType        string `json:"subnet_type"`
    24  	DisplayLabel      string `json:"display_label"`
    25  	Gateway           string `json:"gateway"`
    26  }
    27  
    28  type UserSubnet struct {
    29  	CIDR   string `json:"cidr" binding:"required" description:"The CIDR of the subnet that will be bound to the cluster. Eg.format: 12.34.56.78/90"`
    30  	VLANID string `json:"vlan_id" binding:"required" description:"The private VLAN where the CIDR exists'"`
    31  }
    32  
    33  //Subnets interface
    34  type Subnets interface {
    35  	AddSubnet(clusterName string, subnetID string, target ClusterTargetHeader) error
    36  	List(target ClusterTargetHeader, opts ...string) ([]Subnet, error)
    37  	AddClusterUserSubnet(clusterID string, userSubnet UserSubnet, target ClusterTargetHeader) error
    38  	ListClusterUserSubnets(clusterID string, target ClusterTargetHeader) ([]Vlan, error)
    39  	DeleteClusterUserSubnet(clusterID string, subnetID string, vlanID string, target ClusterTargetHeader) error
    40  }
    41  
    42  type subnet struct {
    43  	client *client.Client
    44  }
    45  
    46  func newSubnetAPI(c *client.Client) Subnets {
    47  	return &subnet{
    48  		client: c,
    49  	}
    50  }
    51  
    52  //GetSubnets ...
    53  func (r *subnet) List(target ClusterTargetHeader, opts ...string) ([]Subnet, error) {
    54  	subnets := []Subnet{}
    55  	rawURL := "/v1/subnets"
    56  	if len(opts) > 0 {
    57  		rawURL = fmt.Sprintf("/v1/subnets?location=%s", opts[0])
    58  	}
    59  	_, err := r.client.Get(rawURL, &subnets, target.ToMap())
    60  	if err != nil {
    61  		return nil, err
    62  	}
    63  
    64  	return subnets, err
    65  }
    66  
    67  //AddSubnetToCluster ...
    68  func (r *subnet) AddSubnet(name string, subnetID string, target ClusterTargetHeader) error {
    69  	rawURL := fmt.Sprintf("/v1/clusters/%s/subnets/%s", name, subnetID)
    70  	_, err := r.client.Put(rawURL, nil, nil, target.ToMap())
    71  	return err
    72  }
    73  
    74  //AddClusterUserSubnet ...
    75  func (r *subnet) AddClusterUserSubnet(clusterID string, userSubnet UserSubnet, target ClusterTargetHeader) error {
    76  	rawURL := fmt.Sprintf("/v1/clusters/%s/usersubnets", clusterID)
    77  	_, err := r.client.Post(rawURL, nil, nil, target.ToMap())
    78  	return err
    79  }
    80  
    81  //DeleteClusterUserSubnet ...
    82  func (r *subnet) DeleteClusterUserSubnet(clusterID string, subnetID string, vlanID string, target ClusterTargetHeader) error {
    83  	rawURL := fmt.Sprintf("/v1/clusters/%s/usersubnets/%s/vlans/%s", clusterID, subnetID, vlanID)
    84  	_, err := r.client.Delete(rawURL, target.ToMap())
    85  	return err
    86  }
    87  
    88  //GetClusterUserSubnet ...
    89  func (r *subnet) ListClusterUserSubnets(clusterID string, target ClusterTargetHeader) ([]Vlan, error) {
    90  	vlans := []Vlan{}
    91  	rawURL := fmt.Sprintf("/v1/clusters/%s/usersubnets", clusterID)
    92  	_, err := r.client.Get(rawURL, &vlans, target.ToMap())
    93  	if err != nil {
    94  		return nil, err
    95  	}
    96  
    97  	return vlans, err
    98  }