bstopp/puppet-aem

View on GitHub
manifests/service/systemd.pp

Summary

Maintainability
Test Coverage
# == Define: aem::service::systemd
#
# Manages service definition systems which employ systemd.
#
# This defines is not intended to be used directly.
#
# Based on Elastic Search service management.
#
define aem::service::systemd (
  $ensure,
  $status,
  $group,
  $home,
  $user,
  $service_options
) {

  # Setup the system state.
  if $ensure == 'present' {

    case $status {

      # Running now and on boot.
      'enabled': {
        $service_ensure   = 'running'
        $service_enabled  = true
      }
      # Not running now, nor on boot
      'disabled': {
        $service_ensure   = 'stopped'
        $service_enabled  = false
      }
      # Running now, but not on boot.
      'running': {
        $service_ensure   = 'running'
        $service_enabled  = false
      }
      # Basically, remove the service definition from catalog
      'unmanaged': {
        $service_ensure   = undef
        $service_enabled  = false
      }
      default: {
        fail("'${status}' is not a valid service status value")
      }
    }
  } else {
    # Shut it all down if 'absent'
    $service_ensure   = 'stopped'
    $service_enabled  = false
  }

  if ($status != 'unmanaged') {

    file { "/lib/systemd/system/aem-${name}.service":
      ensure  => $ensure,
      content => template("${module_name}/etc/init.d/systemd.erb"),
      owner   => 'root',
      group   => 'root',
    }

    service { "aem-${name}":
      ensure     => $service_ensure,
      enable     => $service_enabled,
      name       => "aem-${name}.service",
      hasstatus  => true,
      hasrestart => true,
      provider   => 'systemd',
    }

    if ($ensure == 'present') {
      File["/lib/systemd/system/aem-${name}.service"]
      -> Exec["reload_systemd_aem_${name}"]
      -> Service["aem-${name}"]

      File["/lib/systemd/system/aem-${name}.service"]
      ~> Exec["reload_systemd_aem_${name}"]
      ~> Service["aem-${name}"]
    } else {

      Service["aem-${name}"]
      -> File["/lib/systemd/system/aem-${name}.service"]

      Service["aem-${name}"]
      ~> File["/lib/systemd/system/aem-${name}.service"]
      ~> Exec["reload_systemd_aem_${name}"]
    }

  }

  exec { "reload_systemd_aem_${name}" :
    command     => '/bin/systemctl daemon-reload',
    refreshonly => true,
  }
}