voxpupuli/puppet-corosync

Configuring unicast mode is confusing

Opened this issue · 1 comments

Affected Puppet, Ruby, OS and module versions/distributions

  • Puppet: 5.5.22
  • Ruby: 2.4.10p364
  • Distribution: CentOS 7.9.2008
  • Module version: 7.0.0

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

class pg {

  class { 'corosync':
    bind_address   => $facts['networking']['interfaces']['eth0']['ip'],
    cluster_name   => 'pg12',
    enable_secauth => false,
    set_votequorum => true,
    quorum_members => [ 'pgsql01', 'pgsql02' ],
    unicast_addresses => [ '192.168.100.200', '192.168.100.212']
  }

  corosync::service { 'pacemaker':
    version => '0',
  }

  cs_property { 'stonith-enabled':
    value => 'false',
  }

  cs_property { 'no-quorum-policy':
    value => 'ignore',
  }
}

What are you seeing

In order to have transport set to udpu it it necessary to populate unicast_addresses but these values are not actually populated into corosync.conf when set_votequorom => true which is the default setting on Red Hat (and derivatives).

What behaviour did you expect instead

It seems confusing to set a value which is not used directly but instead used to infer another value. I could put complete rubbish in unicast_addresses and still get the same output. Should there not be an explicit transport param or at least some way to explicit state you want to use udpu transport?

Output log

Any additional information you'd like to impart

I agree with you, this system is strange. I also have a udpu system with several rings (corosync 2.4.3 and pacemake 1.1.18). However, I need to declare a bindnetaddr or pacemaker have a lot of trouble to run.
The disabling of member have been introduced in #430 to resolve #421. @btravouillon has stated that member are not needed (#422 (comment)) which is confirmed by corosync/corosync@de70c00.
However, I have found useful to put the bindnetaddress outside of the set_votequorum condition, so to invert those lines:

bindnetaddr: <%= Array(@bind_address)[interface] %>
and
Is there a reason why corosync need this declaration?