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 }