Skip to content

Fix location on cloud build operators - #29937

Merged
potiuk merged 21 commits into
apache:mainfrom
tnk-ysk:fix-location-on-cloud-build
Mar 10, 2023
Merged

potiuk merged 21 commits into
apache:mainfrom
tnk-ysk:fix-location-on-cloud-build

Conversation

@tnk-ysk

@tnk-ysk tnk-ysk commented Mar 6, 2023

Copy link
Copy Markdown
Contributor

Fixed an issue where cloud build operators did not work for private pools or a non-global default pools.
In this case the CloudBuildClient must set the location with api_endpoint.

Document

    # If you're using Private Pools or a non-global default pool, add a regional
    # `api_endpoint` to `CloudBuildClient()`
    # For example, '<YOUR_POOL_REGION>-cloudbuild.googleapis.com'
    #
    # from google.api_core import client_options
    # client_options = client_options.ClientOptions(
    #     api_endpoint="us-central1-cloudbuild.googleapis.com"
    # )
    # client = cloudbuild_v1.services.cloud_build.CloudBuildClient(client_options=client_options)

Related #29689

Target operators

  • CloudBuildCancelBuildOperator
  • CloudBuildGetBuildOperator
  • CloudBuildListBuildsOperator
  • CloudBuildRetryBuildOperator
  • CloudBuildListBuildTriggersOperator
  • CloudBuildCreateBuildOperator
  • CloudBuildCreateBuildTriggerOperator
  • CloudBuildDeleteBuildTriggerOperator
  • CloudBuildGetBuildTriggerOperator
  • CloudBuildRunBuildTriggerOperator
  • CloudBuildUpdateBuildTriggerOperator
  • CloudBuildDeleteBuildTriggerOperator

Reference

@boring-cyborg boring-cyborg Bot added area:providers provider:google Google (including GCP) related issues labels Mar 6, 2023
@tnk-ysk tnk-ysk changed the title Fixed location on cloud build operators Fix location on cloud build operators Mar 6, 2023
@potiuk

potiuk commented Mar 7, 2023

Copy link
Copy Markdown
Member

LGTM. @VladaZakharova - WDYT?

@potiuk

potiuk commented Mar 7, 2023

Copy link
Copy Markdown
Member

tests needs fixing though

@tnk-ysk
tnk-ysk force-pushed the fix-location-on-cloud-build branch from b3758ab to 23cd526 Compare March 8, 2023 01:47
@tnk-ysk

tnk-ysk commented Mar 8, 2023

Copy link
Copy Markdown
Contributor Author

@potiuk

tests needs fixing though

I fixed it.
23cd526

@VladaZakharova

Copy link
Copy Markdown
Contributor

Hi!
Did you check if, for example, BigQuery service is working okay with this changes without providing location to the operator?

@tnk-ysk

tnk-ysk commented Mar 8, 2023

Copy link
Copy Markdown
Contributor Author

@VladaZakharova
I checked and fixed some issues.

  1. Fixed some bugs.
  2. Other CloudBuildTriggerOperator had a same issue, fixed.
  3. Fixed CloudBuild links.

Test dag

from __future__ import print_function

import datetime
import os

from airflow import models
from airflow.providers.google.cloud.operators import cloud_build
from airflow.providers.google.cloud.utils import credentials_provider

PROJECT_ID = "xxxxxxx"
REPO_NAME = "sample"

gcp_conn = credentials_provider.build_gcp_conn(
    "/files/key.json",
    ["https://www.googleapis.com/auth/cloud-platform"],
    PROJECT_ID,
)
os.environ["AIRFLOW_CONN_GOOGLE_CLOUD_DEFAULT"] = gcp_conn

default_dag_args = {
    'start_date': datetime.datetime(2022, 9, 28),
}

