Ejemplo n.º 1
0
 def execute(self, context):
     hook = ComputeEngineHook(gcp_conn_id=self.gcp_conn_id,
                              api_version=self.api_version)
     old_instance_group_manager = hook.get_instance_group_manager(
         zone=self.zone,
         resource_id=self.resource_id,
         project_id=self.project_id)
     patch_body = {}
     if 'versions' in old_instance_group_manager:
         patch_body['versions'] = old_instance_group_manager['versions']
     if 'instanceTemplate' in old_instance_group_manager:
         patch_body['instanceTemplate'] = old_instance_group_manager[
             'instanceTemplate']
     if self.update_policy:
         patch_body['updatePolicy'] = self.update_policy
     self._possibly_replace_template(patch_body)
     if 'versions' in patch_body:
         for version in patch_body['versions']:
             self._possibly_replace_template(version)
     if self._change_performed or self.update_policy:
         self.log.info(
             "Calling patch instance template with updated body: %s",
             patch_body)
         return hook.patch_instance_group_manager(
             zone=self.zone,
             resource_id=self.resource_id,
             body=patch_body,
             request_id=self.request_id,
             project_id=self.project_id)
     else:
         # Idempotence achieved
         return True
Ejemplo n.º 2
0
 def execute(self, context):
     hook = ComputeEngineHook(gcp_conn_id=self.gcp_conn_id,
                              api_version=self.api_version)
     self._validate_all_body_fields()
     return hook.set_machine_type(zone=self.zone,
                                  resource_id=self.resource_id,
                                  body=self.body,
                                  project_id=self.project_id)
Ejemplo n.º 3
0
 def execute(self, context):
     hook = ComputeEngineHook(gcp_conn_id=self.gcp_conn_id,
                              api_version=self.api_version)
     self._validate_all_body_fields()
     try:
         # Idempotence check (sort of) - we want to check if the new template
         # is already created and if is, then we assume it was created by previous run
         # of CopyTemplate operator - we do not check if content of the template
         # is as expected. Templates are immutable so we cannot update it anyway
         # and deleting/recreating is not worth the hassle especially
         # that we cannot delete template if it is already used in some Instance
         # Group Manager. We assume success if the template is simply present
         existing_template = hook.get_instance_template(
             resource_id=self.body_patch['name'],
             project_id=self.project_id)
         self.log.info(
             "The %s template already existed. It was likely created by previous run of the operator. "
             "Assuming success.", existing_template)
         return existing_template
     except HttpError as e:
         # We actually expect to get 404 / Not Found here as the template should
         # not yet exist
         if not e.resp.status == 404:
             raise e
     old_body = hook.get_instance_template(resource_id=self.resource_id,
                                           project_id=self.project_id)
     new_body = deepcopy(old_body)
     self._field_sanitizer.sanitize(new_body)
     new_body = merge(new_body, self.body_patch)
     self.log.info("Calling insert instance template with updated body: %s",
                   new_body)
     hook.insert_instance_template(body=new_body,
                                   request_id=self.request_id,
                                   project_id=self.project_id)
     return hook.get_instance_template(resource_id=self.body_patch['name'],
                                       project_id=self.project_id)
Ejemplo n.º 4
0
 def execute(self, context):
     hook = ComputeEngineHook(gcp_conn_id=self.gcp_conn_id,
                              api_version=self.api_version)
     hook.stop_instance(zone=self.zone,
                        resource_id=self.resource_id,
                        project_id=self.project_id)
Ejemplo n.º 5
0
 def setUp(self):
     with mock.patch('airflow.gcp.hooks.base.GoogleCloudBaseHook.__init__',
                     new=mock_base_gcp_hook_no_default_project_id):
         self.gce_hook_no_project_id = ComputeEngineHook(gcp_conn_id='test')