I'm currently working on a Foreman plugin to use IBM PowerVM instances as compute resources, and have run into the following problem when implementing the network interface form:
Following the guide at 1, I put my additional network parameters in
>`foreman_powervm/app/views/compute_resources_vms/form/foreman_powervm/_network.html.erb|', like this:
<%= number_f f, :my_param
:label => _("Foo") %>
I now expected :my_param to be available in ForemanPowerVM::PowerVM#create_vm (which is my subclass of ComputeResource), in the form of args['interfaces_attributes'][i]['my_param'], but it is not there (even though the foreman log shows that my_param was in fact recieved as a POST parameter).
to the Plugin.register block in my Engine class, but to no avail.
After a bit of digging around in the foreman code I managed to "fix" this by adding :my_param to the :compute_attributes entry in Foreman::Controller::Parameters::NicBase#add_nic_base_params_filter (file `foreman_app/controllers/concerns/foreman/controller/parameters/nic_base.rb:27').
How do I keep my parameter from being filtered without altering foreman code? What is the correct way to register parameters, as parameter_filter doesnt seem to work?
I was hitting this issue recently in the rex plugin, I needed to
change the way the param is whitelisted,
from using an array, to pass it via a block like this:
···
On Thu, Oct 12, 2017 at 7:24 PM, jbm wrote:
> Hi,
>
> I'm currently working on a Foreman plugin to use IBM PowerVM instances as
> compute resources, and have run into the following problem when implementing
> the network interface form:
>
> Following the guide at [1], I put my additional network parameters in
> `foreman_powervm/app/views/compute_resources_vms/form/foreman_powervm/_network.html.erb',
> like this:
>
> <%= number_f f, :my_param
> :label => _("Foo") %>
>
> I now expected :my_param to be available in
> ForemanPowerVM::PowerVM#create_vm (which is my subclass of ComputeResource),
> in the form of args['interfaces_attributes'][i]['my_param'], but it is not
> there (even though the foreman log shows that my_param was in fact recieved
> as a POST parameter).
>
> So, as described in [2], I added
>
> parameter_filter Nic::Interface, compute_attributes: [:my_param]
>
> to the Plugin.register block in my Engine class, but to no avail.
>
>
> After a bit of digging around in the foreman code I managed to "fix" this by
> adding :my_param to the :compute_attributes entry in
> Foreman::Controller::Parameters::NicBase#add_nic_base_params_filter (file
> `foreman_app/controllers/concerns/foreman/controller/parameters/nic_base.rb:27').
>
>
> How do I keep my parameter from being filtered without altering foreman
> code? What is the correct way to register parameters, as parameter_filter
> doesnt seem to work?
>
>
> Thanks for reading and hopefully your help!
>
>
> [1]:
> http://projects.theforeman.org/projects/foreman/wiki/How_to_Create_a_Plugin#Required-views
> [2]: http://projects.theforeman.org/projects/foreman/wiki/Strong_parameters
>
> --
> jbm
>
> --
> You received this message because you are subscribed to the Google Groups
> "foreman-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to foreman-dev+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
> Hi,
>
> I was hitting this issue recently in the rex plugin, I needed to
> change the way the param is whitelisted,
> from using an array, to pass it via a block like this:
>
> https://github.com/theforeman/foreman_remote_execution/pull/276
I changed the portion to
parameter_filter Nic::Interface do |ctx|
ctx.permit compute_attributes: [:my_param]
end
but it still doesn't work. I also tried `ctx.permit :my_param', which worked neither.
I'm not sure if I transfered your solution correctly to my usecase, as you seem to be passing the NIC parameters differently than I do (I do it in app/views/compute_resources_vms/form/powervm/_network.html.erb, you in app/views/overrides/nics/_execution_interface.html.erb).
> Also, make sure you're testing it with the version of Foreman that has
> this patch
> https://github.com/theforeman/foreman/pull/4886, as it needs it to
> work properly.
I'm using the latest develop branch, so this is included
···
On 24/10/17 13:20, Ivan Necas wrote:
>
> -- Ivan
>
> On Thu, Oct 12, 2017 at 7:24 PM, jbm wrote:
>> Hi,
>>
>> I'm currently working on a Foreman plugin to use IBM PowerVM instances as
>> compute resources, and have run into the following problem when implementing
>> the network interface form:
>>
>> Following the guide at [1], I put my additional network parameters in
>> `foreman_powervm/app/views/compute_resources_vms/form/foreman_powervm/_network.html.erb',
>> like this:
>>
>> <%= number_f f, :my_param
>> :label => _("Foo") %>
>>
>> I now expected :my_param to be available in
>> ForemanPowerVM::PowerVM#create_vm (which is my subclass of ComputeResource),
>> in the form of args['interfaces_attributes'][i]['my_param'], but it is not
>> there (even though the foreman log shows that my_param was in fact recieved
>> as a POST parameter).
>>
>> So, as described in [2], I added
>>
>> parameter_filter Nic::Interface, compute_attributes: [:my_param]
>>
>> to the Plugin.register block in my Engine class, but to no avail.
>>
>>
>> After a bit of digging around in the foreman code I managed to "fix" this by
>> adding :my_param to the :compute_attributes entry in
>> Foreman::Controller::Parameters::NicBase#add_nic_base_params_filter (file
>> `foreman_app/controllers/concerns/foreman/controller/parameters/nic_base.rb:27').
>>
>>
>> How do I keep my parameter from being filtered without altering foreman
>> code? What is the correct way to register parameters, as parameter_filter
>> doesnt seem to work?
>>
>>
>> Thanks for reading and hopefully your help!
>>
>>
>> [1]:
>> http://projects.theforeman.org/projects/foreman/wiki/How_to_Create_a_Plugin#Required-views
>> [2]: http://projects.theforeman.org/projects/foreman/wiki/Strong_parameters
>>
>> --
>> jbm
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "foreman-dev" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to foreman-dev+unsubscribe@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>> Hi,
>>
>> I was hitting this issue recently in the rex plugin, I needed to
>> change the way the param is whitelisted,
>> from using an array, to pass it via a block like this:
>>
>> https://github.com/theforeman/foreman_remote_execution/pull/276
> I changed the portion to
>
> parameter_filter Nic::Interface do |ctx|
> ctx.permit compute_attributes: [:my_param]
> end
>
> but it still doesn't work. I also tried `ctx.permit :my_param', which worked neither.
>
> I'm not sure if I transfered your solution correctly to my usecase, as you seem to be passing the NIC parameters differently than I do (I do it in app/views/compute_resources_vms/form/powervm/_network.html.erb, you in app/views/overrides/nics/_execution_interface.html.erb).
>> Also, make sure you're testing it with the version of Foreman that has
>> this patch
>> Fixes #21176 - don't modify strong param filter rules by iNecas · Pull Request #4886 · theforeman/foreman · GitHub, as it needs it to
>> work properly.
> I'm using the latest develop branch, so this is included
I’m currently working on a Foreman plugin to use IBM PowerVM instances as
compute resources, and have run into the following problem when implementing
the network interface form:
Following the guide at 1, I put my additional network parameters in
`foreman_powervm/app/views/compute_resources_vms/form/foreman_powervm/_network.html.erb’,
like this:
<%= number_f f, :my_param
:label => _(“Foo”) %>
I now expected :my_param to be available in
ForemanPowerVM::PowerVM#create_vm (which is my subclass of ComputeResource),
in the form of args[‘interfaces_attributes’][i][‘my_param’], but it is not
there (even though the foreman log shows that my_param was in fact recieved
as a POST parameter).
to the Plugin.register block in my Engine class, but to no avail.
After a bit of digging around in the foreman code I managed to “fix” this by
adding :my_param to the :compute_attributes entry in
Foreman::Controller::Parameters::NicBase#add_nic_base_params_filter (file
`foreman_app/controllers/concerns/foreman/controller/parameters/nic_base.rb:27’).
How do I keep my parameter from being filtered without altering foreman
code? What is the correct way to register parameters, as parameter_filter
doesnt seem to work?
Just so I understand you right: Are you saying that it is a missing feature in foreman that one can not add custom parameters in the compute_attributes'? If so, did I understand the "How to Create a Plugin" guide wrong? Iscompute_attributes' not the correct way to add custom provider specific parameters to the NIC creation (by adding them to `app/views/compute_resources_vms/form/foreman_powervm/_network.html.erb')? What is the correct way?
If the only way to do this is to implement your suggested change in foreman, I will do that, but since I don't know how fast I could get this patch to the production system I want to run my plugin on I'd prefer a solution that works without altering foreman and would be happy for a suggestion.
···
On 24/10/17 17:42, Ivan Necas wrote:
> On Tue, Oct 24, 2017 at 3:16 PM, jbm wrote:
>> On 24/10/17 13:20, Ivan Necas wrote:
>>> Hi,
>>>
>>> I was hitting this issue recently in the rex plugin, I needed to
>>> change the way the param is whitelisted,
>>> from using an array, to pass it via a block like this:
>>>
>>> https://github.com/theforeman/foreman_remote_execution/pull/276
>> I changed the portion to
>>
>> parameter_filter Nic::Interface do |ctx|
>> ctx.permit compute_attributes: [:my_param]
>> end
>>
>> but it still doesn't work. I also tried `ctx.permit :my_param', which worked neither.
>>
>> I'm not sure if I transfered your solution correctly to my usecase, as you seem to be passing the NIC parameters differently than I do (I do it in app/views/compute_resources_vms/form/powervm/_network.html.erb, you in app/views/overrides/nics/_execution_interface.html.erb).
>>> Also, make sure you're testing it with the version of Foreman that has
>>> this patch
>>> https://github.com/theforeman/foreman/pull/4886, as it needs it to
>>> work properly.
>> I'm using the latest develop branch, so this is included
> Oh, I haven't realized you need to put it under the
> `compute_attributes`. In that case, I think
> you would need to convert the `compute_attributes` in
> (https://github.com/theforeman/foreman/blob/c6760930cf08a4b584b75df8a621092dd787da01/app/controllers/concerns/foreman/controller/parameters/host_base.rb#L42)
> to use filter
> (such as Nic::ComputeAttribute), similarly as we have in
> the host (https://github.com/theforeman/foreman/blob/c6760930cf08a4b584b75df8a621092dd787da01/app/controllers/concerns/foreman/controller/parameters/host_base.rb#L42)
> and then, define the parameter_filter on `Nic::ComputeAttribute`)
--
jbm
> - Ivan
>
>>> -- Ivan
>>>
>>> On Thu, Oct 12, 2017 at 7:24 PM, jbm wrote:
>>>> Hi,
>>>>
>>>> I'm currently working on a Foreman plugin to use IBM PowerVM instances as
>>>> compute resources, and have run into the following problem when implementing
>>>> the network interface form:
>>>>
>>>> Following the guide at [1], I put my additional network parameters in
>>>> `foreman_powervm/app/views/compute_resources_vms/form/foreman_powervm/_network.html.erb',
>>>> like this:
>>>>
>>>> <%= number_f f, :my_param
>>>> :label => _("Foo") %>
>>>>
>>>> I now expected :my_param to be available in
>>>> ForemanPowerVM::PowerVM#create_vm (which is my subclass of ComputeResource),
>>>> in the form of args['interfaces_attributes'][i]['my_param'], but it is not
>>>> there (even though the foreman log shows that my_param was in fact recieved
>>>> as a POST parameter).
>>>>
>>>> So, as described in [2], I added
>>>>
>>>> parameter_filter Nic::Interface, compute_attributes: [:my_param]
>>>>
>>>> to the Plugin.register block in my Engine class, but to no avail.
>>>>
>>>>
>>>> After a bit of digging around in the foreman code I managed to "fix" this by
>>>> adding :my_param to the :compute_attributes entry in
>>>> Foreman::Controller::Parameters::NicBase#add_nic_base_params_filter (file
>>>> `foreman_app/controllers/concerns/foreman/controller/parameters/nic_base.rb:27').
>>>>
>>>>
>>>> How do I keep my parameter from being filtered without altering foreman
>>>> code? What is the correct way to register parameters, as parameter_filter
>>>> doesnt seem to work?
>>>>
>>>>
>>>> Thanks for reading and hopefully your help!
>>>>
>>>>
>>>> [1]:
>>>> http://projects.theforeman.org/projects/foreman/wiki/How_to_Create_a_Plugin#Required-views
>>>> [2]: http://projects.theforeman.org/projects/foreman/wiki/Strong_parameters
>>>>
>>>> --
>>>> jbm
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google Groups
>>>> "foreman-dev" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send an
>>>> email to foreman-dev+unsubscribe@googlegroups.com.
>>>> For more options, visit https://groups.google.com/d/optout.
>> --
>> You received this message because you are subscribed to the Google Groups "foreman-dev" group.
>> To unsubscribe from this group and stop receiving emails from it, send an email to foreman-dev+unsubscribe@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
I've not found a compute resource plugin, that would extend the
network interface in this way, which is probably the reason
why you're hitting it first. I believe it's the correct way, but gap
in the foreman core.
I know it's sub-optimal, but wouldn't be an option to re-use some of
the existing params allowed for
compute attributes on network? See
– Ivan
···
On Wed, Oct 25, 2017 at 6:06 PM, jbm wrote:
> On 24/10/17 17:42, Ivan Necas wrote:
>> On Tue, Oct 24, 2017 at 3:16 PM, jbm wrote:
>>> On 24/10/17 13:20, Ivan Necas wrote:
>>>> Hi,
>>>>
>>>> I was hitting this issue recently in the rex plugin, I needed to
>>>> change the way the param is whitelisted,
>>>> from using an array, to pass it via a block like this:
>>>>
>>>> https://github.com/theforeman/foreman_remote_execution/pull/276
>>> I changed the portion to
>>>
>>> parameter_filter Nic::Interface do |ctx|
>>> ctx.permit compute_attributes: [:my_param]
>>> end
>>>
>>> but it still doesn't work. I also tried `ctx.permit :my_param', which worked neither.
>>>
>>> I'm not sure if I transfered your solution correctly to my usecase, as you seem to be passing the NIC parameters differently than I do (I do it in app/views/compute_resources_vms/form/powervm/_network.html.erb, you in app/views/overrides/nics/_execution_interface.html.erb).
>>>> Also, make sure you're testing it with the version of Foreman that has
>>>> this patch
>>>> https://github.com/theforeman/foreman/pull/4886, as it needs it to
>>>> work properly.
>>> I'm using the latest develop branch, so this is included
>> Oh, I haven't realized you need to put it under the
>> `compute_attributes`. In that case, I think
>> you would need to convert the `compute_attributes` in
>> (https://github.com/theforeman/foreman/blob/c6760930cf08a4b584b75df8a621092dd787da01/app/controllers/concerns/foreman/controller/parameters/host_base.rb#L42)
>> to use filter
>> (such as Nic::ComputeAttribute), similarly as we have in
>> the host (https://github.com/theforeman/foreman/blob/c6760930cf08a4b584b75df8a621092dd787da01/app/controllers/concerns/foreman/controller/parameters/host_base.rb#L42)
>> and then, define the parameter_filter on `Nic::ComputeAttribute`)
> Just so I understand you right: Are you saying that it is a missing feature in foreman that one can not add custom parameters in the `compute_attributes'? If so, did I understand the "How to Create a Plugin" guide wrong? Is `compute_attributes' *not* the correct way to add custom provider specific parameters to the NIC creation (by adding them to `app/views/compute_resources_vms/form/foreman_powervm/_network.html.erb')? What is the correct way?
>
> If the only way to do this is to implement your suggested change in foreman, I will do that, but since I don't know how fast I could get this patch to the production system I want to run my plugin on I'd prefer a solution that works without altering foreman and would be happy for a suggestion.
>
> --
> jbm
>> - Ivan
>>
>>>> -- Ivan
>>>>
>>>> On Thu, Oct 12, 2017 at 7:24 PM, jbm wrote:
>>>>> Hi,
>>>>>
>>>>> I'm currently working on a Foreman plugin to use IBM PowerVM instances as
>>>>> compute resources, and have run into the following problem when implementing
>>>>> the network interface form:
>>>>>
>>>>> Following the guide at [1], I put my additional network parameters in
>>>>> `foreman_powervm/app/views/compute_resources_vms/form/foreman_powervm/_network.html.erb',
>>>>> like this:
>>>>>
>>>>> <%= number_f f, :my_param
>>>>> :label => _("Foo") %>
>>>>>
>>>>> I now expected :my_param to be available in
>>>>> ForemanPowerVM::PowerVM#create_vm (which is my subclass of ComputeResource),
>>>>> in the form of args['interfaces_attributes'][i]['my_param'], but it is not
>>>>> there (even though the foreman log shows that my_param was in fact recieved
>>>>> as a POST parameter).
>>>>>
>>>>> So, as described in [2], I added
>>>>>
>>>>> parameter_filter Nic::Interface, compute_attributes: [:my_param]
>>>>>
>>>>> to the Plugin.register block in my Engine class, but to no avail.
>>>>>
>>>>>
>>>>> After a bit of digging around in the foreman code I managed to "fix" this by
>>>>> adding :my_param to the :compute_attributes entry in
>>>>> Foreman::Controller::Parameters::NicBase#add_nic_base_params_filter (file
>>>>> `foreman_app/controllers/concerns/foreman/controller/parameters/nic_base.rb:27').
>>>>>
>>>>>
>>>>> How do I keep my parameter from being filtered without altering foreman
>>>>> code? What is the correct way to register parameters, as parameter_filter
>>>>> doesnt seem to work?
>>>>>
>>>>>
>>>>> Thanks for reading and hopefully your help!
>>>>>
>>>>>
>>>>> [1]:
>>>>> http://projects.theforeman.org/projects/foreman/wiki/How_to_Create_a_Plugin#Required-views
>>>>> [2]: http://projects.theforeman.org/projects/foreman/wiki/Strong_parameters
>>>>>
>>>>> --
>>>>> jbm
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google Groups
>>>>> "foreman-dev" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send an
>>>>> email to foreman-dev+unsubscribe@googlegroups.com.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>> --
>>> You received this message because you are subscribed to the Google Groups "foreman-dev" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an email to foreman-dev+unsubscribe@googlegroups.com.
>>> For more options, visit https://groups.google.com/d/optout.
>
> Hi,
>
> I've not found a compute resource plugin, that would extend the
> network interface in this way, which is probably the reason
> why you're hitting it first. I believe it's the correct way, but gap
> in the foreman core.
Hm. The change you suggested doesn't look to complicated, I'll see if can't implement that. I don't know when I'll get to it, though, since I will also use your workaround.
> I know it's sub-optimal, but wouldn't be an option to re-use some of
> the existing params allowed for
> compute attributes on network? See
> foreman/app/controllers/concerns/foreman/controller/parameters/nic_base.rb at 18780e5cb7f7d0fbcf97b99426217730b1a54635 · theforeman/foreman · GitHub
Yes, I guess that'll have to do for now
> – Ivan
Thanks for your help and suggestions!
I was hitting this issue recently in the rex plugin, I needed to
change the way the param is whitelisted,
from using an array, to pass it via a block like this:
parameter_filter Nic::Interface do |ctx|
ctx.permit compute_attributes: [:my_param]
end
but it still doesn’t work. I also tried `ctx.permit :my_param’, which worked neither.
I’m not sure if I transfered your solution correctly to my usecase, as you seem to be passing the NIC parameters differently than I do (I do it in app/views/compute_resources_vms/form/powervm/_network.html.erb, you in app/views/overrides/nics/_execution_interface.html.erb).
If the only way to do this is to implement your suggested change in foreman, I will do that, but since I don’t know how fast I could get this patch to the production system I want to run my plugin on I’d prefer a solution that works without altering foreman and would be happy for a suggestion.
I’m currently working on a Foreman plugin to use IBM PowerVM instances as
compute resources, and have run into the following problem when implementing
the network interface form:
Following the guide at 1, I put my additional network parameters in
`foreman_powervm/app/views/compute_resources_vms/form/foreman_powervm/_network.html.erb’,
like this:
<%= number_f f, :my_param
:label => _(“Foo”) %>
I now expected :my_param to be available in
ForemanPowerVM::PowerVM#create_vm (which is my subclass of ComputeResource),
in the form of args[‘interfaces_attributes’][i][‘my_param’], but it is not
there (even though the foreman log shows that my_param was in fact recieved
as a POST parameter).
to the Plugin.register block in my Engine class, but to no avail.
After a bit of digging around in the foreman code I managed to “fix” this by
adding :my_param to the :compute_attributes entry in
Foreman::Controller::Parameters::NicBase#add_nic_base_params_filter (file
`foreman_app/controllers/concerns/foreman/controller/parameters/nic_base.rb:27’).
How do I keep my parameter from being filtered without altering foreman
code? What is the correct way to register parameters, as parameter_filter
doesnt seem to work?