service-account.jinja (70 lines of code) (raw):

{% set SUFFIX = '-account' %} {% set BASE_NAME = properties['baseName'][:30-SUFFIX|length] + SUFFIX %} resources: - name: {{ BASE_NAME }} type: iam.v1.serviceAccount properties: accountId: {{ BASE_NAME }} displayName: TeamCity service account - name: get-iam-policy-to-set-roles action: gcp-types/cloudresourcemanager-v1:cloudresourcemanager.projects.getIamPolicy metadata: dependsOn: - {{ BASE_NAME }} runtimePolicy: - UPDATE_ALWAYS properties: resource: {{ env['project'] }} - name: set-account-roles action: gcp-types/cloudresourcemanager-v1:cloudresourcemanager.projects.setIamPolicy metadata: runtimePolicy: - CREATE properties: resource: {{ env['project'] }} policy: $(ref.get-iam-policy-to-set-roles) gcpIamPolicyPatch: add: - role: "roles/cloudsql.client" members: - serviceAccount:$(ref.{{ BASE_NAME }}.email) - role: "roles/viewer" members: - serviceAccount:$(ref.{{ BASE_NAME }}.email) - role: "roles/compute.instanceAdmin.v1" members: - serviceAccount:$(ref.{{ BASE_NAME }}.email) - role: "roles/storage.objectAdmin" members: - serviceAccount:$(ref.{{ BASE_NAME }}.email) - role: "roles/iam.serviceAccountTokenCreator" members: - serviceAccount:$(ref.{{ BASE_NAME }}.email) - role: "roles/owner" members: - serviceAccount:$(ref.{{ BASE_NAME }}.email) - name: get-iam-policy-to-delete-role action: gcp-types/cloudresourcemanager-v1:cloudresourcemanager.projects.getIamPolicy metadata: dependsOn: - {{ properties['baseName'] }}-waiter-software runtimePolicy: - UPDATE_ALWAYS properties: resource: {{ env['project'] }} - name: delete-account-role action: gcp-types/cloudresourcemanager-v1:cloudresourcemanager.projects.setIamPolicy metadata: runtimePolicy: - CREATE properties: resource: {{ env['project'] }} policy: $(ref.get-iam-policy-to-delete-role) gcpIamPolicyPatch: remove: - role: "roles/owner" members: - serviceAccount:$(ref.{{ BASE_NAME }}.email) outputs: - name: email value: $(ref.{{ BASE_NAME }}.email)