All, I'll be taking a lack of comments as +1, so here's your last chance to comment on this :-)
Vincent Le lundi 05 août 2013, à 13:26 +0200, Vincent Untz a écrit : > Hi, > > A few weeks ago, I started the work on allowing schema changes in > pebbles, without breaking existing proposals. In short, there's a > migration rake task that will update the proposal (and its matching > role, if committed) to the updated schema. > > The need for this stems from the fact that we might very well add > required attributes to schemas during the pebbles lifecycle (to allow > setting some configuration option in an openstack config file, for > instance), and we cannot tell people to recreate a new proposal to get > this. Their existing setup must continue to work. > > With the patch, you can do the following: > rake crowbar:schema_migrate_prod[keystone nova] > and this will do all the migration magic for keystone and nova. If you > just run "rake crowbar:schema_migrate_prod", it will migrate all > proposals. > > It's worth mentioning that it has absolutely no impact on anything else > so far because it doesn't touch the code that crowbar uses when running. > It simply adds a rake task for now. The missing piece is to find when to > run this rake task -- I'm considering adding this to the crowbar init > script, or simply letting the rpm packages do this. > > All the details about how it works is in > https://github.com/crowbar/barclamp-crowbar/pull/613 > > Here's a paste of the pull request description: > > ============================== > There are two new tasks: > > - crowbar:schema_migrate -- this migrates data bags / roles to the > current revision of the schema > - crowbar:schema_migrate_prod -- this is a convenience wrapper task to > call crowbar:schema_migrate with the production environment > > By default, this will migrate data bags / roles for all barclamps. It's > possible to restrict this to one or several barclamps: > ``` > rake crowbar:schema_migrate_prod[nova] > rake crowbar:schema_migrate_prod[keystone nova] > ``` > > The migration works the following way: > > - it supports upgrades and downgrades. > > - schemas supporting migration must have a schema-revision int > attribute in the deployment part; the template will contain the > version of the schema revision in this attribute. > (Reason this is in the deployment part: this will be available in > the committed role too) > > - there are migration scripts in > /opt/dell/chef/data_bags/crowbar/migrate/$barclamp/. The scripts > must be named $rev_$somedescription.rb; the filename can have > 0 (001_foobar.rb will work as well as 1_foobar.rb). There can be > multiple scripts per revision; they will be executed by alphabetical > order (or reverse alphabetical order in case of downgrades). > > - a script can provide two functions (they are optional): > - an upgrade function > - a downgrade function > > The functions must take as parameters: > - the barclamp attributes of the template > - the barclamp deployment information of the template > - the barclamp attributes of the proposal / role > - the barclamp deployment information of the proposal / role > > The functions must return: > - the updated barclamp attributes of the proposal / role > - the updated barclamp deployment information of the proposal / role > > We are explicitly restricting acces to the barclamp attributes and > barclamp deployment information to forbid the migration scripts to > change anything outside of the perimeter of each barclamp. > > As an example, for nova, we could have > /opt/dell/chef/data_bags/crowbar/migrate/nova/001_add_vuntz_attribute.rb > with the following content: > > ```ruby > def upgrade ta, td, a, d > a['vuntz'] = ta['vuntz'] > return a, d > end > > def downgrade ta, td, a, d > a.delete('vuntz') > return a, d > end > ``` > > This will update the attributes.nova.vuntz attribute in the proposal > data bag, and the default_attributes.nova.vuntz attribute in the role. > ============================== > > Any comment? > > Vincent > > -- > Les gens heureux ne sont pas pressés. > > _______________________________________________ > Crowbar mailing list > Crowbar@dell.com > https://lists.us.dell.com/mailman/listinfo/crowbar > For more information: http://crowbar.github.com/ > -- Les gens heureux ne sont pas pressés. _______________________________________________ Crowbar mailing list Crowbar@dell.com https://lists.us.dell.com/mailman/listinfo/crowbar For more information: http://crowbar.github.com/