Can't we just use the resource merger approach for merging configs 
(http://sling.staging.apache.org/documentation/bundles/resource-merger.html 
<http://sling.staging.apache.org/documentation/bundles/resource-merger.html>)?
There probably needs to be a dedicated resource picker for configurations, 
because neither the search path approach nor the resource super type approach 
is applicable for configurations.
That way the merging aspect is nicely separated.
Konrad


> On 01 Aug 2016, at 13:24, Robert Munteanu <romb...@apache.org> wrote:
> 
> On Mon, 2016-08-01 at 11:34 +0100, Ian Boston wrote:
>> Hi,
>> 
>> On 1 August 2016 at 11:02, Carsten Ziegeler <cziege...@apache.org>
>> wrote:
>> 
>>> 
>>> Well, I think you're misinterpreting my comments - I never said
>>> that it
>>> will require a special tooling - I said it would be insane to edit
>>> a
>>> complex setup by editing nodes in the repository.
>>> 
>> 
>> I was, apologies and thank you for the clarification.
>> 
>> No special tooling *and* a simple set of rules that are natural to
>> communicate and document.
>> 
>> I don't have a strong opinion on merging or inheritance, provided its
>> simple to use and the result if obvious with no strange side effects
>> to
>> catch a deployer out.
> 
> I think it's possible to have merging on a less fine-grained level, and
> thus more controllable, by using multiple nodes for the same
> configuration instance.
> 
> For example:
> 
> Global: {
>     'services' : {
>         'serviceA' {
>             'endpoint' : 'https://api.com/foo' <https://api.com/foo'>
>             'params': {
>                'timeout': 500
>             }
>         }
>     }
> }
> 
> Site: {
>     'services' : {
>         'serviceA' {
>             'endpoint' : '
> https://stage.api.com/foo' <https://stage.api.com/foo'>
>         }
>     }
> }
> 
> the override only affects the 'endpoint' parameter. If at somepoint we decide 
> to add a 'retryCount' parameter to 'params' this will also be propagated to 
> inherited configurations.
> 
> Of course, this comes with the caveats that:
> 
> - we need to decide upfront what about how configurations are split into nodes
> - we won't always be able to split configurations into nodes so that all 
> properties are overrideable
> 
> Robert
> 
>> 
>> 
>>> 
>>> 
>>> Clearly with devops automation you have some tooling already in
>>> place
>>> which is using text files and does something to start AEM, so you
>>> can
>>> add the stuff there - or - the configuration are content packages
>>> after
>>> all, so if the automation supports content packages in some form,
>>> you're
>>> done.
>>> 
>> 
>> Agreed.
>> Best Regards
>> Ian
>> 
>> 
>>> 
>>> 
>>> Carsten
>>> 
>>>> 
>>>> Hi,
>>>> 
>>>> I think it must be possible to configure a Sling/AEM instance
>>>> without
>>> using
>>>> 
>>>> specific Sling/AEM tooling to create and manage the source
>>>> configuration.
>>>> The reason I say this is almost all serious deployments use some
>>>> form of
>>>> DevOps automation ranging from Puppet/Chef/AWS etc through to
>>>> Docker/Mesos/Kubernetes etc. Almost without exception those
>>>> systems work
>>>> with configuration stored in text files (property, json, yaml
>>>> etc), often
>>>> stored in Git/SVN/Hg, edited by a human in a text editor. There
>>>> are
>>> systems
>>>> 
>>>> that only allow config via a GUI, but most of those only used,
>>>> under
>>>> sufferance, when there is no other option, (or competing
>>>> product). The
>>>> "customer" here is not a Sling/AEM expert, but a DevOps engineer
>>>> who has
>>>> never seen either before.
>>>> 
>>>> If the only way to configure Sling/AEM is via special Sling/AEM
>>>> tooling
>>>> then we will have made the job of the TechOps/DevOps team even
>>>> harder.
>>>> 
>>>> I can think of lots of ways that merging at the property level
>>>> could be
>>>> made to work, but if we are not able to communicate clearly how
>>>> it works,
>>>> and all the potential side effects, to those whose job it is to
>>>> make
>>>> Sling/AEM work in production then we will have failed. If we have
>>>> to
>>> resort
>>>> 
>>>> to validation tools, compilers, special editors thats an
>>>> indication the
>>>> system is so complex we are not able to document it in plain
>>>> english.
>>> For
>>>> 
>>>> that reason, I beg, please keep whatever solution is chosen as
>>>> simple as
>>>> possible.
>>>> 
>>>> I did try to document "object" level inheritance (ie aggregating
>>>> properties), with all the side effects, but when I realised it
>>>> was not
>>>> going to be simple, I gave up and went back "object" level
>>>> merging, which
>>>> is brutal and simple by comparison.
>>>> 
>>>> Best Regards
>>>> Ian
>>>> 
>>>> 
>>>> 
>>>> On 1 August 2016 at 08:29, Carsten Ziegeler <cziege...@apache.org
>>>>> 
>>> wrote:
>>>> 
>>>> 
>>>>> 
>>>>>> 
>>>>>> Hi everyone,
>>>>>> 
>>>>>> I personally see a tooling based approach complicated due to
>>>>>> the
>>>>> ownership
>>>>>> 
>>>>>> scenarios.
>>>>> Let's assume two scenarios, configuration A and configuration B
>>>>> inherits
>>>>> from A.
>>>>> 
>>>>> Now, if we support merging, someone is allowed to change A,
>>>>> adds a new
>>>>> property and this automatically influences B - and in this case
>>>>> the
>>>>> person who made changes to A does not even need to have access
>>>>> rights to
>>>>> change anything for B. (Which I think is scary).
>>>>> 
>>>>> If we don't support inheritance, there is still someone who is
>>>>> allowed
>>>>> to make a change to A - at first this has no influence on B. If
>>>>> that
>>>>> same person is allowed to also change B and wants to "inherit"
>>>>> the new
>>>>> property to B, the tooling will allow so.
>>>>> 
>>>>> With that respect, not having automatic inheritance sounds like
>>>>> the
>>>>> better option when it comes to access rights.
>>>>> 
>>>>> Carsten
>>>>> 
>>>>>> 
>>>>>> We are talking about context aware configuration that
>>>>>> typically
>>>>>> would be applied by some runtime user that might have limited
>>>>>> write
>>>>> access
>>>>>> 
>>>>>> (just for a specific context). The assumption that who writes
>>>>>> to the
>>>>>> inheriting configuration node also has write access to the
>>>>>> subsequent
>>>>>> levels is something we cannot and should not make here. I
>>>>>> know multiple
>>>>>> customer scenarios where a central site (including global
>>> configuration)
>>>> 
>>>>> 
>>>>>> 
>>>>>> was maintained by a central marketing organization while the
>>>>>> markets
>>>>> owned
>>>>>> 
>>>>>> their own sites - so they declare inheritance (pull) instead
>>>>>> of having
>>>>> the
>>>>>> 
>>>>>> global one pushed.
>>>>>> 
>>>>>> The one thing in between that I could imagine might work
>>>>>> sufficiently
>>> is
>>>> 
>>>>> 
>>>>>> 
>>>>>> referencing (by path to property) instead of inheritance.
>>>>>> This still
>>>>>> provides the lookup of "inheritance" at runtime where changes
>>>>>> are
>>>>> reflected
>>>>>> 
>>>>>> in the lookup immediately but at the same time gets rid of
>>>>>> magic
>>>>>> inheritance rules.
>>>>>> 
>>>>>> Just a thought about an alternative in between.
>>>>>> 
>>>>>> Cheers
>>>>>> Dominik
>>>>>> 
>>>>>> On Mon, Aug 1, 2016 at 8:36 AM, Carsten Ziegeler <cziegeler@a
>>>>>> pache.org
>>>> 
>>>>> 
>>>>>> 
>>>>>> wrote:
>>>>>> 
>>>>>>> 
>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> ... if you have merging (or inheritance) then you
>>>>>>>>> change the
>>>>>>>>> attribute of a parent and this influences all childs
>>>>>>>>> and you
>>>>>>>>> have no idea what happens there...
>>>>>>>> 
>>>>>>>> We can create a felix console plugin that shows for a
>>>>>>>> given
>>>>>>>> context path and config name the value of the property
>>>>>>>> and the
>>>>>>>> path from where it was taken - that way both developers
>>>>>>>> and ops
>>>>>>>> can quickly check what's going wrong if results are
>>>>>>>> unexpected.
>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> I personally think this comes all down to tooling ...
>>>>>>>> 
>>>>>>>> So this could mean e.g. an additional maven plugin, which
>>>>>>>> handles
>>>>>>>> merging of configurations and then the runtime can work
>>>>>>>> without
>>>>>>>> merging. The problem I see with that is that
>>>>>>>> * you end up having two similar configuration model types
>>>>>>>> (one in
>>>>>>>>   the source code that supports merging and one effective
>>>>>>>> one for
>>>>>>>>   the runtime) - this makes the mechanism harder to
>>>>>>>> understand
>>>>>>>>   for everyone
>>>>>>>> * the tooling has to be created and IMHO it'll not be
>>>>>>>> easier/less
>>>>>>>>   code than creating a smarter runtime (even if we take
>>>>>>>> into
>>>>>>>>   account that we have to create the felix console plugin
>>>>>>>> to make
>>>>>>>>   it traceable)
>>>>>>>> 
>>>>>>> First of all, you need tooling anyway. It would be foolish
>>>>>>> to make
>>>>>>> these configurations without any tooling by hand. Tooling
>>>>>>> can easily
>>>>>>> be customized to anyones needs without tampering the
>>>>>>> implementation.
>>>>>>> The implementation at runtime can be simply and effective.
>>>>>>> 
>>>>>>> We had similar discussions while starting the work for the
>>>>>>> OSGi
>>>>>>> Configurator which allows you to put OSGi configurations
>>>>>>> into a bundle
>>>>>>> which then get applied at runtime. My initial proposal had
>>>>>>> all the
>>>>>>> things requested here as well (merging, inheritance etc.).
>>>>>>> It turned
>>>>>>> out that this messed up the specification and made the
>>>>>>> implementation
>>>>>>> extraordinary complicated. While moving this into the
>>>>>>> tooling which
>>>>>>> creates the bundles in the first place solves all the
>>>>>>> problems.
>>>>>>> 
>>>>>>> Just think of all the different cases you have to solve
>>>>>>> once you
>>>>>>> start support merging. And not to mention the runtime
>>>>>>> implications as
>>>>>>> you have to do the merging dynamically at runtime as well,
>>>>>>> or you
>>>>>>> start introducing all kinds of caching again. All of this
>>>>>>> is not
>>>>>>> required if you move this to the tooling level.
>>>>>>> 
>>>>>>>  Regards
>>>>>>> 
>>>>>>> Carsten
>>>>>>> 
>>>>>>> --
>>>>>>> Carsten Ziegeler
>>>>>>> Adobe Research Switzerland
>>>>>>> cziege...@apache.org
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Carsten Ziegeler
>>>>> Adobe Research Switzerland
>>>>> cziege...@apache.org
>>>>> 
>>>>> 
>>>> 
>>> 
>>> 
>>> 
>>> 
>>> --
>>> Carsten Ziegeler
>>> Adobe Research Switzerland
>>> cziege...@apache.org

Reply via email to