def deploy( self, ctx: HandlerContext, resource: Resource, requires: Dict[ResourceIdStr, const.ResourceState], ) -> None: if self.skip(resource.id.agent_name, resource.key): raise SkipResource() elif self.fail(resource.id.agent_name, resource.key): raise Exception() elif resource.set_state_to_deployed: ctx.set_status(const.ResourceState.deployed)
def _execute(self, ctx: handler.HandlerContext, events: dict, cache: AgentCache) -> (bool, bool): """ :param ctx The context to use during execution of this deploy :param events Possible events that are available for this resource :param cache The cache instance to use :return (success, send_event) Return whether the execution was successful and whether a change event should be sent to provides of this resource. """ ctx.debug("Start deploy %(deploy_id)s of resource %(resource_id)s", deploy_id=self.gid, resource_id=self.resource_id) provider = None try: provider = handler.Commander.get_provider(cache, self.scheduler.agent, self.resource) provider.set_cache(cache) except Exception: if provider is not None: provider.close() cache.close_version(self.resource.id.version) ctx.set_status(const.ResourceState.unavailable) ctx.exception("Unable to find a handler for %(resource_id)s", resource_id=str(self.resource.id)) return False, False yield self.scheduler.agent.thread_pool.submit(provider.execute, ctx, self.resource) send_event = (hasattr(self.resource, "send_event") and self.resource.send_event) if ctx.status is not const.ResourceState.deployed: provider.close() cache.close_version(self.resource.id.version) return False, send_event if len(events) > 0 and provider.can_process_events(): ctx.info( "Sending events to %(resource_id)s because of modified dependencies", resource_id=str(self.resource.id)) yield self.scheduler.agent.thread_pool.submit( provider.process_events, ctx, self.resource, events) provider.close() cache.close_version(self.resource_id.version) return True, send_event