Puppet Class: classroom::master::showoff

Inherits:
classroom::params
Defined in:
manifests/master/showoff.pp

Overview

Parameters:

  • course (Optional[String]) (defaults to: undef)
  • event_id (Optional[String]) (defaults to: undef)
  • event_pw (Optional[String]) (defaults to: undef)
  • variant (Optional[String]) (defaults to: undef)
  • version (Optional[String]) (defaults to: undef)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'manifests/master/showoff.pp', line 1

class classroom::master::showoff (
  Optional[String] $course   = undef,
  Optional[String] $event_id = undef,
  Optional[String] $event_pw = undef,
  Optional[String] $variant  = undef,
  Optional[String] $version  = undef,
) inherits classroom::params {
  include stunnel
  require showoff
  require classroom::master::dependencies::rubygems

  if $::classroom_vm_release and versioncmp($::classroom_vm_release, '7.0') >= 0 {
    unless $course            { fail('The $course is required on VM versions 7.0 and greater.') }
    unless $event_id          { fail('The $event_id is required on VM versions 7.0 and greater.') }
    unless $latest_courseware { fail('Please run `classroom update` to update your Courseware materials.') }

    $presfile   = "${pick($variant, 'showoff')}.json"
    $password   = pick($event_pw, regsubst($event_id, '^(?:\w*-)*(\w*)$', '\1'))
    $revision   = pick($version, $latest_courseware[$course])
    $pathname   = regsubst($course, '^(Virtual)(\w+)$', '\2').downcase
    $courseware = "${showoff::root}/courseware/${pathname}"
    $metadata = {
      'email'    => pick($trusted.dig('extensions', 'pp_created_by'), $clientcert),
      'course'   => $course,
      'version'  => $revision,
      'event_id' => $event_id,
      'event_pw' => $password,
    }

    vcsrepo { "${showoff::root}/courseware":
      ensure   => present,
      revision => "${course}-v${revision}",
      provider => git,
      before   => Hash_file['courseware metadata'],
      notify   => Exec['build_pdfs'],
    }

    file { ["${courseware}/stats", "${courseware}/_files/share"]:
      ensure   => directory,
      owner    => $showoff::user,
      group    => 'root',
      mode     => '0644',
      before   => Hash_file['courseware metadata'],
      notify   => Exec['build_pdfs'],
    }

    hash_file { 'courseware metadata':
      path     => "${courseware}/stats/metadata.json",
      value    => $metadata,
      provider => 'json',
      before   => File['courseware metadata'],
      notify   => Exec['build_pdfs'],
    }

    file { 'courseware metadata':
      path     => "${courseware}/stats/metadata.json",
      owner    => $showoff::user,
      group    => 'root',
      mode     => '0644',
      notify   => Exec['build_pdfs'],
    }
    file { 'pagerduty metadata':
      ensure   => link,
      path     => '/opt/pltraining/etc/classroom.json',
      target   => "${courseware}/stats/metadata.json",
    }

    package { 'puppet-courseware-manager':
      ensure   => present,
      provider => gem,
    }

    exec { 'build_pdfs':
      command     => "courseware watermark --output _files/share --no-cache --key ${password} --event-id ${event_id} --file ${presfile}",
      cwd         => $courseware,
      path        => '/bin:/usr/bin:/usr/local/bin',
      environment => ['HOME=/tmp'],
      refreshonly => true,
      require     => Package['puppet-courseware-manager'],
    }

    showoff::presentation { 'courseware':
      path      => $courseware,
      file      => $presfile,
      subscribe => Exec['build_pdfs'],
    }

  }
  else {
    if $version  { notify { '$version is not supported on VM < 7.0': }  }
    if $event_id { notify { '$event_id is not supported on VM < 7.0': } }

    include classroom_legacy::master::showoff::legacy
  }


  file { '/etc/stunnel/showoff.pem':
    ensure => 'file',
    owner  => 'root',
    group  => 'root',
    mode   => '0600',
    source => 'puppet:///modules/classroom/showoff.pem',
    before => Stunnel::Tun['showoff-ssl'],
  }

  stunnel::tun { 'showoff-ssl':
    accept  => '9091',
    connect => '127.0.0.1:9090',
    options => 'NO_SSLv2',
    cert    => '/etc/stunnel/showoff.pem',
    client  => false,
  }

  # Source code in stunnel-showoff.te
  file { '/usr/share/selinux/targeted/stunnel-showoff.pp':
    ensure => file,
    owner  => 'root',
    group  => 'root',
    mode   => '0644',
    source => 'puppet:///modules/classroom/selinux/stunnel-showoff.pp',
  }

  selmodule { 'stunnel-showoff':
    ensure => present,
  }

}