with models.DAG(
    'CloudBuildTest',
    schedule_interval=None,
    default_args=default_dag_args,
    catchup=False
) as dag:
    build = {
        "steps": [{
            "name": "alpine",
            "script": "sleep 10 && echo hello",
        }],
    }
    trigger = {
        "name": "trigger",
        "trigger_template": {
            "repo_name": REPO_NAME,
            "branch_name": "main",
        },
        "filename": "cloudbuild.yaml",
    }

    # global
    create_build_global = cloud_build.CloudBuildCreateBuildOperator(
        task_id="create_build_global",
        project_id=PROJECT_ID,
        build=build,
    )
    create_build_global_deferrable = cloud_build.CloudBuildCreateBuildOperator(
        task_id="create_build_global_deferrable",
        project_id=PROJECT_ID,
        build=build,
        deferrable=True,
    )
    list_build_global = cloud_build.CloudBuildListBuildsOperator(
        task_id="list_build_global",
        project_id=PROJECT_ID,
        page_size=1,
    )
    retry_build_global = cloud_build.CloudBuildRetryBuildOperator(
        task_id="retry_build_global",
        project_id=PROJECT_ID,
        id_='{{ ti.xcom_pull(task_ids="create_build_global", key="id") }}',
    )
    get_build_global = cloud_build.CloudBuildGetBuildOperator(
        task_id="get_build_global",
        project_id=PROJECT_ID,
        id_='{{ ti.xcom_pull(task_ids="retry_build_global", key="id") }}',
    )
    list_build_triggers_global = cloud_build.CloudBuildListBuildTriggersOperator(
        task_id="list_build_triggers_global",
        project_id=PROJECT_ID,
    )
    create_build_global_for_cancel = cloud_build.CloudBuildCreateBuildOperator(
        task_id="create_build_global_for_cancel",
        project_id=PROJECT_ID,
        build=build,
        wait=False,
    )
    cancel_build_global = cloud_build.CloudBuildCancelBuildOperator(
        task_id="cancel_build_global",
        project_id=PROJECT_ID,
        id_='{{ ti.xcom_pull(task_ids="create_build_global_for_cancel", key="id") }}',
    )
    create_build_trigger_global = cloud_build.CloudBuildCreateBuildTriggerOperator(
        task_id="create_build_trigger_global",
        project_id=PROJECT_ID,
        trigger=trigger,
    )
    get_build_trigger_global = cloud_build.CloudBuildGetBuildTriggerOperator(
        task_id="get_build_trigger_global",
        project_id=PROJECT_ID,
        trigger_id='{{ ti.xcom_pull(task_ids="create_build_trigger_global", key="id") }}',
    )
    update_build_trigger_global = cloud_build.CloudBuildUpdateBuildTriggerOperator(
        task_id="update_build_trigger_global",
        project_id=PROJECT_ID,
        trigger_id='{{ ti.xcom_pull(task_ids="create_build_trigger_global", key="id") }}',
        trigger=trigger,
    )
    run_build_trigger_global = cloud_build.CloudBuildRunBuildTriggerOperator(
        task_id="run_build_trigger_global",
        project_id=PROJECT_ID,
        trigger_id='{{ ti.xcom_pull(task_ids="create_build_trigger_global", key="id") }}',
        source={
            "branch_name": "main"
        }
    )
    delete_build_trigger_global = cloud_build.CloudBuildDeleteBuildTriggerOperator(
        task_id="delete_build_trigger_global",
        project_id=PROJECT_ID,
        trigger_id='{{ ti.xcom_pull(task_ids="create_build_trigger_global", key="id") }}',
    )

    # us-centrarl
    create_build_us_central1 = cloud_build.CloudBuildCreateBuildOperator(
        task_id="create_build_us_central1",
        project_id=PROJECT_ID,
        build=build,
        location="us-central1",
    )
    create_build_us_central1_deferrable = cloud_build.CloudBuildCreateBuildOperator(
        task_id="create_build_us_central1_deferrable",
        project_id=PROJECT_ID,
        build=build,
        deferrable=True,
        location="us-central1",
    )
    list_build_us_central1 = cloud_build.CloudBuildListBuildsOperator(
        task_id="list_build_us_central1",
        project_id=PROJECT_ID,
        page_size=1,
        location="us-central1",
    )
    retry_build_us_central1 = cloud_build.CloudBuildRetryBuildOperator(
        task_id="retry_build_us_central1",
        project_id=PROJECT_ID,
        id_='{{ ti.xcom_pull(task_ids="create_build_us_central1", key="id") }}',
        location="us-central1",
    )
    get_build_us_central1 = cloud_build.CloudBuildGetBuildOperator(
        task_id="get_build_us_central1",
        project_id=PROJECT_ID,
        id_='{{ ti.xcom_pull(task_ids="retry_build_us_central1", key="id") }}',
        location="us-central1",
    )
    list_build_triggers_us_central1 = cloud_build.CloudBuildListBuildTriggersOperator(
        task_id="list_build_triggers_us_central1",
        project_id=PROJECT_ID,
        location="us-central1",
    )
    create_build_us_central1_for_cancel = cloud_build.CloudBuildCreateBuildOperator(
        task_id="create_build_us_central1_for_cancel",
        project_id=PROJECT_ID,
        build=build,
        wait=False,
        location="us-central1",
    )
    cancel_build_us_central1 = cloud_build.CloudBuildCancelBuildOperator(
        task_id="cancel_build_us_central1",
        project_id=PROJECT_ID,
        id_='{{ ti.xcom_pull(task_ids="create_build_us_central1_for_cancel", key="id") }}',
        location="us-central1",
    )
    create_build_trigger_us_central1 = cloud_build.CloudBuildCreateBuildTriggerOperator(
        task_id="create_build_trigger_us_central1",
        project_id=PROJECT_ID,
        trigger=trigger,
        location="us-central1",
    )
    get_build_trigger_us_central1 = cloud_build.CloudBuildGetBuildTriggerOperator(
        task_id="get_build_trigger_us_central1",
        project_id=PROJECT_ID,
        trigger_id='{{ ti.xcom_pull(task_ids="create_build_trigger_us_central1", key="id") }}',
        location="us-central1",
    )
    update_build_trigger_us_central1 = cloud_build.CloudBuildUpdateBuildTriggerOperator(
        task_id="update_build_trigger_us_central1",
        project_id=PROJECT_ID,
        trigger_id='{{ ti.xcom_pull(task_ids="create_build_trigger_us_central1", key="id") }}',
        trigger=trigger,
        location="us-central1",
    )
    run_build_trigger_us_central1 = cloud_build.CloudBuildRunBuildTriggerOperator(
        task_id="run_build_trigger_us_central1",
        project_id=PROJECT_ID,
        trigger_id='{{ ti.xcom_pull(task_ids="create_build_trigger_us_central1", key="id") }}',
        source={
            "branch_name": "main"
        },
        location="us-central1",
    )
    delete_build_trigger_us_central1 = cloud_build.CloudBuildDeleteBuildTriggerOperator(
        task_id="delete_build_trigger_us_central1",
        project_id=PROJECT_ID,
        trigger_id='{{ ti.xcom_pull(task_ids="create_build_trigger_us_central1", key="id") }}',
        location="us-central1",
    )


