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 }