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

     1  package containerv1
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/IBM-Cloud/bluemix-go/client"
     7  )
     8  
     9  // ALBConfig config for alb configuration
    10  type ALBConfig struct {
    11  	ALBID             string `json:"albID" description:"The ALB id"`
    12  	ClusterID         string `json:"clusterID"`
    13  	Name              string `json:"name"`
    14  	ALBType           string `json:"albType"`
    15  	Enable            bool   `json:"enable" description:"Enable (true) or disable(false) ALB"`
    16  	State             string `json:"state"`
    17  	CreatedDate       string `json:"createdDate"`
    18  	NumOfInstances    string `json:"numOfInstances" description:"Desired number of ALB replicas"`
    19  	Resize            bool   `json:"resize" description:"Indicate whether resizing should be done"`
    20  	ALBIP             string `json:"albip" description:"BYOIP VIP to use for ALB. Currently supported only for private ALB"`
    21  	Zone              string `json:"zone" description:"Zone to use for adding ALB. This is indicative of the AZ in which ALB will be deployed"`
    22  	DisableDeployment bool   `json:"disableDeployment" description:"Indicate whether to disable deployment only on disable alb"`
    23  	VlanID            string `json:"vlanID" description:"The VLAN ID. This VLAN must match the ALB 'type' and must be in the same 'zone' as the ALB"`
    24  	ALBBuild          string `json:"albBuild" description:"The ALB image version"`
    25  	Status            string `json:"status" description:"Current status of the ALB"`
    26  }
    27  
    28  // AlbCreateResp used to send back the albid on a create request
    29  type AlbCreateResp struct {
    30  	Alb     string `json:"alb"`
    31  	Cluster string `json:"cluster"`
    32  }
    33  
    34  // ALBSecretConfig config for alb-secret configuration
    35  type ALBSecretConfig struct {
    36  	SecretName          string `json:"secretName" description:"Name of the ALB secret"`
    37  	ClusterID           string `json:"clusterID"`
    38  	DomainName          string `json:"domainName" description:"Domain name of the certficate"`
    39  	CloudCertInstanceID string `json:"cloudCertInstanceID" description:"Cloud Cert instance ID from which certficate is downloaded"`
    40  	ClusterCrn          string `json:"clusterCrn"`
    41  	CertCrn             string `json:"certCrn" description:"Unique CRN of the certficate which can be located in cloud cert instance"`
    42  	IssuerName          string `json:"issuerName" description:"Issuer name of the certficate"`
    43  	ExpiresOn           string `json:"expiresOn" description:"Expiry date of the certficate"`
    44  	State               string `json:"state" description:"State of ALB secret"`
    45  }
    46  
    47  // ALBSecretsPerCRN ...
    48  type ALBSecretsPerCRN struct {
    49  	ALBSecrets []string `json:"albsecrets" description:"ALB secrets correponding to a CRN"`
    50  }
    51  
    52  // ALBUpdatePolicy represents the body for interacting with the update ALB APIs.
    53  type ALBUpdatePolicy struct {
    54  	AutoUpdate    bool `json:"autoUpdate" binding:"required"`
    55  	LatestVersion bool `json:"latestVersion"`
    56  }
    57  
    58  type ClusterALB struct {
    59  	ID                string      `json:"id"`
    60  	Region            string      `json:"region"`
    61  	DataCenter        string      `json:"dataCenter"`
    62  	IsPaid            bool        `json:"isPaid"`
    63  	IngressHostname   string      `json:"ingressHostname"`
    64  	IngressSecretName string      `json:"ingressSecretName"`
    65  	ALBs              []ALBConfig `json:"alb"`
    66  }
    67  
    68  // ClusterALBSecret albsecret related information for cluster
    69  type ClusterALBSecret struct {
    70  	ID         string            `json:"id"`
    71  	Region     string            `json:"region"`
    72  	DataCenter string            `json:"dataCenter"`
    73  	IsPaid     bool              `json:"isPaid"`
    74  	ALBSecrets []ALBSecretConfig `json:"albSecrets" description:"All the ALB secrets created in this cluster"`
    75  }
    76  
    77  // CreateALB struct representation of ALB arriving in create requests
    78  type CreateALB struct {
    79  	Zone            string `json:"zone"`
    80  	VlanID          string `json:"vlanID"`
    81  	Type            string `json:"type"`
    82  	EnableByDefault bool   `json:"enableByDefault"`
    83  	IP              string `json:"ip"`
    84  	NLBVersion      string `json:"nlbVersion"`
    85  	IngressImage    string `json:"ingressImage,omitempty"`
    86  }
    87  
    88  // Clusters interface
    89  type Albs interface {
    90  	ChangeALBUpdatePolicy(clusterID string, config ALBUpdatePolicy, target ClusterTargetHeader) error
    91  	ConfigureALB(albID string, config ALBConfig, disableDeployment bool, target ClusterTargetHeader) error
    92  	CreateALB(alb CreateALB, clusterID string, target ClusterTargetHeader) (AlbCreateResp, error)
    93  	DeployALBCert(config ALBSecretConfig, target ClusterTargetHeader) error
    94  	DisableALB(albID string, target ClusterTargetHeader) error
    95  	EnableALB(albID string, config ALBConfig, target ClusterTargetHeader) error
    96  	GetALB(albID string, target ClusterTargetHeader) (ALBConfig, error)
    97  	GetALBTypes(target ClusterTargetHeader) ([]string, error)
    98  	GetALBUpdatePolicy(clusterID string, target ClusterTargetHeader) (ALBUpdatePolicy, error)
    99  	GetClusterALBCertByCertCRN(clusterID string, certCRN string, target ClusterTargetHeader) (ALBSecretConfig, error)
   100  	GetClusterALBCertBySecretName(clusterID string, secretName string, target ClusterTargetHeader) (ALBSecretConfig, error)
   101  	ListALBCerts(clusterID string, target ClusterTargetHeader) ([]ALBSecretConfig, error)
   102  	ListClusterALBs(clusterNameOrID string, target ClusterTargetHeader) ([]ALBConfig, error)
   103  	RemoveALB(albID string, target ClusterTargetHeader) error
   104  	RemoveALBCertByCertCRN(clusterID string, certCRN string, target ClusterTargetHeader) error
   105  	RemoveALBCertBySecretName(clusterID string, secretName string, target ClusterTargetHeader) error
   106  	UpdateALBCert(config ALBSecretConfig, target ClusterTargetHeader) error
   107  	UpdateALBs(clusterID string, target ClusterTargetHeader) error
   108  }
   109  
   110  type alb struct {
   111  	client *client.Client
   112  }
   113  
   114  func newAlbAPI(c *client.Client) Albs {
   115  	return &alb{
   116  		client: c,
   117  	}
   118  }
   119  
   120  // CreateALB creates a new ALB in the target cluster
   121  func (r *alb) CreateALB(alb CreateALB, clusterID string, target ClusterTargetHeader) (AlbCreateResp, error) {
   122  	var successV AlbCreateResp
   123  	rawURL := fmt.Sprintf("/v1/alb/clusters/%s/zone/%s", clusterID, alb.Zone)
   124  	_, err := r.client.Post(rawURL, alb, &successV, target.ToMap())
   125  	return successV, err
   126  }
   127  
   128  // ListClusterALBs returns the list of albs available for cluster
   129  func (r *alb) ListClusterALBs(clusterNameOrID string, target ClusterTargetHeader) ([]ALBConfig, error) {
   130  	var successV ClusterALB
   131  	rawURL := fmt.Sprintf("/v1/alb/clusters/%s", clusterNameOrID)
   132  	_, err := r.client.Get(rawURL, &successV, target.ToMap())
   133  	return successV.ALBs, err
   134  }
   135  
   136  // GetALB returns details about particular alb
   137  func (r *alb) GetALB(albID string, target ClusterTargetHeader) (ALBConfig, error) {
   138  	var successV ALBConfig
   139  	_, err := r.client.Get(fmt.Sprintf("/v1/alb/albs/%s", albID), &successV, target.ToMap())
   140  	return successV, err
   141  }
   142  
   143  // EnableALB enables alb for a cluster
   144  func (r *alb) EnableALB(albID string, config ALBConfig, target ClusterTargetHeader) error {
   145  	var successV interface{}
   146  	_, err := r.client.Post("/v1/alb/albs", config, &successV, target.ToMap())
   147  	return err
   148  }
   149  
   150  // DisableALB disables the alb for a cluster
   151  func (r *alb) DisableALB(albID string, target ClusterTargetHeader) error {
   152  	_, err := r.client.Delete(fmt.Sprintf("/v1/alb/albs/%s", albID), target.ToMap())
   153  	return err
   154  }
   155  
   156  // ConfigureALB enables or disables alb for cluster
   157  //
   158  // Deprecated: Unsupported API endpoint, use EnableALB and DisableALB instead.
   159  func (r *alb) ConfigureALB(albID string, config ALBConfig, disableDeployment bool, target ClusterTargetHeader) error {
   160  	if config.Enable {
   161  		_, err := r.client.Post("/v1/alb/albs", config, nil, target.ToMap())
   162  		return err
   163  	}
   164  	_, err := r.client.Delete(fmt.Sprintf("/v1/alb/albs/%s?disableDeployment=%t", albID, disableDeployment), target.ToMap())
   165  	return err
   166  }
   167  
   168  // RemoveALB removes the alb
   169  //
   170  // Deprecated: Unsupported API endpoint, use DisableALB instead.
   171  func (r *alb) RemoveALB(albID string, target ClusterTargetHeader) error {
   172  	_, err := r.client.Delete(fmt.Sprintf("/v1/alb/albs/%s", albID), target.ToMap())
   173  	return err
   174  }
   175  
   176  // DeployALBCert deploys alb-cert
   177  //
   178  // Deprecated: Unsupported API endpoint, use CreateIngressSecret instead.
   179  func (r *alb) DeployALBCert(config ALBSecretConfig, target ClusterTargetHeader) error {
   180  	_, err := r.client.Post("/v1/alb/albsecrets", config, nil, target.ToMap())
   181  	return err
   182  }
   183  
   184  // UpdateALBCert updates alb-cert
   185  //
   186  // Deprecated: Unsupported API endpoint, use UpdateIngressSecret instead.
   187  func (r *alb) UpdateALBCert(config ALBSecretConfig, target ClusterTargetHeader) error {
   188  	_, err := r.client.Put("/v1/alb/albsecrets", config, nil, target.ToMap())
   189  	return err
   190  }
   191  
   192  // RemoveALBCertBySecretName removes the alb-cert
   193  //
   194  // Deprecated: Unsupported API endpoint, use DeleteIngressSecret instead.
   195  func (r *alb) RemoveALBCertBySecretName(clusterID string, secretName string, target ClusterTargetHeader) error {
   196  	_, err := r.client.Delete(fmt.Sprintf("/v1/alb/clusters/%s/albsecrets?albSecretName=%s", clusterID, secretName), target.ToMap())
   197  	return err
   198  }
   199  
   200  // RemoveALBCertByCertCRN removes the alb-cert
   201  //
   202  // Deprecated: Unsupported API endpoint.
   203  func (r *alb) RemoveALBCertByCertCRN(clusterID string, certCRN string, target ClusterTargetHeader) error {
   204  	_, err := r.client.Delete(fmt.Sprintf("/v1/alb/clusters/%s/albsecrets?certCrn=%s", clusterID, certCRN), target.ToMap())
   205  	return err
   206  }
   207  
   208  // GetClusterALBCertBySecretName returns details about specified alb cert for given secretName
   209  //
   210  // Deprecated: Unsupported API endpoint.
   211  func (r *alb) GetClusterALBCertBySecretName(clusterID string, secretName string, target ClusterTargetHeader) (ALBSecretConfig, error) {
   212  	var successV ALBSecretConfig
   213  	_, err := r.client.Get(fmt.Sprintf("/v1/alb/clusters/%s/albsecrets?albSecretName=%s", clusterID, secretName), &successV, target.ToMap())
   214  	return successV, err
   215  }
   216  
   217  // GetClusterALBCertByCertCrn returns details about specified alb cert for given certCRN
   218  //
   219  // Deprecated: Unsupported API endpoint, use GetIngressSecret instead.
   220  func (r *alb) GetClusterALBCertByCertCRN(clusterID string, certCRN string, target ClusterTargetHeader) (ALBSecretConfig, error) {
   221  	var successV ALBSecretConfig
   222  	_, err := r.client.Get(fmt.Sprintf("/v1/alb/clusters/%s/albsecrets?certCrn=%s", clusterID, certCRN), &successV, target.ToMap())
   223  	return successV, err
   224  }
   225  
   226  // ListALBCerts for cluster
   227  //
   228  // Deprecated: Unsupported API endpoint, use GetIngressSecretList instead.
   229  func (r *alb) ListALBCerts(clusterID string, target ClusterTargetHeader) ([]ALBSecretConfig, error) {
   230  	var successV ClusterALBSecret
   231  	_, err := r.client.Get(fmt.Sprintf("/v1/alb/clusters/%s/albsecrets", clusterID), &successV, target.ToMap())
   232  	return successV.ALBSecrets, err
   233  }
   234  
   235  // GetALBTypes returns list of available alb types
   236  //
   237  // Deprecated: Unsupported API endpoint.
   238  func (r *alb) GetALBTypes(target ClusterTargetHeader) ([]string, error) {
   239  	var successV []string
   240  	_, err := r.client.Get("/v1/alb/albtypes", &successV, target.ToMap())
   241  	return successV, err
   242  }
   243  
   244  // GetALBUpdatePolicy returns the ALB update policy for cluster
   245  func (r *alb) GetALBUpdatePolicy(clusterID string, target ClusterTargetHeader) (ALBUpdatePolicy, error) {
   246  	var successV ALBUpdatePolicy
   247  	_, err := r.client.Get(fmt.Sprintf("/v1/alb/clusters/%s/updatepolicy", clusterID), &successV, target.ToMap())
   248  	return successV, err
   249  }
   250  
   251  // ChangeALBUpdatePolicy changes the ALB update policy for cluster
   252  func (r *alb) ChangeALBUpdatePolicy(clusterID string, config ALBUpdatePolicy, target ClusterTargetHeader) error {
   253  	_, err := r.client.Put(fmt.Sprintf("/v1/alb/clusters/%s/updatepolicy", clusterID), config, nil, target.ToMap())
   254  	return err
   255  }
   256  
   257  // UpdateALBs forces a one-time update of all ALB to the latest build
   258  func (r *alb) UpdateALBs(clusterID string, target ClusterTargetHeader) error {
   259  	_, err := r.client.Put(fmt.Sprintf("/v1/alb/clusters/%s/update", clusterID), nil, nil, target.ToMap())
   260  	return err
   261  }