HSingh
HSingh

Reputation: 17

Get author of gcp cloud run jobs

Is there any way to get the author of a gcp cloud run job execution in python?

For example when I run gcloud run jobs executions list, I can see the author that created it (RUN BY column):

   JOB              EXECUTION              REGION    RUNNING  COMPLETE  CREATED                  RUN BY
✔  my-job           my-job-lj2op           us-west1  0        1 / 1     2024-11-09 12:00:00 UTC  [email protected]

If I run the command in debug verbosity, I can see that the api used is GET /apis/run.googleapis.com/v1/namespaces/oxa-dev-loc-data-connector/executions?alt=json&limit=100 HTTP/1.1, however if I use the python sdk run_v2.ListExecutionsRequest call, no author field is present. Is there an alternate way to get it via the python sdk?

Upvotes: 1

Views: 138

Answers (1)

DazWilkin
DazWilkin

Reputation: 40326

An alternative to --verbosity=debug is --log-http which shows the underlying REST calls, requests and responses. You can then find the documentation using Google's APIs Explorer for e.g. Cloud Run.

gcloud run jobs execution list calls run/v1 (!) namespaces.executions.list which returns Response which is a list of Execution and includes various metadata.annotations:

E.g.:

metadata:
  annotations:
    run.googleapis.com/client-name: gcloud
    run.googleapis.com/client-version: 499.0.0
    run.googleapis.com/creator: {USER}
    run.googleapis.com/execution-environment: gen2
    run.googleapis.com/lastModifier: {USER}
    run.googleapis.com/operation-id: 12345678-1234-1234-1234-1234567890ab

I'm unsure whether 'RUN BY' maps to creator or lastModifier but...

gcloud run jobs executions list \
--project=${PROJECT} \
--region=${REGION} \
--format='yaml(metadata.annotations["run.googleapis.com/creator"])'
metadata:
  annotations:
    run.googleapis.com/creator: [email protected]

Or, if you'd prefer a more generic (JSON) solution:

gcloud run jobs executions list \
--project=${PROJECT} \
--region=${REGION} \
--format=json \
| jq -r '.[].metadata.annotations["run.googleapis.com/creator"]'

Curiously, annotations aren't (!) surfaced by the run/v2 which underpins the Python Cloud Client Library for Cloud Run (gcloud uses run/v1) and uses a different variant of Execution (which retains annotations but these are {}) and no other field appears to replicate the creator annotation:

requirements.txt:

google-cloud-run==0.10.10

main.py:

import os

from google.cloud.run import ExecutionsClient
from google.cloud.run_v2 import ListExecutionsRequest,Execution
from google.cloud.run_v2.services.executions.pagers import ListExecutionsPager


project = os.getenv("PROJECT")
location = os.getenv("LOCATION")

client = ExecutionsClient()

request = ListExecutionsRequest(
    parent=f"projects/{project}/locations/{location}/jobs/-"
)
response=client.list_executions(
    request=request
)
for execution in response:
    response: ListExecutionsPager
    execution: Execution
    print(execution.annotations)

You could use the API Client Library for Cloud Run to force run/v1 but I'm unclear as to the deprecation of run/v1!?

requirements.txt:

google-api-python-client==2.151.0

main.py:

import os

from googleapiclient.discovery import build


project = os.getenv("PROJECT")

service = build('run', 'v1')

request = service.namespaces().executions().list(
    parent=f"namespaces/{project}"
)
response = request.execute()
for execution in response["items"]:
    print(execution["metadata"]["annotations"]["run.googleapis.com/creator"])

Upvotes: 2

Related Questions