github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/api/cloudcontroller/ccv3/metadata.go (about)

     1  package ccv3
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"fmt"
     7  
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/internal"
    10  	"code.cloudfoundry.org/cli/types"
    11  )
    12  
    13  // Metadata is used for custom tagging of API resources
    14  type Metadata struct {
    15  	Labels map[string]types.NullString `json:"labels,omitempty"`
    16  }
    17  
    18  type ResourceMetadata struct {
    19  	Metadata *Metadata `json:"metadata,omitempty"`
    20  }
    21  
    22  func (client *Client) UpdateResourceMetadata(resource string, resourceGUID string, metadata Metadata) (ResourceMetadata, Warnings, error) {
    23  	metadataBytes, err := json.Marshal(ResourceMetadata{Metadata: &metadata})
    24  	if err != nil {
    25  		return ResourceMetadata{}, nil, err
    26  	}
    27  
    28  	var request *cloudcontroller.Request
    29  
    30  	switch resource {
    31  	case "app":
    32  		request, err = client.newHTTPRequest(requestOptions{
    33  			RequestName: internal.PatchApplicationRequest,
    34  			Body:        bytes.NewReader(metadataBytes),
    35  			URIParams:   map[string]string{"app_guid": resourceGUID},
    36  		})
    37  	case "buildpack":
    38  		request, err = client.newHTTPRequest(requestOptions{
    39  			RequestName: internal.PatchBuildpackRequest,
    40  			Body:        bytes.NewReader(metadataBytes),
    41  			URIParams:   map[string]string{"buildpack_guid": resourceGUID},
    42  		})
    43  	case "domain":
    44  		request, err = client.newHTTPRequest(requestOptions{
    45  			RequestName: internal.PatchDomainRequest,
    46  			Body:        bytes.NewReader(metadataBytes),
    47  			URIParams:   map[string]string{"domain_guid": resourceGUID},
    48  		})
    49  	case "org":
    50  		request, err = client.newHTTPRequest(requestOptions{
    51  			RequestName: internal.PatchOrganizationRequest,
    52  			Body:        bytes.NewReader(metadataBytes),
    53  			URIParams:   map[string]string{"organization_guid": resourceGUID},
    54  		})
    55  	case "route":
    56  		request, err = client.newHTTPRequest(requestOptions{
    57  			RequestName: internal.PatchRouteRequest,
    58  			Body:        bytes.NewReader(metadataBytes),
    59  			URIParams:   map[string]string{"route_guid": resourceGUID},
    60  		})
    61  	case "space":
    62  		request, err = client.newHTTPRequest(requestOptions{
    63  			RequestName: internal.PatchSpaceRequest,
    64  			Body:        bytes.NewReader(metadataBytes),
    65  			URIParams:   map[string]string{"space_guid": resourceGUID},
    66  		})
    67  	case "stack":
    68  		request, err = client.newHTTPRequest(requestOptions{
    69  			RequestName: internal.PatchStackRequest,
    70  			Body:        bytes.NewReader(metadataBytes),
    71  			URIParams:   map[string]string{"stack_guid": resourceGUID},
    72  		})
    73  	default:
    74  		return ResourceMetadata{}, nil, fmt.Errorf("unknown resource type (%s) requested", resource)
    75  	}
    76  
    77  	if err != nil {
    78  		return ResourceMetadata{}, nil, err
    79  	}
    80  
    81  	var responseMetadata ResourceMetadata
    82  	response := cloudcontroller.Response{
    83  		DecodeJSONResponseInto: &responseMetadata,
    84  	}
    85  	err = client.connection.Make(request, &response)
    86  	return responseMetadata, response.Warnings, err
    87  }
    88  
    89  func (client *Client) UpdateResourceMetadataAsync(resource string, resourceGUID string, metadata Metadata) (JobURL, Warnings, error) {
    90  	metadataBytes, err := json.Marshal(ResourceMetadata{Metadata: &metadata})
    91  	if err != nil {
    92  		return "", nil, err
    93  	}
    94  
    95  	var request *cloudcontroller.Request
    96  
    97  	switch resource {
    98  	case "service-broker":
    99  		request, err = client.newHTTPRequest(requestOptions{
   100  			RequestName: internal.PatchServiceBrokerRequest,
   101  			Body:        bytes.NewReader(metadataBytes),
   102  			URIParams:   map[string]string{"service_broker_guid": resourceGUID},
   103  		})
   104  	default:
   105  		return "", nil, fmt.Errorf("unknown async resource type (%s) requested", resource)
   106  	}
   107  
   108  	if err != nil {
   109  		return "", nil, err
   110  	}
   111  
   112  	response := cloudcontroller.Response{}
   113  	err = client.connection.Make(request, &response)
   114  	return JobURL(response.ResourceLocationURL), response.Warnings, err
   115  }