Skip to content
Snippets Groups Projects
broker.pp 4.46 KiB
Newer Older
  • Learn to ignore specific revisions
  • # @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
    
    Magnus Svensson's avatar
    Magnus Svensson committed
      $broker_group = $broker_user
    
      $broker_home = "/srv/${broker_user}"
    
    Magnus Svensson's avatar
    Magnus Svensson committed
      $broker_service = 'aes_broker'
    
    Klas Arvidsson's avatar
    Klas Arvidsson committed
      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' {
    
    Magnus Svensson's avatar
    Magnus Svensson committed
        $server_type = 'production'
    
      } elsif $facts[networking][fqdn] == 'aes-devel.edu.liu.se' {
    
    Magnus Svensson's avatar
    Magnus Svensson committed
        $server_type = 'devel'
    
    Magnus Svensson's avatar
    Magnus Svensson committed
      user { $broker_user :
        ensure     => present,
        home       => $broker_home,
        comment    => 'Message broker for AES',
    
        managehome => false,
        membership => inclusive,
    
    Magnus Svensson's avatar
    Magnus Svensson committed
        system     => true,
        shell      => '/sbin/nologin',
    
    Magnus Svensson's avatar
    Magnus Svensson committed
      file { $broker_home :
    
    Magnus Svensson's avatar
    Magnus Svensson committed
        owner  => $broker_user,
        group  => $broker_group,
        mode   => '0755',
    
      }
    
      file { "/etc/systemd/system/${broker_service}.service" :
    
    Magnus Svensson's avatar
    Magnus Svensson committed
        ensure => file,
    
        owner  => root,
        group  => root,
        mode   => '0644',
        source => "puppet:///modules/${module_name}/broker/broker.service",
      }
    
      file { "${broker_home}/on_update.sh" :
    
    Magnus Svensson's avatar
    Magnus Svensson committed
        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,
    
    Magnus Svensson's avatar
    Magnus Svensson committed
        owner  => $broker_user,
        group  => $broker_group,
        mode   => '0700',
    
      }
    
      file { "${broker_home}/ssl/cert.pem" :
    
    Magnus Svensson's avatar
    Magnus Svensson committed
        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" :
    
    Magnus Svensson's avatar
    Magnus Svensson committed
        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" :
    
    Magnus Svensson's avatar
    Magnus Svensson committed
        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,
    
    Magnus Svensson's avatar
    Magnus Svensson committed
        cwd         => $broker_home,
    
        path        => '/bin:/usr/bin',
    
        environment => ["HOME=${broker_home}"],
        command     => "${broker_home}/on_update.sh",
        require     => File["${broker_home}/on_update.sh"],
    
        notify      => Service[$broker_service],
    
    Magnus Svensson's avatar
    Magnus Svensson committed
      service { $broker_service :
        ensure => 'running',
    
        enable => true,
    
    Magnus Svensson's avatar
    Magnus Svensson committed
    }