Configurable features¶
In the context of this framework, configurables are entities that designate what properties of the microservice can be dynamically set and configurators are strategies that, on service startup, collects the required properties from the environment.
Currently, the available confugurators are:
gemstone.config.configurator.CommandLineConfigurator
- collects values from the command line arguments
In order to specify configurables for the microservice, you have to provide
set the gemstone.MicroService.configurables
attribute to a list of
Configurable
objects.
Configurators are specified in the gemstone.MicroService.configurators
attribute.
On service startup, each configurator tries to extract the required values from the environment in
the order they are defined.
In order to trigger the configurators, you need to explicitly call the
gemstone.MicroService.configure()
method before calling
gemstone.MicroService.start()
Defining configurators¶
Configurators are defined in the gemstone.MicroService.configurators
class attribute.
class ExampleService(gemstone.MicroService):
# ...
configurators = [
gemstone.config.CommandLineConfigurator()
]
# ...
Defining configurables¶
Configurables are defined in the gemstone.MicroService.configurables
class attribute.
class ExampleService(gemstone.MicroService):
# ...
configurables = [
gemstone.config.Configurable("port", template=lambda x: int(x)),
gemstone.config.Configurable("discovery_strategies",
template=lambda x: [RedisDiscoveryStrategy(a) for a in x.split(",")]),
gemstone.config.Configurable("host"),
gemstone.config.Configurable("accessible_at"),
]
# ...
In the example above, we defined 4 configurables:
gemstone.config.Configurable("port", template=lambda x: int(x))
the--port
command-line argument will be casted toint
and assigned togemstone.MicroService.port
gemstone.config.Configurable("host")
the--host
command-line argument assigned togemstone.MicroService.host