Project

General

Profile

passenger on Puppet PE and use foreman as an ENC and reporting engine » History » Version 8

Laurent Domb, 05/03/2013 02:13 PM

1 1 Laurent Domb
h1.  passenger on Puppet PE and use foreman as an ENC and reporting engine 
2
3
h2. Overview
4
5
This how to describes the steps to install foreman's smart proxy on puppet enterprise 2.7.2 with the embedded puppet labs ruby version. It also walks you thru the steps of modifying the reporting engine to "foreman reports" and use "the foreman" as it's ENC. 
6
7
h2. Requirements
8
9
1. Internet access as you need to do some git pulls and install some rubygems
10
11
2. The puppet enterprise tar ball (puppet-enterprise-2.7.2-el-6-x86_64.tar.gz) which you can download from the puppet labs website.
12
13 3 Laurent Domb
3. A working foreman 1.1 or higher host
14 1 Laurent Domb
15
16
h3. Install the needed dependencies to install the rubygems
17
18
Go to the troubleshooting section [[http://projects.theforeman.org/projects/foreman/wiki/Troubleshooting]] there is a paragraph "I use puppet enterprise, what now?" and install 
19
20
"*pe-ruby-devel-1.8.7.370-1.pe.el6.x86_64.rpm*" from your unpacked puppet-enterprise tar ball. You can find the rpm in puppet-enterprise-2.7.2-el-6-x86_64/packages/el-6-x86_64/. 
21
22
<pre>
23
$ sudo yum localinstall pe-ruby-devel-1.8.7.370-1.pe.el6.x86_64.rpm
24
</pre>
25
26
Pupppet pe 2.7.2 comes with mysql as a database back end. This means we need the mysql-devel to build the mysql rubygem package. 
27
28
<pre>
29 5 Laurent Domb
$ sudo yum install mysql-devel gcc make
30 1 Laurent Domb
</pre>
31
32
Now follow the steps copied from the trouble shooting wiki page. 
33
34
1. Update your path variable to use the ruby version PE ships with 
35
36
<pre>
37
# export PATH=/opt/puppet/bin:$PATH
38
</pre>
39
40
2. Check to make sure your PATH was updated ("which gem" should return /opt/puppet/bin/gem)
41
<pre>
42
# which gem
43
/opt/puppet/bin/gem
44
</pre>
45
46
3. Install json rest-client and mysql 
47
<pre>
48
#gem install json
49
#gem install rest-client
50
#gem install mysql
51
</pre>
52
53
4. If everything went fine you should see the following output if you list the gem's
54
<pre>
55
#gem list
56
activerecord (2.3.17)
57
activesupport (2.3.17)
58
ar-extensions (0.9.5)
59
builder (3.0.0)
60
dalli (1.1.2)
61
excon (0.14.1)
62
fog (1.5.0)
63
formatador (0.2.0)
64
guid (0.1.1)
65
hiera (0.3.0)
66
hiera-puppet (0.3.0)
67
json (1.7.7)
68
mime-types (1.16)
69
multi_json (1.0.3)
70
mysql (2.9.1)
71
net-scp (1.0.4)
72
net-ssh (2.1.4)
73
nokogiri (1.5.0)
74
rack (1.1.6)
75
rack_csrf (2.4.0)
76
rake (0.8.7)
77
rbvmomi (1.3.0)
78
rest-client (1.6.7)
79
ruby-hmac (0.4.0)
80
sinatra (1.2.6)
81
stomp (1.1.9)
82
tilt (1.3.3)
83
trollop (1.16.2)
84
</pre>
85
86
h2. Install the smart-proxy from git
87
88 2 Laurent Domb
As we need to modify some ruby files (for [[ mcollective ]] ) along the way, cloning the smart-proxy from git seemed to be the best way to go. 
89 1 Laurent Domb
90
h3. Cloning the repo
91
92
You can download the zip file or just clone the latest smart proxy with git. 
93
94
<pre>
95
# cd /usr/share/
96 6 Laurent Domb
# git clone git://github.com/theforeman/smart-proxy.git foreman-proxy
97 1 Laurent Domb
</pre>
98
99
h3. Create the foreman-proxy group / user 
100
101
Add the foreman-proxy user and group to the system and make the foreman-proxy user part of the pe-puppet and pe-apache group. 
102
103
<pre>
104
# useradd -r foreman-proxy
105 7 Laurent Domb
# usermod -G pe-puppet,pe-apache foreman-proxy
106 1 Laurent Domb
</pre>
107
108
h3. Add a log and ssl directory
109
110
Create those addtional directories: 
111
112
<pre>
113
# mkdir -p /var/log/foreman-proxy/
114
# mkdir -p /usr/share/foreman-proxy/ssl
115
# mkdir -p /usr/share/foreman-proxy/ssl/certs
116
# mkdir -p /usr/share/foreman-proxy/ssl/private_keys 
117
</pre>
118
119
After adding the user, log and ssl directory, cd into the foreman-proxy folder and change the following permissions for config.ru, logs and ssl.
120
121
<pre>
122
# chown foreman-proxy:root config.ru
123
# chown -R foreman-proxy:root ssl 
124 8 Laurent Domb
# chown -R foreman-proxy:foreman-proxy /var/log/foreman-proxy
125 1 Laurent Domb
</pre>
126
127
The reason why we change the permission on config.ru is, because we want apache/passenger to spawn an new process as user foreman-proxy and NOT as root. 
128
129
h3. Configure the foreman-proxy settings.yml
130
131
Its recommended to have ssl enabled in prod envronments so we need to uncomment these 3 lines, 
132
133
ssl_certificate: ssl/certs/fqdn.pem (created on foreman)
134
ssl_ca_file: ssl/certs/ca.pem (this is the foreman ca.pem)
135
ssl_private_key: ssl/private_keys/fqdn.key (created on foreman)
136
137
and generate a new certificate for the connection between the foreman-proxy and the foreman host. As we do not want to waste puppet enterprise licenses for the apache ssl connection we create the certificate on the foreman host which has puppet oss installed. 
138
139
You can follow the foreman manual on section 4.3.6 SSL [[http://theforeman.org/manuals/1.1/index.html#4.3.6SSL]] to create the certificates on the foreman host
140
141
To generate a certificate for a proxy host that isn't managed by Puppet or is but you do not want to use the certs from it, do the following:
142
143
Generate a new certificate on your puppetmaster: 
144
<pre>
145
puppet cert --generate <proxy-FQDN> (which is your puppet-enterprise host)
146
 </pre>
147
Copy the certificates and key from the puppetmaster (foreman host)  to the smart proxy (puppet enterprise) to  /usr/share/foreman-proxy/ssl :
148
<pre>
149
/usr/share/foreman-proxy/ssl/certs/ca.pem
150
/usr/share/foreman-proxy/ssl/certs/proxy-FQDN.pem
151
/usr/share/foreman-proxy/ssl/private_keys/proxy-FQDN.pem
152
</pre>
153
154
Please pay attentions that these are NOT the same certs as you are createing on the puppet enterprise CA! these are created by the foreman open source puppetmaster!
155
156
You also have to enable the PuppetCA and Puppet management if your puppet master and ca is on the puppet enterprise host. 
157
158
<pre>
159
# enable PuppetCA management
160
:puppetca: true
161
:ssldir: /etc/puppet/ssl
162
:puppetdir: /etc/puppet
163
164
# enable Puppet management
165
:puppet: true
166
:puppet_conf: /etc/puppet/puppet.conf
167
</pre>
168
169 4 Laurent Domb
h3. Allow the foreman-proxy to make puppetca requests
170
171
Add the following content to /etc/sudoers.d/foreman-proxy
172
173
<pre>
174
foreman-proxy ALL = NOPASSWD : /usr/sbin/puppetca *
175
Defaults:foreman-proxy !requiretty
176
</pre>
177
178
179 1 Laurent Domb
h3. Adding the smart-proxy configuration to the puppet httpd directory
180
181
You can find the pe-apache folder in /etc/puppetlabs/httpd/conf.d/
182
183
Create the follwing file 12-pe-httpd-foreman-proxy.conf 
184
185
<pre>
186
Listen 8443
187
<VirtualHost YOURIP:8443>
188
  ServerName puppet-enterprise-fqdn
189
  SetEnv HOME /usr/share/foreman-proxy
190
    RailsAutoDetect On
191
  RailsEnv production
192
  DocumentRoot /usr/share/foreman-proxy/public
193
  PassengerAppRoot /usr/share/foreman-proxy
194
195
  AddDefaultCharset UTF-8
196
197
  SSLEngine On
198
  SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP
199
  SSLProtocol ALL -SSLv2
200
201
  SSLCertificateFile      /usr/share/foreman-proxy/ssl/certs/puppet-enterprise-fqdn.pem
202
  SSLCertificateKeyFile   /usr/share/foreman-proxy/ssl/private_keys/puppet-enterprise-fqdn.pem
203
  SSLCertificateChainFile /usr/share/foreman-proxy/ssl/certs/ca.pem
204
  SSLCACertificateFile    /usr/share/foreman-proxy/ssl/certs/ca.pem
205
  SSLVerifyClient         optional
206
  SSLOptions              +StdEnvVars
207
  SSLVerifyDepth          3
208
209
  Loglevel Debug
210
  CustomLog /usr/share/foreman-proxy/logs/access.log combined
211
  ErrorLog /usr/share/foreman-proxy/logs/error.log
212
</VirtualHost>
213
</pre>
214
215
216
h2. Now that we have setup the foreman-proxy we need to add the node.rb file to the /etc/puppetlabs/puppet/ directory so that puppet requests the information from the forman host ENC
217
218
You can get the latest node.rb file from here: 
219
220
https://github.com/theforeman/puppet-foreman/blob/master/templates/external_node.rb.erb
221
222
<pre>
223
# cd /etc/puppetlabs/puppet/
224
# git clone https://github.com/theforeman/puppet-foreman/blob/master/templates/external_node.rb.erb node.rb
225
# chmod +x node.rb
226
</pre>
227
228
h3. Edit node.rb and add the correct url and certificates
229
230
That the foreman host and the foreman-proxy host can toak to each other in a secure way, edit the node.rb file and add your certs.
231
232
<pre>
233
SETTINGS = {
234
  :url          => "https://foreman.youdomain",  # e.g. https://foreman.example.com
235
  :puppetdir    => "/var/opt/lib/pe-puppet",  #  This is the puppet enterprise dir
236
  :facts        => true,          # true/false to upload facts
237
  :storeconfigs => true,   # true/false if sharing ActiveRecord-storeconfigs
238
  :timeout      => 10,
239
  # if CA is specified, remote Foreman host will be verified
240
  :ssl_ca       => "/usr/share/foreman-proxy/ssl/certs/ca.pem",      #  This is the ca.pem form you puppet opensource foreman host
241
  # ssl_cert and key are required if require_ssl_puppetmasters is enabled in Foreman
242
  :ssl_cert     => "/usr/share/foreman-proxy/ssl/certs/puppet-enterprise-fqdn.pem",    #  This is the fqdn.pem form you puppet opensource foreman host
243
  :ssl_key      => "/usr/share/foreman-proxy/ssl/private_keys/puppet-enterprise-fqdn.pem"  # This is the fqdn.pem form you puppet opensource foreman host
244
</pre>
245
246
h3. Add the foreman.rb report to the puppetlabs ruby report dir
247
248
<pre>
249
# cd /opt/puppet/lib/ruby/site_ruby/1.8/puppet/reports/
250
# git clone https://github.com/theforeman/puppet-foreman/blob/master/templates/foreman-report.rb.erb foreman.rb
251
# chmod +x foreman.rb
252
</pre>
253
254
Now also add the your certs in foreman.rb
255
256
<pre>
257
# URL of your Foreman installation
258
$foreman_url='https://foreman.yourdomain
259
# if CA is specified, remote Foreman host will be verified
260
$foreman_ssl_ca = "/usr/share/foreman-proxy/ssl/certs/ca.pem"
261
# ssl_cert and key are required if require_ssl_puppetmasters is enabled in Foreman
262
$foreman_ssl_cert = "/usr/share/foreman-proxy/ssl/certs/puppet-enterprise-fqdn.pem"
263
$foreman_ssl_key = "/usr/share/foreman-proxy/ssl/private_keys/puppet-enterprise-fqdn.pem"
264
</pre>
265
266
h3. After adding all these files we need to modify the master section in the puppet.conf file. 
267
268
<pre>
269
[master]
270
    reports = foreman
271
    node_terminus = exec
272
    external_nodes = /etc/puppetlabs/puppet/node.rb
273
    ### foreman settings
274
    privatekeydir = $ssldir/private_keys { group = service }
275
    hostprivkey = $privatekeydir/$certname.pem { mode = 640 }
276
    #### for passenger
277
    ssl_client_header = SSL_CLIENT_S_DN
278
    ssl_client_verify_header = SSL_CLIENT_VERIFY
279
280
</pre>
281
282
h3. Restart pe-httpd
283
284
Restart the puppetlabs httpd server
285
<pre>
286
 /etc/init.d/pe-httpd
287
</pre>
288
289
h2. Add the smart-proxy to the Foreman's Smart Proxy page
290
291
Go to [FOREMAN_URL]/smart_proxies and klick New Proxy
292
Then you type in the Name for your Proxy and the URL of your Proxy, with the Port you use.
293
For example:
294
295
Name: Puppet-Proxy
296
URL: http://puppetpe.your-domain.com:8443