From the project
Building a better, bigger TurnKey library
This blog post started out as a response to a private email discussion between me and contributing developer Eric (tssgery) whom recently developed TurnKey Observium, one of TurnKey's top ten downloads. Observium is very popular for a newly hatched appliance. It has the same number of downloads as Redmine, which we've supported for a few years now!
Eric wrote:
TKL has two big issues as I see it:
- Marketing. You're the best kept secret of the internet.
- Testing. Too many appliance/products to be supported.
Eric is right on the both counts.
TurnKey is severely undermarketed. We've been pouring all of our time and energy into development. I'm pretty sure there's a huge community of potential users that would find TurnKey very useful - except they don't know about it, or their cloud provider doesn't offer it as a deployment option, etc.
There's definitely room for improvement on the QA / testing front, as evidenced by the recent issue with TurnKey ClipBucket.
Testing is not only the limiting factor in the quality of the appliance library, but also its size. If it comes to that, and often it does, then like Eric I'd rather see TurnKey do a better job on fewer appliance solutions than an increasingly worse job on an ever expanding roster of solutions.
Luckily, I believe TurnKey has more levers to fiddle with than just the number of solutions in the library. Here are our main ideas on how it might be possible to improve the quality of the library while growing, rather than shrinking the number of supported solutions:
More community involvement: development labour is the key bottleneck, so it's very important we get more developers from the community on board. For this to happen we not only have to do a better job of encouraging community development but also make it as easy as possible for developers to get involved. Which brings me to the next points...
TKLDev as a cloud service: improve the build infrastructure further so that it is even easier for community developers to build and test up-to-date versions of new appliances. TKLDev is great, but I think we can do better. For example, one idea we've been toying with is turning TKLDev into a cloud service and tying it together with community repos on GitHub.
Built-in regression testing: build automated regression testing into the TurnKey build infrastructure. One of the "secret" reasons we've been working on deploying TurnKey on top of LXC is that it will make it easier for us to implement this.
Imagine if instead of manually testing appliances you just run:
make test
TKLDev could leverage LXC to run an instance of the built appliance, check that all the ports are open, access the web applications and make sure they are working (e.g., return 200, non-zero pages, no "error" or "exception" in the HTML, etc.) and use an automatic tool to screenshots a human could scan for errors in quick batches.
The design is pretty straightforward. Just extend how fab works with the other elements in the product design (e.g., conf, overlay, removelists).
In each product tests.d would contain a bunch of test scripts that would be run against appliance inside a container. For code re-use purposes these scripts would get executed with common/tests/bin in their PATH.
Similar to other elements instead of implementing a test in tests.d we could just point to a test via COMMON_TESTS variable, or to a group of common tests (e.g., COMMON_TESTS := turnkey.d in turnkey.mk) such as checking that all the ports in WEBMIN_FW_TCP_INCOMING are open.
What do you think?
I love this discussion and am pleased to see it going on. I agree with most of what has been said so I guess this is a bit of a 'me too' type post, but one thing I really wanted to support was your suggestion Eric for the appliance 'support levels' (I guess for want of a better phrase). I think that is a great idea and is something of a middle ground between limiting the number of appliances available through TKL and "having as many appliances as we can"...
Also I think that promoting TKL as something of a 'development partner' with other software developers holds huge potential. Seriously I don't think that there is anything not to like about that approach... As a software developer, having the facility to 'farm out' the work of maintaining (at an OS level), hosting and distributing of your software (in the form of a 'ready to run' TKL appliance) would surely be an apealing option!? And from a TKL perspective great to have a software developer 'onside' to support their software would be fantastic... I know that in the past this has almost happened a couple of times (ok at least once anyway...), but because all the pieces of the TKL infrastructure have not been in place and TKL wasn't responsive enough, it didn't happen and as such it died a natural death...