Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
 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))