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 >>> > >>> >>> >>>