google/resource-snippets/iam-v1/iam-v1-header-provider.yaml (112 lines of code) (raw):

# Copyright 2018 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. resources: - name: iam-v1 type: deploymentmanager.local.typeProvider properties: descriptorUrl: https://iam.googleapis.com/$discovery/rest?version=v1 options: inputMappings: - fieldName: Authorization location: HEADER value: > $.concat("Bearer ", $.googleOauth2AccessToken()) collectionOverrides: - collection: projects.serviceAccounts options: virtualProperties: | schema: http://json-schema.org/draft-04/schema# type: object properties: displayName: type : string accountId: type : string required: - displayName - accountId inputMappings: # name parameter during create is different during update. - fieldName: name location: PATH methodMatch: ^create$ value: concat("projects/", $.project) # accountId only applies for create - fieldName: accountId location: BODY methodMatch: ^create$ value: $.resource.properties.accountId # displayName comes in different location for update/create - fieldName: serviceAccount.displayName location: BODY methodMatch: ^create$ value: $.resource.properties.displayName - fieldName: displayName location: BODY methodMatch: ^update$ value: $.resource.properties.displayName - fieldName: name location: PATH methodMatch: ^(get|update|delete)$ value: $.resource.self.name # self is the resource after a get, this mapping will automatically # get the serviceAccount etag property and inject it on update # so user does not need to write etag in the template. - fieldName: etag location: BODY methodMatch: ^update$ value: $.resource.self.etag - fieldName: resource methodMatch: ^setIamPolicy$ location: PATH value: $.resource.self.name - collection: projects.serviceAccounts.keys options: virtualProperties: | schema: http://json-schema.org/draft-04/schema# type: object properties: parent: type : string required: - parent inputMappings: - fieldName: name location: PATH methodMatch: ^create$ value: $.resource.properties.parent - fieldName: name methodMatch: ^(get|update|delete)$ location: PATH value: $.resource.self.name - collection: projects.roles options: &ROLE_OPTIONS virtualProperties: | schema: http://json-schema.org/draft-04/schema# type: object properties: parent: type : string required: - parent inputMappings: - fieldName: parent location: PATH methodMatch: ^create$ value: $.resource.properties.parent - fieldName: updateMask location: QUERY methodMatch: ^patch$ value: $.joinKeys($.resource.properties.role, $.resource.self) - fieldName: name methodMatch: ^(get|update|delete|patch)$ location: PATH value: &ROLE_NAME $.concat($.resource.properties.parent, "/roles/", $.resource.properties.roleId) - fieldName: name methodMatch: ^patch$ location: BODY value: *ROLE_NAME - fieldName: etag location: BODY methodMatch: ^(patch|update)$ value: $.resource.self.etag methodMappings: - pathSelector: fieldName: role behavior: field: set: patch - collection: organizations.roles options: *ROLE_OPTIONS