def test_require_all_three_fields(self, spec, name, namespace, deployment_id): with pytest.raises(TypeError): set_extras(app_spec=spec, app_name=name, namespace=namespace, deployment_id=deployment_id)
def _deploy(self, application): LOG.debug("Deploying %s", application.spec.application) try: deployment_id = application.metadata.labels["fiaas/deployment_id"] set_extras(app_name=application.spec.application, namespace=application.metadata.namespace, deployment_id=deployment_id) except (AttributeError, KeyError, TypeError): raise ValueError("The Application {} is missing the 'fiaas/deployment_id' label".format( application.spec.application)) try: repository = _repository(application) self._lifecycle.initiate(app_name=application.spec.application, namespace=application.metadata.namespace, deployment_id=deployment_id, repository=repository) app_spec = self._spec_factory( name=application.spec.application, image=application.spec.image, app_config=application.spec.config, teams=[], tags=[], deployment_id=deployment_id, namespace=application.metadata.namespace ) set_extras(app_spec) self._deploy_queue.put(DeployerEvent("UPDATE", app_spec)) LOG.debug("Queued deployment for %s", application.spec.application) except (InvalidConfiguration, YAMLError): LOG.exception("Failed to create app spec from fiaas config file") self._lifecycle.failed(app_name=application.spec.application, namespace=application.metadata.namespace, deployment_id=deployment_id, repository=repository)
def test_status_log_has_extra(self, app_spec): set_extras(app_spec) logger = logging.getLogger("test.log.extras") logger.addHandler(StatusHandler()) logger.warning(TEST_MESSAGE) logs = get_final_logs(app_name=app_spec.name, namespace=app_spec.namespace, deployment_id=app_spec.deployment_id) assert len(logs) == 1 log_message = logs[0] assert TEST_MESSAGE in log_message assert app_spec.name in log_message assert app_spec.namespace in log_message
def _delete(self, application): app_spec = self._spec_factory( name=application.spec.application, image=application.spec.image, app_config=application.spec.config, teams=[], tags=[], deployment_id="deletion", namespace=application.metadata.namespace, ) set_extras(app_spec) self._deploy_queue.put(DeployerEvent("DELETE", app_spec)) LOG.debug("Queued delete for %s", application.spec.application)
def test_json_log_has_extra(self, app_spec): log = logging.getLogger("test-logger") log.setLevel(logging.INFO) handler = _create_default_handler(_FakeConfig("json")) log_buffer = StringIO() handler.stream = log_buffer log.addHandler(handler) set_extras(app_spec) log.info(TEST_MESSAGE) log_entry = json.loads(log_buffer.getvalue()) assert TEST_MESSAGE in log_entry["message"] assert log_entry["extras"]["namespace"] == app_spec.namespace assert log_entry["extras"]["app_name"] == app_spec.name assert log_entry["extras"]["deployment_id"] == app_spec.deployment_id
def _create_spec(self, event): artifacts = self._artifacts(event) name = event[u"project_name"] image = artifacts[u"docker"] deployment_id = self._deployment_id(event) fiaas_url = artifacts[u"fiaas"] teams = event[u"teams"] tags = event[u"tags"] set_extras(app_name=name, namespace=DEFAULT_NAMESPACE, deployment_id=deployment_id) app_config = self._app_config_downloader.get(fiaas_url) return self._spec_factory(name, image, app_config, teams, tags, deployment_id, DEFAULT_NAMESPACE)
def _handle_message(self, deploy_counter, message, message_counter): message_counter.inc() self._last_message_timestamp = int(time_monotonic()) event = self._deserialize(message) self._logger.debug("Got event: %r", event) if event[u"environment"] == self._environment: try: self._lifecycle.initiate( app_name=event[u"project_name"], namespace=DEFAULT_NAMESPACE, deployment_id=self._deployment_id(event)) app_spec = self._create_spec(event) set_extras(app_spec) self._check_app_acceptable(app_spec) self._add_deployment_label(app_spec) self._deploy_queue.put(DeployerEvent("UPDATE", app_spec)) self._reporter.register(app_spec, event[u"callback_url"]) deploy_counter.inc() except (NoDockerArtifactException, NoFiaasArtifactException): self._logger.debug("Ignoring event %r with missing artifacts", event) except YAMLError: self._logger.exception("Failure when parsing FIAAS-config") self._lifecycle.failed( app_name=event[u"project_name"], namespace=DEFAULT_NAMESPACE, deployment_id=self._deployment_id(event)) except InvalidConfiguration: self._logger.exception( "Invalid configuration for application %s", event.get("project_name")) self._lifecycle.failed( app_name=event[u"project_name"], namespace=DEFAULT_NAMESPACE, deployment_id=self._deployment_id(event)) except HTTPError: self._logger.exception("Failure when downloading FIAAS-config") self._lifecycle.failed( app_name=event[u"project_name"], namespace=DEFAULT_NAMESPACE, deployment_id=self._deployment_id(event)) except (NotWhiteListedApplicationException, BlackListedApplicationException) as e: self._logger.warn("App not deployed. %s", str(e))