Hi Michal, > >> Deltacloud side. So I put together a small PoC of how complex (or not > >> complex) this will be:
So, how complex (or not) do you feel it would be? And what operations can DC support with this approach? Machine templates? Machine attribute modification? Regards, Dies Koper > -----Original Message----- > From: Michal Fojtik [mailto:[email protected]] > Sent: Tuesday, 13 November 2012 11:37 PM > To: [email protected] > Subject: Re: DataMapper support for CIMI attributes > > On 11/13/2012 01:10 PM, Koper, Dies wrote: > > Hi Michal, > > > >> The horrible looking 'uuid' field is SHA1 hash composed from > >> credentials, driver name and provider string, so different clients > > will > >> not override their properties. > > > > This is something I've been wondering about, should these properties be > > stored per user or per resource? > > I mean, if I modify an attribute of a machine, which is stored in the > > persistence layer as the driver doesn't support this modification > > operation, and my colleague who has his own username but sharing my > > account lists the machine's attributes, would he see the original > > attribute or the modified one? > > I would have preferred the latter but having the credentials in the uuid > > sounds like you're thinking to do the former? > > Good catch! Yes, if you're sharing your resources with colleague that > use different credentials, he will not see the description you stored in > persistence layer (because UUID currently include the creator > username/password) and property will not be matched. > > I was thinking if storing attributes per resource will cause problems > for other clouds but it seems not since the resource IDs are mostly unique. > So I'm all for storing attributes per resource. The UUID will still be > there but it will not use account credentials as part of the hash (so it > will be just 'driver:provider'). Or I can drop the hash completely and > just store driver and provider. > > What others think? Is this right approach or I miss something? :-) > > -- Michal > > > > > Regards, > > Dies Koper > > > > > > > >> -----Original Message----- > >> From: Michal Fojtik [mailto:[email protected]] > >> Sent: Tuesday, 13 November 2012 10:54 PM > >> To: [email protected] > >> Subject: POC: DataMapper support for CIMI attributes > >> > >> Hi, > >> > >> I was playing a bit with adding DataMapper to Deltacloud to support > >> storing certain CIMI attributes that cannot be stored on the provider > >> side (like 'description', etc.). We were discussing earlier that for > >> that attributes we will need to create some persistent storage on > >> Deltacloud side. So I put together a small PoC of how complex (or not > >> complex) this will be: > >> > >> So let say you want to create a new Machine. Currently if you specify > >> 'description' in JSON body, we ignore this property because there is > > now > >> way how to store it on the backend side (using the driver method). > >> > >> So you have this JSON: > >> > >> ~/code/core/server > cat machine.json > >> { > >> "resourceURI": "http://schemas.dmtf.org/cimi/1/MachineCreate", > >> "name": "myMachine1", > >> "description": "My very first machine", > >> "machineTemplate": { > >> "machineConfig": { "href": > >> "http://localhost:3001/cimi/machine_configurations/m1-small" }, > >> "machineImage": { "href": > >> "http://localhost:3001/cimi/machine_images/img1" } > >> } > >> } > >> > >> And you create Machine using this curl command: > >> > >> curl -v --user "mockuser:mockpassword" -X POST \ > >> http://localhost:3001/cimi/machines \ > >> -H "Content-Type: application/json" -d @machine.json > >> > >> > >> With the patch I attached, you will see something like this in > >> Deltacloud API log: > >> > >> <snip> > >> ~ (0.000047) SELECT "id", "name", "uuid", "entity" FROM > >> "deltacloud_database_entity_properties" WHERE ("uuid" = > >> 'f6d93dfa8eaca129d7412a8d58980a5948361ae8' AND "entity" = > >> 'Instance:inst7' AND "name" = 'description') ORDER BY "id" LIMIT 1 > >> ~ (0.017038) INSERT INTO "deltacloud_database_entity_properties" > >> ("name", "uuid", "entity") VALUES ('description', > >> 'f6d93dfa8eaca129d7412a8d58980a5948361ae8', 'Instance:inst7') > >> ~ (0.014218) UPDATE "deltacloud_database_entity_properties" SET > >> "value" = 'My very first machine' WHERE "id" = 4 > >> ~ (0.000104) SELECT "id", "name", "uuid", "entity" FROM > >> "deltacloud_database_entity_properties" WHERE ("uuid" = > >> 'f6d93dfa8eaca129d7412a8d58980a5948361ae8' AND "entity" = > >> 'Instance:inst7' AND "name" = 'description') ORDER BY "id" LIMIT 1 > >> ~ (0.000045) SELECT "id", "value" FROM > >> "deltacloud_database_entity_properties" WHERE "id" = 4 ORDER BY "id" > >> 127.0.0.1 - - [13/Nov/2012 12:45:03] "POST /cimi/machines HTTP/1.1" > > 201 > >> 862 0.2704 > >> </snip> > >> > >> As you can see DataMapper will store the 'description' property for > > the > >> 'Instance' model with id 'inst7' (the newly created instance). > >> > >> The horrible looking 'uuid' field is SHA1 hash composed from > >> credentials, driver name and provider string, so different clients > > will > >> not override their properties. > >> > >> Once this property is stored, I used the 'get_property_value' method, > >> that require just instance of the Deltacloud model and property name > > to > >> get the property value. > >> > >> Let me know what you think and if we want to go this way or we need > >> something more complex. > >> > >> The patch is also uploaded in Tracker: > >> > >> http://tracker.deltacloud.org/set/123 > >> > >> > >> -- Michal > >> > >> > >> -- > >> > >> Michal Fojtik <[email protected]> > >> Deltacloud API, CloudForms > > > > > -- > > Michal Fojtik <[email protected]> > Deltacloud API, CloudForms
