Cool, gonna take a look. Regards JB
Le 26 sept. 2018 à 11:06, à 11:06, Thomas Draier <tdra...@jahia.com> a écrit: >Sorry, I forgot to mention : it's pushed in the patch branch : >https://github.com/apache/incubator-unomi/tree/patch > > >On Wed, Sep 26, 2018 at 3:14 PM Thomas Draier <tdra...@jahia.com> >wrote: > >> Hi, >> >> I've committed the changes for the patch. The files need to be put in >the >> same folder as the definitions ( META-INF/cxs/xxx ), and named with a >> suffix -patch.json . They will be deployed only once, if the >definitions >> was already there. Each patch has an id, so if you need to deploy a >new >> patch, just use a new id. The list of deployed patches is stored in >ES. >> Patches can also be manually executed with the >"unomi:deploy-definition" >> karaf command, or through a rest endpoint at /cxs/patches/apply . >I've >> removed the behaviour with -SNAPSHOT - definitions are never >redeployed, >> even in snapshot versions, so you'll need to explicitely provide a >patch to >> override. >> >> The syntax is slightly different from what has been sent previously : >> >> { >> "itemId": "firstName-patch1", >> "patchedItemId": "firstName", >> "operation": "patch", >> "data": [ >> >> >> { >> "op": "replace", >> "path": "/defaultValue", >> "value": "foo" >> } >> ] >> } >> >> For an override : >> >> { >> "itemId": "gender-patch1", >> "patchedItemId": "gender", >> "operation": "override", >> "data": { >> "metadata": { >> "id": "gender", >> "name": "Gender", >> >> "systemTags": [ >> "properties", >> "profileProperties" >> ] >> }, >> "type": "string", >> "defaultValue": "", >> "automaticMappingsFrom": [ ], >> >> "rank": "105.0" >> } >> } >> >> Or a remove : >> >> { >> "itemId": "firstName-patch3", >> "patchedItemId": "firstName", >> "operation": "remove" >> } >> >> >> Regards >> >> >> >> >> On Mon, Sep 24, 2018 at 11:00 AM Thomas Draier <tdra...@jahia.com> >wrote: >> >>> Hi, >>> >>> I did a quick test with json patch and actually it looks quite easy >to >>> integrate and seems to fill more use cases than just a simple >"override". >>> However I think it can still be useful to have a complete override >and also >>> the possisbility to completely remove the definition, so I was >thinking of >>> some "migration" or "update" json file wrapping the patch, within >the same >>> folder as the definitions : >>> >>> { >>> "itemId": "firstName", >>> "updateId": "firstName-patch1", >>> "operation": "patch", >>> "patch": [ >>> { >>> "op": "replace", "path": "/defaultValue", "value": "foo" >>> } >>> ] >>> } >>> >>> >>> A removal : >>> >>> { >>> "itemId": "firstName", >>> "updateId": "firstName-patch1", >>> "operation": "remove" >>> } >>> >>> Or a complete override : >>> >>> { >>> "itemId": "firstName", >>> "updateId": "firstName-patch1", >>> "operation": "override", >>> "definition": { >>> "metadata": { >>> "id": "firstName", >>> "name": "First name", >>> "systemTags": [ >>> "properties", >>> "profileProperties", >>> "basicProfileProperties", >>> "personalIdentifierProperties" >>> ] >>> }, >>> "type": "string", >>> "defaultValue": "", >>> "automaticMappingsFrom": [ ], >>> "rank": "101.0" >>> } >>> } >>> >>> >>> This could actually be extended with other type of operation. >>> >>> For now I do store "updateId" in the metadata of the item, so that >it's >>> not executed multiple times. But we have have an issue with the >delete if >>> the item is recreated after.. Maybe I should store the list of >updates in a >>> new structure ? That could also be accessible with karaf commands, >to see >>> which patch have been executed and reexecute them if needed. >>> >>> Thomas >>> >>> >>> On Tue, Sep 18, 2018 at 11:46 AM Francois Papon < >>> francois.pa...@openobject.fr> wrote: >>> >>>> Hi, >>>> >>>> Very interesting flow :) >>>> >>>> What is the format to update the definitions, it's just a new JSON, >is >>>> there some directives about the changes ? >>>> >>>> For example, in Karaf we have something like this to override >>>> configuration files : >>>> >>>> <edits> >>>> <edit> >>>> <file>config.properties</file> >>>> <operation>put</operation> >>>> <key>karaf.framework</key> >>>> <value>equinox</value> >>>> </edit> >>>> <edit> >>>> <file>config.properties</file> >>>> <operation>extend</operation> >>>> <key>org.osgi.framework.system.capabilities</key> >>>> <value>my-magic-capability</value> >>>> </edit> >>>> <edit> >>>> <file>config.properties</file> >>>> <operation>remove</operation> >>>> <key>org.apache.karaf.security.providers</key> >>>> </edit> >>>> </edits> >>>> >>>> May be a solution is a file with a patch description of the changes >? >>>> >>>> regards, >>>> >>>> François Papon >>>> fpa...@apache.org >>>> >>>> Le 18/09/2018 à 13:38, Serge Huber a écrit : >>>> > Not sure if you are talking about the patching system, but if yes >you >>>> > would provide a patch file that removes all the contents of file. >>>> > >>>> > If we are just using versions it is indeed a bit more tricky. We >would >>>> > also need to have a way to list the definitions to remove. >>>> > >>>> > Regards, >>>> > Serge... >>>> > >>>> > On Tue, Sep 18, 2018 at 11:23 AM Romain Gauthier ><rgauth...@jahia.com> >>>> wrote: >>>> >> Hi Serge, >>>> >> >>>> >> In that context, how would we manage objects deletion from a >plugin? >>>> >> >>>> >> Thanks! >>>> >> >>>> >> Romain >>>> >> >>>> >> On Tue, Sep 18, 2018 at 10:45 AM Serge Huber <shu...@apache.org> >>>> wrote: >>>> >> >>>> >>> Sorry, I didn't get around to this discussion but I think that >>>> >>> versions would probably be cleaner. I was even looking at >solutions >>>> >>> such as JSON patch >(https://github.com/java-json-tools/json-patch) >>>> to >>>> >>> be able to perform modifications on parts of definitions >instead of >>>> >>> having to deploy a whole definition again. >>>> >>> >>>> >>> We had discussions about adding lots of metadata, including >last >>>> >>> modification dates, maybe even hashes for the definition files, >to >>>> >>> know if a definition has been changed or not. >>>> >>> >>>> >>> I think that one of the advantages of the patch idea is that >you >>>> could >>>> >>> try to patch something if it's compatible, and if it's not you >would >>>> >>> not deploy it. But this idea would mostly be for use cases >where you >>>> >>> are interested in modifying something that comes out of the box >in >>>> >>> Unomi, not for upgrading a plugin. >>>> >>> >>>> >>> With versions at least we could also track if a definition is >on the >>>> >>> "default" version or has been modified somehow. >>>> >>> >>>> >>> For the cfg idea it feels weird to use a config file that way, >maybe >>>> >>> we should put the marker file elsewhere but to be honest I >don't have >>>> >>> a better idea :) >>>> >>> >>>> >>> Would love some input from JB or other Karaf experts :) >>>> >>> >>>> >>> Regards, >>>> >>> Serge... >>>> >>> >>>> >>> On Tue, Sep 18, 2018 at 9:51 AM Thomas Draier ><tdra...@jahia.com> >>>> wrote: >>>> >>>> Hi, >>>> >>>> >>>> >>>> I have to check, but the idea would be to be able to package >this >>>> cfg >>>> >>> file >>>> >>>> beside the bundle. I'm not familiar with unomi:migrate >command, but >>>> we >>>> >>> can >>>> >>>> imagine that this command would extract and deploy the cfg >file >>>> from the >>>> >>>> bundle - which would make the packaging easier (cfg directly >inside >>>> the >>>> >>>> plugin). The thing is that we need to be able to remove the >file >>>> once the >>>> >>>> definition has been "overridden" so that it's only done once, >so >>>> the cfg >>>> >>>> file should not be deployed automatically on each startup. >>>> >>>> >>>> >>>> Another idea I had was to store sort of "version" of the >definition >>>> >>> inside >>>> >>>> the metadata, and check if the json file has a greater >"version" >>>> defined. >>>> >>>> That makes things even more easier when developing plugin and >looks >>>> a >>>> >>>> little more clean, but I don't know if it would cover >correctly all >>>> use >>>> >>>> cases. >>>> >>>> >>>> >>>> We should also extends the DeployDefinition shell command to >be >>>> able to >>>> >>>> redeploy all definitions of a bundle. >>>> >>>> >>>> >>>> Thomas >>>> >>>> >>>> >>>> >>>> >>>> On Tue, Sep 18, 2018 at 1:33 AM Romain Gauthier < >>>> rgauth...@jahia.com> >>>> >>> wrote: >>>> >>>>> Hello Thomas, >>>> >>>>> >>>> >>>>> Nice proposition.How would it work for developers that are >building >>>> >>>>> plugins? Would we have to add our own cfg file or somehow >update >>>> the >>>> >>> cfg >>>> >>>>> file that you want to add? >>>> >>>>> >>>> >>>>> Since there is already a "unomi:migrate" command would you >reuse >>>> that >>>> >>>>> trigger to update / delete the definitions of the objects? >>>> >>>>> >>>> >>>>> Same question regarding the plugins, should we also implement >>>> "migrate" >>>> >>>>> command? >>>> >>>>> >>>> >>>>> Thanks, >>>> >>>>> >>>> >>>>> Romain >>>> >>>>> >>>> >>>>> On Thu, Sep 13, 2018 at 6:22 PM Thomas Draier ><tdra...@jahia.com> >>>> >>> wrote: >>>> >>>>>> Hi, >>>> >>>>>> >>>> >>>>>> I'm having some issues with the deployment and redeployment >of the >>>> >>> json >>>> >>>>>> files containing default definitions (segments, properties, >>>> etc..). >>>> >>> Many >>>> >>>>>> services have these loadPredefined* methods which load data >into >>>> ES, >>>> >>>>> based >>>> >>>>>> on json definition files. These methods only load the >content >>>> once, >>>> >>> if >>>> >>>>> the >>>> >>>>>> object does not exist yet in ES. So if a bundle comes with >an >>>> update >>>> >>> of >>>> >>>>> one >>>> >>>>>> of these file, it will just be ignored. >>>> >>>>>> >>>> >>>>>> Actually there was one ticket about this : >>>> >>>>>> https://issues.apache.org/jira/browse/UNOMI-182 , where >>>> definitions >>>> >>> are >>>> >>>>>> always redeployed when a bundle is in "snapshot" version - >but >>>> never >>>> >>> for >>>> >>>>> a >>>> >>>>>> release version. So that's nice when you are in development, >but >>>> not >>>> >>>>>> possible when upgrading a production environment. >>>> >>>>>> >>>> >>>>>> There also a console command to manually deploy a definition >- >>>> which >>>> >>> is >>>> >>>>>> also nice but cannot be automated in a migration. >>>> >>>>>> >>>> >>>>>> Of course there's a reason - these objects can be modified >>>> >>> afterwards by >>>> >>>>>> using the API, and so restarting should not overwrite the >>>> >>> modifications >>>> >>>>> by >>>> >>>>>> reimporting the file. Even if a module is updated and object >is >>>> >>> modified, >>>> >>>>>> the user may not want to overwrite his changes. >>>> >>>>>> >>>> >>>>>> However in some cases the developer may want to force the >update >>>> of >>>> >>> some >>>> >>>>>> specific objects ( it actually happened to us ). I'm looking >for >>>> some >>>> >>>>>> additional solution to force redeployment of a definition. >>>> >>>>>> >>>> >>>>>> So far i was thinking of adding a cfg file, which would list >the >>>> >>>>> properties >>>> >>>>>> to redeploy. This file would be removed once the properties >are >>>> ><https://maps.google.com/?q=ould+be+removed+once+the+properties+are&entry=gmail&source=g> >>>> >>> updated, >>>> >>>>> so >>>> >>>>>> that they are reloaded only once and not on every startup. >>>> >>>>>> >>>> >>>>>> As a bonus, I would also need to be able to remove >definitions the >>>> >>> same >>>> >>>>>> way. There's no way to do that now except using the REST API >, it >>>> >>> could >>>> >>>>> be >>>> >>>>>> good to also have a console command and to be able to remove >>>> >>> definitions >>>> >>>>>> with the same cfg file. >>>> >>>>>> >>>> >>>>>> What do you think .. ? >>>> >>>>>> >>>> >>>>>> Regards, >>>> >>>>>> >>>> >>>>> >>>> >>>>> -- >>>> >>>>> Romain Gauthier >>>> >>>>> Product Manager at Jahia >>>> >>>>> + 33 6 20 18 35 25 <+33%206%2020%2018%2035%2025> >>>> <+33%206%2020%2018%2035%2025> >>>> >>>>> 8 Rue du sentier | 75002 Paris | France >>>> >>>>> < >>>> >https://www.jahia.com/about-us/news-events/events-webinars/jahiadays> >>>> >>>>> >>>> >> >>>> >> -- >>>> >> Romain Gauthier >>>> >> Product Manager at Jahia >>>> >> + 33 6 20 18 35 25 <+33%206%2020%2018%2035%2025> >>>> >> 8 Rue du sentier | 75002 Paris | France >>>> >> ><https://www.jahia.com/about-us/news-events/events-webinars/jahiadays >>>> > >>>> >>>> >>>>