def execute(self, context: 'Context') -> None: hook = CloudSQLHook( gcp_conn_id=self.gcp_conn_id, api_version=self.api_version, impersonation_chain=self.impersonation_chain, ) self._validate_body_fields() if not self._check_if_instance_exists(self.instance, hook): hook.create_instance(project_id=self.project_id, body=self.body) else: self.log.info( "Cloud SQL instance with ID %s already exists. Aborting create.", self.instance) CloudSQLInstanceLink.persist( context=context, task_instance=self, cloud_sql_instance=self.instance, project_id=self.project_id or hook.project_id, ) instance_resource = hook.get_instance(project_id=self.project_id, instance=self.instance) service_account_email = instance_resource["serviceAccountEmailAddress"] task_instance = context['task_instance'] task_instance.xcom_push(key="service_account_email", value=service_account_email)
def _check_if_instance_exists(self, instance, hook: CloudSQLHook) -> Union[dict, bool]: try: return hook.get_instance(project_id=self.project_id, instance=instance) except HttpError as e: status = e.resp.status if status == 404: return False raise e
def execute(self, context): hook = CloudSQLHook(gcp_conn_id=self.gcp_conn_id, api_version=self.api_version) self._validate_body_fields() if not self._check_if_instance_exists(self.instance, hook): hook.create_instance(project_id=self.project_id, body=self.body) else: self.log.info( "Cloud SQL instance with ID %s already exists. " "Aborting create.", self.instance) instance_resource = hook.get_instance(project_id=self.project_id, instance=self.instance) service_account_email = instance_resource["serviceAccountEmailAddress"] task_instance = context['task_instance'] task_instance.xcom_push(key="service_account_email", value=service_account_email)