[
        # global
        create_build_global >> retry_build_global >> get_build_global,
        create_build_global_deferrable,
        list_build_global >> list_build_triggers_global,
        create_build_global_for_cancel >> cancel_build_global,
        create_build_trigger_global >> get_build_trigger_global >> update_build_trigger_global
        >> run_build_trigger_global >> delete_build_trigger_global,

        # us-central1
        create_build_us_central1 >> retry_build_us_central1 >> get_build_us_central1,
        create_build_us_central1_deferrable,
        list_build_us_central1 >> list_build_triggers_us_central1,
        create_build_us_central1_for_cancel >> cancel_build_us_central1,
        create_build_trigger_us_central1 >> get_build_trigger_us_central1 >> update_build_trigger_us_central1
        >> run_build_trigger_us_central1 >> delete_build_trigger_us_central1,
    ]

@VladaZakharova

VladaZakharova commented Mar 8, 2023

Copy link
Copy Markdown
Contributor

Cool! Thank you for the fix :)
@potiuk
LGTM

@potiuk
potiuk merged commit def1f89 into apache:main Mar 10, 2023
@boring-cyborg

boring-cyborg Bot commented Mar 10, 2023

Copy link
Copy Markdown

Awesome work, congrats on your first merged pull request!

@potiuk

potiuk commented Mar 10, 2023

Copy link
Copy Markdown
Member

Cool. Thank @VladaZakharova !

@potiuk

potiuk commented Mar 10, 2023

Copy link
Copy Markdown
Member

And @tnk-ysk of course :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:providers provider:google Google (including GCP) related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants