github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/container/containerv2/ingress.go (about) 1 package containerv2 2 3 import ( 4 "fmt" 5 "strconv" 6 7 "github.com/IBM-Cloud/bluemix-go/client" 8 ) 9 10 // Secret struct holding details for a single secret 11 type Secret struct { 12 Cluster string `json:"cluster" description:"name of secret"` 13 Name string `json:"name" description:"name of secret"` 14 Namespace string `json:"namespace" description:"namespace of secret"` 15 Domain string `json:"domain" description:"domain the cert belongs to"` 16 CRN string `json:"crn" description:"crn of the certificate in certificate manager"` 17 ExpiresOn string `json:"expiresOn" description:"expiration date of the certificate"` 18 Status string `json:"status" description:"status of secret. Will be used for displaying callback operations to user"` 19 UserManaged bool `json:"userManaged" description:"true or false. Used to show which certs and secrets are system generated and which are not"` 20 Persistence bool `json:"persistence" description:"true or false. Persist the secret even if a user attempts to delete it"` 21 Type string `json:"type" description:"supported types include TLS and Opaque"` 22 SecretType string `json:"secretType" description:"secrets manager type for secret"` 23 LastUpdatedTimestamp string `json:"lastUpdatedTimestamp" description:"last updated timestamp for type tls secrets"` 24 Fields Fields `json:"fields" description:"fields in secret"` 25 } 26 27 // Secret struct holding details for a single secret field 28 type Field struct { 29 Name string `json:"name" description:"name of secret field"` 30 CRN string `json:"crn" description:"crn of secret field"` 31 ExpiresOn string `json:"expiresOn" description:"expiration date of the secret"` 32 SecretType string `json:"secretType" description:"secrets manager type for secret"` 33 LastUpdatedTimestamp string `json:"lastUpdatedTimestamp" description:"last updated timestamp for type tls secrets"` 34 } 35 36 // Secrets struct for a secret array 37 type Fields []Field 38 39 // Secrets struct for a secret array 40 type Secrets []Secret 41 42 // SecretCreateConfig the secret create request 43 type SecretCreateConfig struct { 44 Cluster string `json:"cluster" description:"name of secret" binding:"required"` 45 Name string `json:"name" description:"name of secret" binding:"required"` 46 Namespace string `json:"namespace" description:"namespace of secret. Optional, if none specified it will be placed in the ibm-cert-store namespace"` 47 CRN string `json:"crn" description:"crn of the certificate in secret manager"` 48 Persistence bool `json:"persistence" description:"true or false. Persist the secret even if a user attempts to delete it"` 49 Type string `json:"type" description:"TLS or Opaque. Defaults to TLS if none specified."` 50 FieldsToAdd []FieldAdd `json:"add" description:"fields to add to secret of type opaque."` 51 } 52 53 // FieldAdd the secret field add request 54 type FieldAdd struct { 55 Name string `json:"name" description:"name of secret field. Cannot append prefix when setting this."` 56 CRN string `json:"crn" description:"crn of secret field"` 57 AppendPrefix bool `json:"append_prefix" description:"true or false. Append the secret name in secret manager as a prefix to secret type. Cannot set name when appending prefix."` 58 } 59 60 // FieldRemove the secret field remove request 61 type FieldRemove struct { 62 Name string `json:"name" description:"name of secret field"` 63 } 64 65 // SecretDeleteConfig the secret delete request 66 type SecretDeleteConfig struct { 67 Cluster string `json:"cluster" description:"name of secret" binding:"required"` 68 Name string `json:"name" description:"name of secret" binding:"required"` 69 Namespace string `json:"namespace" description:"namespace of secret" binding:"required"` 70 } 71 72 // SecretUpdateConfig secret update request 73 type SecretUpdateConfig struct { 74 Cluster string `json:"cluster" description:"name of secret" binding:"required"` 75 Name string `json:"name" description:"name of secret" binding:"required"` 76 Namespace string `json:"namespace" description:"namespace of secret" binding:"required"` 77 CRN string `json:"crn" description:"crn of the certificate in secret manager"` 78 FieldsToAdd []FieldAdd `json:"add" description:"fields to add to secret"` 79 FieldsToRemove []FieldRemove `json:"remove" description:"fields to remove from secret"` 80 } 81 82 // Instance struct holding details for a single instance 83 type Instance struct { 84 Cluster string `json:"cluster" description:"id of cluster"` 85 Name string `json:"name" description:"name of instance"` 86 CRN string `json:"crn" description:"crn of the instance"` 87 SecretGroupID string `json:"secretGroupID" description:"ID of the secret group where secrets will be stored"` 88 SecretGroupName string `json:"secretGroupName" description:"name of the secret group where secrets will be stored"` 89 CallbackChannel string `json:"callbackChannel" description:"callback channel of the instance"` 90 UserManaged bool `json:"userManaged" description:"true or false. Used to show which certs and secrets are system generated and which are not"` 91 IsDefault bool `json:"isDefault" description:"true or false. Used to show which instance subdomains certificates are uploaded into"` 92 Type string `json:"type" description:"designates instance type as either certificate manager instance or secrets manager instance"` 93 Status string `json:"status" description:"Used to show the status indicating if the instance is registered to the cluster or not"` 94 } 95 96 // Instances struct for a secret array 97 type Instances []Instance 98 99 // InstanceRegisterConfig the instance register request 100 type InstanceRegisterConfig struct { 101 Cluster string `json:"cluster" description:"id of cluster" binding:"required"` 102 CRN string `json:"crn" description:"crn of the instance"` 103 IsDefault bool `json:"isDefault" description:"true or false. Used to show which instance subdomains certificates are uploaded into"` 104 SecretGroupID string `json:"secretGroupID" description:"ID of the secret group where secrets will be stored"` 105 } 106 107 // InstanceDeleteConfig the instance delete request 108 type InstanceDeleteConfig struct { 109 Cluster string `json:"cluster" description:"id of cluster" binding:"required"` 110 Name string `json:"name" description:"name of instance" binding:"required"` 111 } 112 113 // InstanceUpdateConfig instance update request 114 type InstanceUpdateConfig struct { 115 Cluster string `json:"cluster" description:"id of cluster" binding:"required"` 116 Name string `json:"name" description:"name of instance" binding:"required"` 117 IsDefault bool `json:"isDefault" description:"true or false. Used to show which instance subdomains certificates are uploaded into"` 118 SecretGroupID string `json:"secretGroupID" description:"ID of the secret group where secrets will be stored"` 119 } 120 121 type ingress struct { 122 client *client.Client 123 } 124 125 // Ingress interface 126 type Ingress interface { 127 CreateIngressSecret(req SecretCreateConfig) (response Secret, err error) 128 UpdateIngressSecret(req SecretUpdateConfig) (response Secret, err error) 129 AddIngressSecretField(req SecretUpdateConfig) (response Secret, err error) 130 RemoveIngressSecretField(req SecretUpdateConfig) (response Secret, err error) 131 DeleteIngressSecret(req SecretDeleteConfig) (err error) 132 GetIngressSecretList(clusterNameOrID string, showDeleted bool) (response Secrets, err error) 133 GetIngressSecret(clusterNameOrID, secretName, secretNamespace string) (response Secret, err error) 134 RegisterIngressInstance(req InstanceRegisterConfig) (response Instance, err error) 135 UpdateIngressInstance(req InstanceUpdateConfig) (err error) 136 DeleteIngressInstance(req InstanceDeleteConfig) (err error) 137 GetIngressInstance(clusterNameOrID, instanceName string) (response Instance, err error) 138 GetIngressInstanceList(clusterNameOrID string, showDeleted bool) (response Instances, err error) 139 } 140 141 func newIngressAPI(c *client.Client) Ingress { 142 return &ingress{ 143 client: c, 144 } 145 } 146 147 // GetIngressSecretList returns a list of ingress secrets for a given cluster 148 func (r *ingress) GetIngressSecretList(clusterNameOrID string, showDeleted bool) (response Secrets, err error) { 149 deleted := strconv.FormatBool(showDeleted) 150 _, err = r.client.Get(fmt.Sprintf("/ingress/v2/secret/getSecrets?cluster=%s&showDeleted=%s", clusterNameOrID, deleted), &response) 151 return 152 } 153 154 // GetIngressSecret returns a single ingress secret in a given cluster 155 func (r *ingress) GetIngressSecret(clusterNameOrID, secretName, secretNamespace string) (response Secret, err error) { 156 _, err = r.client.Get(fmt.Sprintf("/ingress/v2/secret/getSecret?cluster=%s&name=%s&namespace=%s", clusterNameOrID, secretName, secretNamespace), &response) 157 return 158 } 159 160 // CreateIngressSecret creates an ingress secret with the given name in the given namespace 161 func (r *ingress) CreateIngressSecret(req SecretCreateConfig) (response Secret, err error) { 162 _, err = r.client.Post("/ingress/v2/secret/createSecret", req, &response) 163 return 164 } 165 166 // UpdateIngressSecret updates an existing secret with new cert values 167 func (r *ingress) UpdateIngressSecret(req SecretUpdateConfig) (response Secret, err error) { 168 _, err = r.client.Post("/ingress/v2/secret/updateSecret", req, &response) 169 return 170 } 171 172 // AddIngressSecretField adds secret fields to an existing secret 173 func (r *ingress) AddIngressSecretField(req SecretUpdateConfig) (response Secret, err error) { 174 _, err = r.client.Post("/ingress/v2/secret/addField", req, &response) 175 return 176 } 177 178 // RemoveIngressSecretField removes secret fields from an existing secret 179 func (r *ingress) RemoveIngressSecretField(req SecretUpdateConfig) (response Secret, err error) { 180 _, err = r.client.Post("/ingress/v2/secret/removeField", req, &response) 181 return 182 } 183 184 // DeleteIngressSecret deletes the ingress secret from the cluster 185 func (r *ingress) DeleteIngressSecret(req SecretDeleteConfig) (err error) { 186 _, err = r.client.Post("/ingress/v2/secret/deleteSecret", req, nil) 187 return 188 } 189 190 func (r *ingress) RegisterIngressInstance(req InstanceRegisterConfig) (response Instance, err error) { 191 _, err = r.client.Post("/ingress/v2/secret/registerInstance", req, &response) 192 return 193 } 194 195 func (r *ingress) UpdateIngressInstance(req InstanceUpdateConfig) (err error) { 196 _, err = r.client.Post("/ingress/v2/secret/updateInstance", req, nil) 197 return 198 } 199 200 func (r *ingress) DeleteIngressInstance(req InstanceDeleteConfig) (err error) { 201 _, err = r.client.Post("/ingress/v2/secret/unregisterInstance", req, nil) 202 return 203 } 204 205 func (r *ingress) GetIngressInstance(clusterNameOrID, instanceName string) (response Instance, err error) { 206 _, err = r.client.Get(fmt.Sprintf("/ingress/v2/secret/getInstance?cluster=%s&name=%s", clusterNameOrID, instanceName), &response) 207 return 208 } 209 210 func (r *ingress) GetIngressInstanceList(clusterNameOrID string, showDeleted bool) (response Instances, err error) { 211 deleted := strconv.FormatBool(showDeleted) 212 _, err = r.client.Get(fmt.Sprintf("/ingress/v2/secret/getInstances?cluster=%s&showDeleted=%s", clusterNameOrID, deleted), &response) 213 return 214 }