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,
}
}
|