Ensemble and configuration

Shawn Edmondson sed at rpath.com
Mon Jun 13 14:54:37 UTC 2011

On Jun 10, 2011, at 11:13 AM, Gustavo Niemeyer wrote:

> Hello Shawn,
> It's interesting that every once in a while we are in touch.  I recall
> talking to some of the developers of RPath back in the days I worked
> on RPM and APT-RPM.  More than half a decade later, and we have moved
> up the stack.  Good to be in touch again.
>> Hi folks, I work on product management and strategy here at rPath.  We
>> are committed to adding model-driven orchestration to our system
>> management offering, and would love to find a compatible open-source
>> project to contribute to rather than build something new, so I've been
>> looking at Ensemble after hearing about it from Ben Saller.
> That's great news, and thanks for reaching out.  I hope we can find
> ways to collaborate around the project.

Same here, looking forward to it.  Glad you remember us!

> (...)
>> 1. Does it/will it require one instance of the ensemble manager VM per
>>   environment?  If I'm managing many environments (such as at an
>>   ASP/SaaS vendor with many instances of a single-tenant app), I'd
>>   expect one manager to handle multiple environments.
> Yes, we'll require an ensemble manager per environment, but there
> might be a couple of interesting points around this to clarify:
> First, it won't need its own VM.  We'll certainly have single-machine
> deployments, for instance, and that means the manager has to be
> lightweight. The current per-VM approach was just a quick way for us
> to get going, but there are no technical walls that enforce that model
> in the system.
> Then, and perhaps that's the most interesting point for your case, you
> can have several deployments of the same single-tenant app on the same
> environment.  You can even have several disconnected network graphs
> within the same deployment, with overlapping formulas (potentially
> partially overlapping).

Sounds good.

>> 2. For the wordpress+mysql example in the doc, you start up each
>>   service independently, then add the relation.  Before you add the
>>   relation, w hat logical state is the wordpress service in -- is it
>>   something like "can't really start yet because I don't have a DB?"
> Yes, that's right.  Ultimately, it's up to the formula author to
> decide what's the appropriate time to bring up the formula.
> Internally, Ensemble recognizes and leaves the service unit (the
> formula deployment) aware that the relation hasn't been established.
> The desired behavior on this case is really application-based, though.
> A web-server could politely come up online and let the user know that
> the setup is still going on, for instance, or even that it's an
> unplanned down time (the database might have gone away for whatever
> reason).

Makes sense.  I like how it doesn't impose too much behavior on the
formula author.

>> 3. Looks like formulas are models for individual services, and
>>   formulas can refer to others as provides/requires, but there isn't
>>   an enclosing model for a multi-service application.  I expected to
>>   see some sort of overarching composition model for (say) a full
>>   wordpress deployment, where that model refers to the mysql service
>>   and the wordpress service.  Is that something planned, or seen as
>>   unnecessary?
> That's very much necessary, and we believe we have a good plan for
> them.  We don't yet have documentation available, but you'll see us
> talking about these as "stacks".
> Also note that, in this specific example, we'll have something else
> too: automatic dependency resolution.  We're postponing that feature
> only because we want to develop it in light of the remote formula
> repository mechanism working, so that we consider the full problem of
> non-universal knowledge while designing the algorithm.

Excellent, good to hear.

Sounds like the project's vision is significantly larger than it appears
on the website to a casual browser.  An architecture preso or whitepaper
would be really valuable (and of course expensive!)

>> 4. In the example, wordpress/0 didn't automatically become related to
>>   mysql/0, but wordpress/1 did.  Why did those two behave
>>   differently?
> We'd have to investigate what happened, but your assumption is correct
> about what should happen.  All the service units within a deployed
> service must respect the same relations, whether you deploy the
> service unit before the relation was established, or afterwards.
>> 5. Are the project developers OK making it widely cross-platform over
>>   time (for not only other Linuxes, but also Windows)?
> We're certainly not against the idea of porting it to other platforms,
> and actually I don't think today we have any hard dependencies on
> Ubuntu.  That said, our focus is naturally on providing users a very
> smooth experience on Ubuntu.  Those things don't have to conflict,
> though.

Makes sense.

>> 6. You have a draft concept of config properties for services, which I
>>   really like.  Right now it is for what I call "write only" config
>>   -- the sysadmin specifies property values that get passed down to
>>   hooks for implementation.  (rPath config is similar today.)  I'd
> I don't think that's accurate. See below.
>>   like to see "read/write" config properties, plus config
>>   dependencies, that would let you solve this point problem:
>>     * Each application constellation needs an app server and a DB
>>       server.
>>     * The app server needs a JDBC string for the corresponding DB.
>>     * The DB gets its IP from DHCP.
>>     * How do I automatically configure each app+DB combo correctly?
> I'm not sure I understand what the problem you see in that scenario
> is.  This sounds like a trivial relation:
> myapp requires an interface jdbc named db
> mydb provides an interface jdbc named app
> mydb has an app-relation-joined hook with:
>    relation-set JDBCAddr=$ADDR
> myapp has a db-relation-changed hook with:
>    ADDR=$(relation-get JDBCAddr)
> Is that all you need, or are you seeing an additional issue that I miss?

That makes sense -- I think I was staring at the Service Configuration draft
(https://ensemble.ubuntu.com/docs/drafts/service-config.html) and missed 
relation values, which do solve that problem.

>> We're leaning toward building something like that, but of course would
>> rather see it within an existing open-source project if possible.
> It looks like we already cover it, and we are open to collaboration for sure.
> Thanks again for getting in touch, Shawn.

Thanks for the patient answers!  I'll start playing with a build, look forward
to getting deeper into this.


> -- 
> Gustavo Niemeyer
> http://niemeyer.net
> http://niemeyer.net/blog
> http://niemeyer.net/twitter

More information about the Ensemble mailing list