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  }