<div dir="ltr"><div><div><div>Guys,<br><br></div>I suppose that any solution for the plugins merge ordering issue (either alerting about error or allowing user to manually set order) would be very helpful and much better then no solution at all (like we currently have). Maybe we should create a blueprint to not miss/forget about it?<br><br></div>Regards,<br></div>Alex<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Feb 1, 2016 at 6:10 PM, Roman Prykhodchenko <span dir="ltr"><<a href="mailto:me@romcheg.me" target="_blank">me@romcheg.me</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This is basically why I proposed to allow users to set per cluster priority for every enabled plugin. That would allow users to select results they need. Putting too many logic into checks whether two plugins are incompatible is error-prone and won’t stop anyone from shooting their feet.<br>
<br>
<br>
> 29 січ. 2016 р. о 16:10 Igor Kalnitsky <<a href="mailto:ikalnitsky@mirantis.com">ikalnitsky@mirantis.com</a>> написав(ла):<br>
<div class="HOEnZb"><div class="h5">><br>
> Roman P. wrote:<br>
>> Putting extra checks will create a more fool-proof but less configurable<br>
>> software. I’d vote for letting users shoot their feet using their plugins<br>
>> but making Fuel more flexible.<br>
><br>
> I won't agree here. You see, what if two plugins wants to override the<br>
> core network role? Consider that plugin A wants to extend VIPs:<br>
><br>
> id: "mgmt/vip"<br>
> default_mapping: "management"<br>
> properties:<br>
> vip:<br>
> - name: "management"<br>
> namespace: "haproxy"<br>
> # new VIP we want to add<br>
> - name: "myvip"<br>
> namespace: "haproxy"<br>
><br>
> while plugin B wants to remove them:<br>
><br>
> id: "mgmt/vip"<br>
> default_mapping: "management"<br>
> properties:<br>
> vip: []<br>
><br>
> How do you suppose to resolve this action? We don't know in which<br>
> order they will be resolved, and I'm strongly against unpredictable<br>
> situation (especiall it may be different time-to-time and depends on<br>
> which order plugins will be selected).<br>
><br>
> Moreover, it makes a little sense to try to resolve this situation. If<br>
> two plugins change something in core, they are probably incompatible.<br>
> Manual actions are required.<br>
><br>
> So that's, basically, why I think we should warn user about<br>
> incompatible changes to core stuff. Just like we do for deployment<br>
> tasks.<br>
><br>
> - igor<br>
><br>
> On Fri, Jan 29, 2016 at 4:18 PM, Roman Prykhodchenko <<a href="mailto:me@romcheg.me">me@romcheg.me</a>> wrote:<br>
>> I would not check that. We are not talking about installing browser plugins<br>
>> when users may not know what they want. Putting extra checks will create a<br>
>> more fool-proof but less configurable software. I’d vote for letting users<br>
>> shoot their feet using their plugins but making Fuel more flexible.<br>
>><br>
>><br>
>> 29 січ. 2016 р. о 15:05 Aleksey Kasatkin <<a href="mailto:akasatkin@mirantis.com">akasatkin@mirantis.com</a>><br>
>> написав(ла):<br>
>><br>
>>> jsonpatch<br>
>><br>
>> There were +1's regarding overriding VIPs above. I'd stick with that. It is<br>
>> done for tasks now. But we will need to check conflicts between plugins<br>
>> there (as for tasks).<br>
>><br>
>><br>
>> Aleksey Kasatkin<br>
>><br>
>><br>
>> On Fri, Jan 29, 2016 at 1:23 PM, Roman Prykhodchenko <<a href="mailto:me@romcheg.me">me@romcheg.me</a>> wrote:<br>
>>><br>
>>> Frankly, I have not though about how to deal with multiple plugins yet.<br>
>>> However, what I think is that we must not restrict this too much and let<br>
>>> users configure it more flexibly even if it allows to shoot one’s foot.<br>
>>> Perhaps we can add a per-cluster priority for enabled plugins which users<br>
>>> can configure via UI, CLI or API. My other thought is that we should not<br>
>>> invent our own mechanics for changing a configuration and use an existing<br>
>>> one, say, jsonpatch. What do you guys think?<br>
>>><br>
>>> P. S. [0] is really needed for 8.0 for implementing an important epic, so<br>
>>> please check it out. If it does not break anything, lets merge it ASAP.<br>
>>><br>
>>> - romcheg<br>
>>><br>
>>> 28 січ. 2016 р. о 18:30 Aleksey Kasatkin <<a href="mailto:akasatkin@mirantis.com">akasatkin@mirantis.com</a>><br>
>>> написав(ла):<br>
>>><br>
>>> AFAIC, it is better to remove by name then. Otherwise, you do not know<br>
>>> what VIPs you are removing.<br>
>>> Another option - remove "built-in" VIPs using some specific expression.<br>
>>> Anyway, you do not know where other VIPs (VIPs of other plugins) live so<br>
>>> you cannot remove them this way.<br>
>>><br>
>>> And the order of plugins processing is not defined so there is no warranty<br>
>>> you will remove all VIPs on those network roles.<br>
>>> Seems, checking for such conflict between plugins is needed.<br>
>>><br>
>>> The original goal, actually, was to remove VIPs for controllers (or for<br>
>>> some particular node role, maybe),<br>
>>> so we should maybe find a way to do exactly this.<br>
>>><br>
>>><br>
>>><br>
>>> Aleksey Kasatkin<br>
>>><br>
>>><br>
>>> On Thu, Jan 28, 2016 at 6:28 PM, Aleksandr Didenko <<a href="mailto:adidenko@mirantis.com">adidenko@mirantis.com</a>><br>
>>> wrote:<br>
>>>><br>
>>>>> How are we handling this now for multiple plugins?<br>
>>>><br>
>>>> OK, so right now we can only add VIPs to array, we can't remove them. So<br>
>>>> overriding would disable such possibility of adding VIPs from different<br>
>>>> plugins. But with [0] patch it will be still possible to add and to remove<br>
>>>> by providing empty array. But we'll have the problem with multiple plugins<br>
>>>> in such case.<br>
>>>> I've changed my mind :) I vote for leaving as in [0] since it's less<br>
>>>> destructive comparing to what we have now.<br>
>>>><br>
>>>> Regards,<br>
>>>> Alex<br>
>>>><br>
>>>> [0] <a href="https://review.openstack.org/#/c/273169/1" rel="noreferrer" target="_blank">https://review.openstack.org/#/c/273169/1</a><br>
>>>><br>
>>>> On Thu, Jan 28, 2016 at 5:23 PM, Aleksandr Didenko<br>
>>>> <<a href="mailto:adidenko@mirantis.com">adidenko@mirantis.com</a>> wrote:<br>
>>>>><br>
>>>>> Well, with merging instead of overriding, I believe, this problem with<br>
>>>>> multiple plugins still exists, right? How are we handling this now for<br>
>>>>> multiple plugins?<br>
>>>>> Since VIPs is array I also vote for overriding, since merging it could<br>
>>>>> be a pain (how do you remove existing element during array merge?).<br>
>>>>><br>
>>>>> On Thu, Jan 28, 2016 at 5:00 PM, Aleksey Kasatkin<br>
>>>>> <<a href="mailto:akasatkin@mirantis.com">akasatkin@mirantis.com</a>> wrote:<br>
>>>>>><br>
>>>>>> Roman, please provide more details on how VIPs are overridden. And how<br>
>>>>>> do you deal with multiple plugins.<br>
>>>>>><br>
>>>>>><br>
>>>>>> Aleksey Kasatkin<br>
>>>>>><br>
>>>>>><br>
>>>>>> On Thu, Jan 28, 2016 at 5:58 PM, Aleksey Kasatkin<br>
>>>>>> <<a href="mailto:akasatkin@mirantis.com">akasatkin@mirantis.com</a>> wrote:<br>
>>>>>>><br>
>>>>>>> Good idea, overally.<br>
>>>>>>><br>
>>>>>>> How about multiple plugins? We don't have any sequence or priorities<br>
>>>>>>> between them.<br>
>>>>>>> What if one plugin assumes that VIP is present but other one wants to<br>
>>>>>>> remove it?<br>
>>>>>>><br>
>>>>>>><br>
>>>>>>> Aleksey Kasatkin<br>
>>>>>>><br>
>>>>>>><br>
>>>>>>> On Thu, Jan 28, 2016 at 4:02 PM, Sergii Golovatiuk<br>
>>>>>>> <<a href="mailto:sgolovatiuk@mirantis.com">sgolovatiuk@mirantis.com</a>> wrote:<br>
>>>>>>>><br>
>>>>>>>> +1 to overriding VIPs<br>
>>>>>>>><br>
>>>>>>>> --<br>
>>>>>>>> Best regards,<br>
>>>>>>>> Sergii Golovatiuk,<br>
>>>>>>>> Skype #golserge<br>
>>>>>>>> IRC #holser<br>
>>>>>>>><br>
>>>>>>>> On Thu, Jan 28, 2016 at 12:04 PM, Vladimir Kuklin<br>
>>>>>>>> <<a href="mailto:vkuklin@mirantis.com">vkuklin@mirantis.com</a>> wrote:<br>
>>>>>>>>><br>
>>>>>>>>> +1 to overriding VIPs<br>
>>>>>>>>><br>
>>>>>>>>> On Thu, Jan 28, 2016 at 1:43 PM, Roman Prykhodchenko <<a href="mailto:me@romcheg.me">me@romcheg.me</a>><br>
>>>>>>>>> wrote:<br>
>>>>>>>>>><br>
>>>>>>>>>> Folks,<br>
>>>>>>>>>><br>
>>>>>>>>>> currently merge policy for network roles only allows to add new<br>
>>>>>>>>>> VIPs to already existing roles [1]. If a plugin supplies a VIP with a name<br>
>>>>>>>>>> that already exists but with different parameters, Nailgun will not allow to<br>
>>>>>>>>>> do that. We faced a need to override configuration of several VIPs by<br>
>>>>>>>>>> completely removing them from network roles by supplying something like [2].<br>
>>>>>>>>>> To enable that I’ve made a temporary workaround [3] to the merging policy<br>
>>>>>>>>>> that only handles one cornerstone.<br>
>>>>>>>>>><br>
>>>>>>>>>> I’ve talked to ikalnitsky and we realized that this functionality<br>
>>>>>>>>>> of merging new VIPs from plugins to an existing network role is actually<br>
>>>>>>>>>> wrong and should be replaced by complete overriding. Let’s discuss this<br>
>>>>>>>>>> possibility here.<br>
>>>>>>>>>><br>
>>>>>>>>>><br>
>>>>>>>>>> References:<br>
>>>>>>>>>><br>
>>>>>>>>>> 1.<br>
>>>>>>>>>> <a href="https://github.com/openstack/fuel-web/blob/master/nailgun/nailgun/policy/merge.py#L55" rel="noreferrer" target="_blank">https://github.com/openstack/fuel-web/blob/master/nailgun/nailgun/policy/merge.py#L55</a><br>
>>>>>>>>>> 2. <a href="http://xsnippet.org/361361/" rel="noreferrer" target="_blank">http://xsnippet.org/361361/</a><br>
>>>>>>>>>> 3. <a href="https://review.openstack.org/#/c/273169/1" rel="noreferrer" target="_blank">https://review.openstack.org/#/c/273169/1</a><br>
>>>>>>>>>><br>
>>>>>>>>>><br>
>>>>>>>>>> - romcheg<br>
>>>>>>>>>><br>
>>>>>>>>>><br>
>>>>>>>>>><br>
>>>>>>>>>> __________________________________________________________________________<br>
>>>>>>>>>> OpenStack Development Mailing List (not for usage questions)<br>
>>>>>>>>>> Unsubscribe:<br>
>>>>>>>>>> <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
>>>>>>>>>> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
>>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>>>> --<br>
>>>>>>>>> Yours Faithfully,<br>
>>>>>>>>> Vladimir Kuklin,<br>
>>>>>>>>> Fuel Library Tech Lead,<br>
>>>>>>>>> Mirantis, Inc.<br>
>>>>>>>>> <a href="tel:%2B7%20%28495%29%20640-49-04" value="+74956404904">+7 (495) 640-49-04</a><br>
>>>>>>>>> <a href="tel:%2B7%20%28926%29%20702-39-68" value="+79267023968">+7 (926) 702-39-68</a><br>
>>>>>>>>> Skype kuklinvv<br>
>>>>>>>>> 35bk3, Vorontsovskaya Str.<br>
>>>>>>>>> Moscow, Russia,<br>
>>>>>>>>> <a href="http://www.mirantis.com" rel="noreferrer" target="_blank">www.mirantis.com</a><br>
>>>>>>>>> <a href="http://www.mirantis.ru" rel="noreferrer" target="_blank">www.mirantis.ru</a><br>
>>>>>>>>> <a href="mailto:vkuklin@mirantis.com">vkuklin@mirantis.com</a><br>
>>>>>>>>><br>
>>>>>>>>><br>
>>>>>>>>> __________________________________________________________________________<br>
>>>>>>>>> OpenStack Development Mailing List (not for usage questions)<br>
>>>>>>>>> Unsubscribe:<br>
>>>>>>>>> <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
>>>>>>>>> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
>>>>>>>>><br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> __________________________________________________________________________<br>
>>>>>>>> OpenStack Development Mailing List (not for usage questions)<br>
>>>>>>>> Unsubscribe:<br>
>>>>>>>> <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
>>>>>>>> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
>>>>>>>><br>
>>>>>>><br>
>>>>>><br>
>>>>>><br>
>>>>>><br>
>>>>>> __________________________________________________________________________<br>
>>>>>> OpenStack Development Mailing List (not for usage questions)<br>
>>>>>> Unsubscribe:<br>
>>>>>> <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
>>>>>> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
>>>>>><br>
>>>>><br>
>>>><br>
>>>><br>
>>>><br>
>>>> __________________________________________________________________________<br>
>>>> OpenStack Development Mailing List (not for usage questions)<br>
>>>> Unsubscribe:<br>
>>>> <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
>>>> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
>>>><br>
>>><br>
>>> __________________________________________________________________________<br>
>>> OpenStack Development Mailing List (not for usage questions)<br>
>>> Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
>>> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
>>><br>
>>><br>
>>><br>
>>> __________________________________________________________________________<br>
>>> OpenStack Development Mailing List (not for usage questions)<br>
>>> Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
>>> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
>>><br>
>><br>
>> __________________________________________________________________________<br>
>> OpenStack Development Mailing List (not for usage questions)<br>
>> Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
>> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
>><br>
>><br>
>><br>
>> __________________________________________________________________________<br>
>> OpenStack Development Mailing List (not for usage questions)<br>
>> Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
>> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
>><br>
><br>
> __________________________________________________________________________<br>
> OpenStack Development Mailing List (not for usage questions)<br>
> Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br>
</div></div><br>__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br></blockquote></div><br></div>