# @summary # Message broker for the communication module. # # Sets up the message broker for the communication module in the # new exam system. # # class aes::broker { $broker_user = broker $broker_group = $broker_user $broker_home = "/srv/${broker_user}" $broker_service = 'aes_broker' case fact('os.family') { 'RedHat': { package { [ 'boost', 'boost-devel', ]: ensure => installed, } firewalld_custom_service { 'aes-broker': description => 'Authentic Examination System server', ports => [ { port => '31337', protocol => 'tcp' }, ], } @firewalld_rich_rule { default: service => 'aes-broker', log => false; 'Accept aes-broker in LiU networks without logging IPv4': zone => 'liu', family => 'ipv4', action => 'accept'; 'Accept aes-broker in LiU networks without logging IPv6': zone => 'liu', family => 'ipv6', action => 'accept'; } } 'CentOS': { # Sadly, it does not seem like we can not only install asio, so we need # to install the Boost as a whole. package { [ 'boost169', 'boost169-devel', ]: ensure => installed, } ::server_firewall::rules_file { '45-permit_aes_broker.rules': # lint:ignore:strict_indent heredoc failing... content => @(EOF), service aesbroker is tcp/31337 policy chain INPUT is accept service:aesbroker from class:liu-nets end policy |-EOF # lint:endignore:strict_indent } } default: { fail("${module_name} - Not supported for family ${fact('os.family')}.") } } # Figure out which certificate to use based on the hostname. if $facts[networking][fqdn] == 'aes.edu.liu.se' { $server_type = 'production' } elsif $facts[networking][fqdn] == 'aes-devel.edu.liu.se' { $server_type = 'devel' } else { $server_type = undef } user { $broker_user : ensure => present, home => $broker_home, comment => 'Message broker for AES', managehome => false, membership => inclusive, system => true, shell => '/sbin/nologin', } file { $broker_home : ensure => directory, owner => $broker_user, group => $broker_group, mode => '0755', } file { "/etc/systemd/system/${broker_service}.service" : ensure => file, owner => root, group => root, mode => '0644', source => "puppet:///modules/${module_name}/broker/broker.service", } file { "${broker_home}/on_update.sh" : ensure => file, owner => $broker_user, group => $broker_group, mode => '0755', source => "puppet:///modules/${module_name}/broker/on_update.sh", } file { "${broker_home}/ssl" : ensure => directory, owner => $broker_user, group => $broker_group, mode => '0700', } file { "${broker_home}/ssl/cert.pem" : ensure => file, owner => $broker_user, group => $broker_group, mode => '0700', source => "puppet:///modules/${module_name}/broker/cert/${server_type}_cert.pem", } file { "${broker_home}/ssl/key.pem" : ensure => file, owner => $broker_user, group => $broker_group, mode => '0700', source => "puppet:///modules/${module_name}/broker/cert/${server_type}_key.pem", } file { "${broker_home}/ssl/password" : ensure => file, owner => $broker_user, group => $broker_group, mode => '0700', source => "puppet:///modules/${module_name}/broker/cert/${server_type}_password", } vcsrepo { "${broker_home}/src": ensure => latest, provider => git, source => 'https://oauth2:F-agHaRXCdyFy38q4c-N@gitlab.liu.se/upp-aes/communication.git', revision => $server_type, owner => $broker_user, group => $broker_group, notify => Exec['compile-broker-repo'], } exec { 'compile-broker-repo': user => $broker_user, group => $broker_group, cwd => $broker_home, path => '/bin:/usr/bin', environment => ["HOME=${broker_home}"], command => "${broker_home}/on_update.sh", require => File["${broker_home}/on_update.sh"], creates => "${broker_home}/bin/broker", notify => Service[$broker_service], } service { $broker_service : ensure => 'running', enable => true, } }