Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
auth.pp 3.26 KiB
class aes::auth {

  $auth_user = auth
  $auth_group = "${auth_user}"
  $auth_home = "/srv/${auth_user}"
  $auth_service = "aes_auth"

  # Pick the right keytab for the current environment. We use the fqdn rather than 
  # $environment since the keys are tied to the domain name rather than what 
  # environment the machine is configured in.
  if $facts[fqdn] == 'aes.edu.liu.se' {
    $auth_keytab_data = lookup("aes::keytab_production", undef, undef, "lookup failed")
  } elsif $facts[fqdn] == 'aes-devel.edu.liu.se' {
    $auth_keytab_data = lookup("aes::keytab_devel", undef, undef, "lookup failed")
  } else {
    $auth_keytab_data = "unknown domain"
  }

  # Note: We rely on Boost being installed by the broker. It seems Puppet does not like
  # that we specify "boost" multiple times, even though it would look nice, modularity-wise
  # since both the auth server and the broker requires boost.
  package {
    [
	'krb5-libs',
	'krb5-devel',
	'openssl-devel',
    ]:
      ensure => installed,
  }

  # Group for local authentication. All accounts that are members
  # of this group are considered trusted by the authentication system.
  group { "aes_local_auth" :
    ensure => present
  }

  user { "${auth_user}" :
    ensure => present,
    home => "${auth_home}",
    comment => 'Authentication server for AES',
    managehome => false,
    membership => inclusive,
    groups => [ "aes_local_auth" ],
    system => true,
    shell => '/sbin/nologin',
  }

  file { "${auth_home}" :
    ensure => directory,
    owner => "${auth_user}",
    group => "${auth_group}",
    mode => '0755',
  }

  file { "/etc/systemd/system/${auth_service}.service" :
    ensure => present,
    owner  => root,
    group  => root,
    mode   => '0644',
    source => "puppet:///modules/${module_name}/auth/auth.service",
  }

  file { "${auth_home}/on_update.sh" :
    ensure => present,
    owner  => root,
    group  => root,
    mode   => '0700',
    source => "puppet:///modules/${module_name}/auth/on_update.sh",
  }
  file { "${auth_home}/config.json" :
    ensure => present,
    owner  => "${auth_user}",
    group  => "${auth_group}",
    mode   => '0644',
    source => "puppet:///modules/${module_name}/auth/config.json",
  }

  file { "${auth_home}/start.sh" :
    ensure => present,
    owner  => "${auth_user}",
    group  => "${auth_group}",
    mode   => '0755',
    source => "puppet:///modules/${module_name}/auth/start.sh",
  }

  file { "${auth_home}/keys" :
    ensure => directory,
    owner  => "${auth_user}",
    group  => "${auth_group}",
    mode   => "0700"
  }

  file { "${auth_home}/keys/kerberos.keytab" :
    ensure => file,
    owner  => root,
    group  => "${auth_group}",
    mode   => "0640",
    content => "${auth_keytab_data}"
  }

  exec { 'update-auth-repo' :
    command => "/opt/utils/update_repo.sh ${auth_home}/src https://oauth2:F-agHaRXCdyFy38q4c-N@gitlab.liu.se/upp-aes/communication.git production",
    environment => [ "REPO_USER=${auth_user}", "REPO_GROUP=${auth_group}", "REPO_ON_UPDATE=${auth_home}/on_update.sh" ],
    # This command will need to run "on_update" as root in order to restart the service.
    user => root,
    group => root,
    cwd => "${auth_home}",
    require => File["${auth_home}/on_update.sh"],
  }

  service { "${auth_service}" : 
    ensure => "running",
  }

}