On Wed, Aug 08, 2012 at 03:58:27PM +0200, Laurens Van Houtven wrote:
> Hi,
> 
> I have a bunch of configuration for my service. Things like endpoints, 
> location of the root axiom store? Right now I grab these from the 
> environment. That means that my twistd IServiceMaker plugin's options is 
> pretty much by definition empty.
> 
> I'm wondering if more mature twistd users have already learned the hard way 
> what the best way to manage this is. I see three possible solutions:
> 
> 1. environment variables as I use them now: portable, simple.
> 2. command line options: still pretty portable and simple. additional 
> benefit: easy discoverability of options

Both, preferrably. Defining all of your configuration in terms of 
t.p.usage.Options is not a bad thing at all.
It's human readable, and scriptable. And it maps directly to ENV vars or INI 
files (etc). If you have strange configuration requirements, (like binary 
files), I think those belong in their own seperate file(s). E.g. SSL 
certificates, PW files, etc

> 3. axiom store: has the benefit that there's a single source of truth for 
> everything, i.e. I copy a store and I can recreate the service based on that 
> store exactly, using just the store
 
Yeah, I hate that kind of configuration. Configuration is/should-be diffable 
with standard tools, if possible.

> Like I said, I currently use (1), it looks like (1) and (2) are more or less 
> equivalent, I'm not sure if (3) is a good idea. I'm not really unhappy with 
> (1), it's just that finally writing my ServiceMaker class made me contemplate 
> the options.
> 
> (3) has the downside that it conflates user data with configuration data. I'm 
> not sure that's a good thing or not. It sounds very similar to axiomatic, 
> which I've heard of, seen, but never played with.

Well as indicated *I don't like it*, but really that is only due to lack of 
tooling support... :)
 
> I already use environment variables to decide whether or not to run certain 
> tests ("live" functional high level tests, with real disk and network IO, 
> that take way longer than the unit tests to run). I'm going to keep it that 
> way, because there's no obvious way of passing configuration to the tests 
> other than the environment.

Yeah. Plain ENV vars are probably the best bet there.
 
--
Cheers,
-E

_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to