openstack team mailing list archive
-
openstack team
-
Mailing list archive
-
Message #06160
Re: Metadata and File Injection
On Thu, 15 Dec 2011, Jesse Andrews wrote:
> On Thu, Dec 15, 2011 at 8:43 AM, Scott Moser <smoser@xxxxxxxxxx> wrote:
> > I'm just curious, what are the motivations behind inventing something
> > other than the EC2 Metadata service? It is generally functional, and
> > quite a lot can (and has) built atop this simple service.
>
> I should clarify - the idea is that ec2 metadata service is a great
> starting point - but there are already a handful of additions that
> should be added.
>
> In the existing (ec2) metadata service the urls look like:
>
> http://169.254.169.254/(version)/(resource)
>
> My hope is that we can add features like:
>
> * injected files / personality (or you can think of them as multiple
> named userdata sections)
See below, but I don't see a reason to call something "injected files", as
opposed to a key of:
"files/etc/passwd" : "contents here"
and letting the guest agents and consumers sort out naming conventions.
> * updatable metadata params (the key/value params in the openstack
> api) with CRUD (so you can remove/update from guest)
>
> > Secondly, There are 2 features that I feel are missing from the metadata
> > service. And I'd hope that these could be accounted for if there is going
> > to be invention done.
> > a.) user-data is a single entity.
> > There are potentially multiple sources that want to provide input to
> > a guest (the end user might want to install some packages at boot,
> > and the cloud infrastructure might want to tell the guest of a local
> > mirror). cloud-init supports multipart-mime in userdata, so that
> > there can be separate pieces inside that single source, but even
> > then, all parties involved have to agree that they do not completely
> > "own" that resource.
>
> The multipart-mime stuff is a great hack but isn't very user friendly
> as you state.
>
> In the openstack api we have "server personalities" that are similar
> to userdata except you can have multiple of them and they are named.
> http://docs.openstack.org/api/openstack-compute/1.1/content/Server_Personality-d1e2543.html
>
> If the guest (client) is in charge of pulling the "personality" data
> instead of the host injecting it, would this fulfill the usecase?
I find specific designed use like this to be unnecessary. EC2 basically
says "heres a place to store a blob of data, do with it what you want".
>From that, best practices, good ideas, bad ideas, and even standards will
evolve.
What does a "Server Personality" give me that cannot be accomplished
accomplished by guest and lauching-entity agreeing on a key-value pair
with keyname "server-personality".
Basically, I'm saying dont bother with special keys/locations in a spec if
there is no reason to.
> > b.) There is no way to disable it.
> > cloud-init supports writing a null-route to the metadata service,
> > which can make it inaccessible to any non-root entity on the system.
> > However, it would be nicer if there was a way to disable it entirely.
> > With that in place, passing credentials into the guest would be
> > easier as once they're consumed they can be removed.
>
> The usecase of passing credentials is one reason we want to have the
> metadata passed via the openstack API mutable via the metadata service
>
> http://docs.openstack.org/api/openstack-compute/1.1/content/Server_Metadata-d1e2529.html
>
> A hashed password could be provided to the guest via the metadata
> service in a key "bcrypt_password". The guest agent could retrieve
> the password and then DELETE it:
>
> curl -X DELETE http://169.254.169.254/os/meta/bcrypt_password
Well, theres no reason it can't be plaintext either. but, yes, thats
basically what i'm hoping for.
> > c.) No way to modify contents of the service after instance launch.
> > OK, I said 2 features, and really this one is wishlist. If we had an
> > arbitrary key-value store that was available, the user could interact
> > with the guest using this service. It'd have to be poll-based, but a
> > in-guest hypervisor could watch for creation and deletion of keys.
> > Potentially, the MD might be RW from inside guest, meaning it could
> > even convey information back.
> > I consider this wishlist because really, there are perfectly good
> > solutions for communicating to in-guest agents, theres not a lot of
> > reason to invent a new one.
>
> The openstack API already has CRUD of the key/value metadata in the
> non-metadata (regular) API.
>
> http://docs.openstack.org/api/openstack-compute/1.1/content/MetadataSection.html
>
> By exposing this through the metadata service I think we get what you
> are asking for.
>
> My wishlist is the able to do long-polling against the metadata
> service to be alerted of changes from the guest :)
I dont know that its necessary is the only thing. What is the scenario
where polling this metadata service is better than the instance polling
another network resource? Or listening to a SQS or zookeeper, or
anything.
I agree that it seems useful (I brought it up), but I honestly can't come
up with something that it would accomplish that couldn't be done via
existing technologies just as well.
My preferences in order are:
a.) generic key/value store metadata service, that can be populated on
instance creation.
b.) allow get/set/delete from api
c.) allow get/set/delete from in-instance (note, though, that can
actually be accomplished via the same path as 'b', there is no reason
credentials can't/shouldn't exist in the instance).
I really think that everything you or I would want to accomplish can be
done given those fundamentals.
Follow ups
References