voxpupuli/puppet-rabbitmq

Problem removing (ensure => 'absent') federation upstream

kriptor opened this issue · 1 comments

Affected Puppet, Ruby, OS and module versions/distributions

How to reproduce (e.g Puppet code you use)

  1. create federation upstream (ensure: present) ... upstream gets created:
rabbitmq_parameter { 'nonprod_settlement_develop@/develop':
  component_name => 'federation-upstream',
  ensure => 'present',
  value => {
    'uri' => 'amqps://fed_user:fed_pass@upstream_server:5672/%2fdevelop',
    'ack-mode' => 'on-confirm',
    'max-hops' => '10',
    'trust-user-id' => false,
  },
}
  1. remove federation upstream (ensure: absent) ... you receive error removing inexistent shovel:
rabbitmq_parameter { 'nonprod_settlement_develop@/develop':
  component_name => 'federation-upstream',
  ensure => 'absent',
  value => {
    'uri' => 'amqps://fed_user:fed_pass@upstream_server:5672/%2fdevelop',
    'ack-mode' => 'on-confirm',
    'max-hops' => '10',
    'trust-user-id' => false,
  },
}

What are you seeing

It looks like the removal operation tries to remove shovel instead of federation upstream.

What behaviour did you expect instead

I expected federation upstream named 'nonprod_settlement_develop' inside vhost '/develop' to be removed from RabbitMQ cluster... and not observing an attempt to remove shovel with the same name inside the same vhost.

Output log

Error: Execution of '/usr/sbin/rabbitmqctl clear_parameter -p /develop shovel nonprod_settlement_develop' returned 69: Clearing runtime parameter "nonprod_settlement_develop" for component "shovel" on vhost "/develop" ...
Error:
Parameter does not exist
Error: /Stage[main]/Messagebroker::Rabbitmq/Rabbitmq_parameter[nonprod_settlement_develop@/develop]/ensure: change from 'present' to 'absent' failed: Execution of '/usr/sbin/rabbitmqctl clear_parameter -p /develop shovel nonprod_settlement_develop' returned 69: Clearing runtime parameter "nonprod_settlement_develop" for component "shovel" on vhost "/develop" ...
Error:
Parameter does not exist

Any additional information you'd like to impart

I have not one shovel defined anywhere. We use RabbitMQ 3.8.3 with Erlang 22.0.7.

fiksn commented

The bug lies here

rabbitmqctl('clear_parameter', '-p', vhost, 'shovel', key)

I suppose 'shovel' should be resource[:component_name]. Then there needs to be a test case here: https://github.com/voxpupuli/puppet-rabbitmq/blob/0bb4e33d8e35184c77a52ae910ea15955640e2cf/spec/unit/puppet/provider/rabbitmq_parameter/rabbitmqctl_spec.rb. I am not really fluent with Ruby but I can try to create some pull request.