Get pubsub nodes from puppetdb
[mirror/dsa-puppet.git] / modules / roles / manifests / pubsub.pp
index 2b4abf9..20554ec 100644 (file)
 class roles::pubsub {
-       include roles::pubsub::params
-
-       $cluster_cookie = $roles::pubsub::params::cluster_cookie
-       $admin_password = $roles::pubsub::params::admin_password
-       $ftp_password   = $roles::pubsub::params::ftp_password
-       $cc_master      = rainier
-       $cc_secondary   = rapoport
-
-       class { 'rabbitmq':
-               cluster           => true,
-               clustermembers    => [
-                       "rabbit@${cc_master}",
-                       "rabbit@${cc_secondary}",
-               ],
-               clustercookie     => '8r17so6o1s124ns49sr08n0o24342160',
-               delete_guest_user => true,
-               master            => $cc_master,
-       }
-
-       user { 'rabbitmq':
-               groups => 'ssl-cert'
-       }
-
-       concat::fragment { 'rabbit_ssl':
-               target => '/etc/rabbitmq/rabbitmq.config',
-               order  => 35,
-               source => 'puppet:///modules/roles/pubsub/rabbitmq.config'
-       }
-
-       rabbitmq_user { 'admin':
-               admin    => true,
-               password => $admin_password,
-               provider => 'rabbitmqctl',
-       }
-
-       rabbitmq_user { 'ftpteam':
-               admin    => true,
-               password => $ftp_password,
-               provider => 'rabbitmqctl',
-       }
-
-       rabbitmq_vhost { 'packages':
-               ensure   => present,
-               provider => 'rabbitmqctl',
-       }
-
-       rabbitmq_user_permissions { 'admin@packages':
-               configure_permission => '.*',
-               read_permission      => '.*',
-               write_permission     => '.*',
-               provider             => 'rabbitmqctl',
-               require              => [
-                       Rabbitmq_user['admin'],
-                       Rabbitmq_vhost['packages']
-               ]
-       }
-
-       rabbitmq_user_permissions { 'admin@/':
-               configure_permission => '.*',
-               read_permission      => '.*',
-               write_permission     => '.*',
-               provider             => 'rabbitmqctl',
-               require              => Rabbitmq_user['admin']
-       }
-
-       rabbitmq_user_permissions { 'ftpteam@packages':
-               configure_permission => '.*',
-               read_permission      => '.*',
-               write_permission     => '.*',
-               provider             => 'rabbitmqctl',
-               require              => [
-                       Rabbitmq_user['ftpteam'],
-                       Rabbitmq_vhost['packages']
-               ]
-       }
-
-       rabbitmq_policy { 'mirror-packages':
-               vhost   => 'packages',
-               match   => '.*',
-               policy  => '{"ha-mode":"all"}',
-               require => Rabbitmq_vhost['packages']
-       }
-
-       rabbitmq_plugin { 'rabbitmq_management':
-               ensure   => present,
-               provider => 'rabbitmqplugins',
-               require  => Package['rabbitmq-server'],
-               notify   => Service['rabbitmq-server']
-       }
-       rabbitmq_plugin { 'rabbitmq_management_agent':
-               ensure   => present,
-               provider => 'rabbitmqplugins',
-               require  => Package['rabbitmq-server'],
-               notify   => Service['rabbitmq-server']
-       }
-       rabbitmq_plugin { 'rabbitmq_tracing':
-               ensure   => present,
-               provider => 'rabbitmqplugins',
-               require  => Package['rabbitmq-server'],
-               notify   => Service['rabbitmq-server']
-       }
-       rabbitmq_plugin { 'rabbitmq_management_visualiser':
-               ensure   => present,
-               provider => 'rabbitmqplugins',
-               require  => Package['rabbitmq-server'],
-               notify   => Service['rabbitmq-server']
-       }
-
-       @ferm::rule { 'rabbitmq':
-               description => 'rabbitmq connections',
-               rule        => '&SERVICE_RANGE(tcp, 5671, $HOST_DEBIAN_V4)'
-       }
-
-       @ferm::rule { 'rabbitmq-v6':
-               domain      => 'ip6',
-               description => 'rabbitmq connections',
-               rule        => '&SERVICE_RANGE(tcp, 5671, $HOST_DEBIAN_V6)'
-       }
-
-       if $::hostname == $cc_master {
-               $you = $cc_secondary
-       } else {
-               $you = $cc_master
-       }
-
-       @ferm::rule { 'rabbitmq_cluster':
-               domain      => '(ip ip6)',
-               description => 'rabbitmq cluster connections',
-               rule        => "proto tcp mod state state (NEW) saddr (${you}) ACCEPT"
-       }
-       @ferm::rule { 'rabbitmq_mgmt':
-               description => 'rabbitmq cluster connections',
-               rule        => '&SERVICE_RANGE(tcp, 15672, $DSA_IPS)'
-       }
-       @ferm::rule { 'rabbitmq_mgmt_v6':
-               domain      => '(ip6)',
-               description => 'rabbitmq cluster connections',
-               rule        => '&SERVICE_RANGE(tcp, 15672, $DSA_V6_IPS)'
-       }
+  include roles::pubsub::params
+  include roles::pubsub::entities
+
+  $cluster_cookie  = $roles::pubsub::params::cluster_cookie
+
+  # Get the fact named hostname from all nodes in puppetdb with class Roles::Pubsub
+  $query = 'facts { name = "hostname" and resources { type = "Class" and title = "Roles::Pubsub" } }'
+  $cluster_nodes = sort(puppetdb_query($query).map |$value| { $value["value"] })
+
+  class { 'rabbitmq':
+    config_cluster    => true,
+    cluster_nodes     => $cluster_nodes,
+    cluster_node_type => 'disc',
+    erlang_cookie     => '8r17so6o1s124ns49sr08n0o24342160',
+    delete_guest_user => true,
+    ssl               => true,
+    ssl_cacert        => '/etc/ssl/debian/certs/ca.crt',
+    ssl_cert          => '/etc/ssl/debian/certs/thishost-server.crt',
+    ssl_key           => '/etc/ssl/private/thishost-server.key',
+    ssl_port          => 5671,
+    ssl_verify        => 'verify_none',
+    repos_ensure      => false,
+  }
+
+  user { 'rabbitmq':
+    groups => 'ssl-cert'
+  }
+
+  ferm::rule { 'rabbitmq':
+    description => 'rabbitmq connections',
+    domain      => '(ip ip6)',
+    rule        => '&SERVICE_RANGE(tcp, 5671, $HOST_DEBIAN)'
+  }
+
+  @@ferm::rule::simple { "pubsub-cluster-from-${::fqdn}":
+    tag   => 'roles::pubsub::intra-cluster',
+    saddr => $base::public_addresses,
+  }
+  Ferm::Rule::Simple <<| tag == 'roles::pubsub::intra-cluster' |>>
 }