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
128
|
# File 'manifests/osfamily/solaris.pp', line 2
class puppet_agent::osfamily::solaris {
assert_private()
if $facts['os']['name'] != 'Solaris' {
fail("${facts['os']['name']} not supported")
}
if $puppet_agent::is_pe != true {
fail('Solaris upgrades are only supported on Puppet Enterprise')
}
$pe_server_version = pe_build_version()
if $puppet_agent::absolute_source {
$source_dir = $puppet_agent::absolute_source
} elsif $puppet_agent::alternate_pe_source {
$source_dir = "${puppet_agent::alternate_pe_source}/packages/${pe_server_version}/${facts['platform_tag']}"
} elsif $puppet_agent::source {
$source_dir = "${puppet_agent::source}/packages/${pe_server_version}/${facts['platform_tag']}"
} else {
$source_dir = "${puppet_agent::solaris_source}/${pe_server_version}/${facts['platform_tag']}"
}
$pkg_arch = $puppet_agent::arch ? {
/^sun4[uv]$/ => 'sparc',
default => 'i386',
}
case $facts['os']['release']['major'] {
'10': {
$package_file_name = "${puppet_agent::package_name}-${puppet_agent::prepare::package_version}-1.${pkg_arch}.pkg.gz"
if $puppet_agent::absolute_source {
$source = $source_dir
} else {
$source = "${source_dir}/${package_file_name}"
}
class { 'puppet_agent::prepare::package':
source => $source,
}
contain puppet_agent::prepare::package
$_unzipped_package_name = regsubst($package_file_name, '\.gz$', '')
exec { "unzip ${package_file_name}":
path => '/bin:/usr/bin:/sbin:/usr/sbin',
command => "gzip -d /opt/puppetlabs/packages/${package_file_name}",
creates => "/opt/puppetlabs/packages/${_unzipped_package_name}",
require => Class['puppet_agent::prepare::package'],
logoutput => 'on_failure',
}
file { '/opt/puppetlabs/packages/solaris-noask':
ensure => file,
owner => 0,
group => 0,
mode => '0644',
source => "puppet:///pe_packages/${pe_server_version}/${facts['platform_tag']}/solaris-noask",
}
}
'11': {
if $puppet_agent::manage_repo {
$package_file_name = "${puppet_agent::package_name}@${puppet_agent::prepare::package_version},5.11-1.${pkg_arch}.p5p"
if $puppet_agent::absolute_source {
$source = $source_dir
} else {
$source = "${source_dir}/${package_file_name}"
}
class { 'puppet_agent::prepare::package':
source => $source,
}
contain puppet_agent::prepare::package
$pkgrepo_dir = '/etc/puppetlabs/installer/solaris.repo'
$publisher = 'puppetlabs.com'
$arch = $facts['os']['architecture'] ? {
/^sun4[uv]$/ => 'sparc',
default => 'i386',
}
$pkg_name = basename($package_file_name, ".${arch}.p5p")
exec { 'puppet_agent remove existing repo':
command => "rm -rf '${pkgrepo_dir}'",
path => '/bin:/usr/bin:/sbin:/usr/sbin',
logoutput => 'on_failure',
unless => "pkgrepo list -p ${publisher} -s ${pkgrepo_dir} ${pkg_name}",
}
~> exec { 'puppet_agent create repo':
command => "pkgrepo create ${pkgrepo_dir}",
path => '/bin:/usr/bin:/sbin:/usr/sbin',
unless => "test -f ${pkgrepo_dir}/pkg5.repository",
logoutput => 'on_failure',
refreshonly => true,
}
~> exec { 'puppet_agent set publisher':
command => "pkgrepo set -s ${pkgrepo_dir} publisher/prefix=${publisher}",
path => '/bin:/usr/bin:/sbin:/usr/sbin',
logoutput => 'on_failure',
refreshonly => true,
}
~> exec { 'puppet_agent ensure pkgrepo is up-to-date':
command => "pkgrepo refresh -s ${pkgrepo_dir}",
path => '/bin:/usr/bin:/sbin:/usr/sbin',
logoutput => 'on_failure',
refreshonly => true,
}
~> exec { 'puppet_agent copy packages':
command => "pkgrecv -s file:///opt/puppetlabs/packages/${package_file_name} -d ${pkgrepo_dir} '*'",
path => '/bin:/usr/bin:/sbin:/usr/sbin',
logoutput => 'on_failure',
refreshonly => true,
}
# Make sure the pkg publishers are all available. Broken
# publisher entries will stop the installation process.
# This must happen before removing any packages.
# We rely on the puppetlabs.com publisher previously being
# setup (during the initial install).
~> exec { 'puppet_agent ensure pkg publishers are available':
command => "pkg refresh ${publisher}",
path => '/bin:/usr/bin:/sbin:/usr/sbin',
logoutput => 'on_failure',
refreshonly => true,
}
}
}
default: {
fail("${facts['os']['name']} ${facts['os']['release']['major']} not supported")
}
}
}
|