Project

General

Profile

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

Laurent Domb, 04/30/2013 03:30 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. A working foreman host
14
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
$ sudo yum install mysql-devel
30
</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
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
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
# git clone git clone git://github.com/theforeman/smart-proxy.git foreman-proxy
97
</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
# usermod -G foreman-proxy pe-puppet
106
# usermod -G foreman-proxy pe-apache
107
</pre>
108
109
h3. Add a log and ssl directory
110
111
Create those addtional directories: 
112
113
<pre>
114
# mkdir -p /var/log/foreman-proxy/
115
# mkdir -p /usr/share/foreman-proxy/ssl
116
# mkdir -p /usr/share/foreman-proxy/ssl/certs
117
# mkdir -p /usr/share/foreman-proxy/ssl/private_keys 
118
</pre>
119
120
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.
121
122
<pre>
123
# chown foreman-proxy:root config.ru
124
# chown -R foreman-proxy:root ssl 
125
# chown -R /var/log/foreman-proxy
126
</pre>
127
128
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. 
129
130
h3. Configure the foreman-proxy settings.yml
131
132
Its recommended to have ssl enabled in prod envronments so we need to uncomment these 3 lines, 
133
134
ssl_certificate: ssl/certs/fqdn.pem (created on foreman)
135
ssl_ca_file: ssl/certs/ca.pem (this is the foreman ca.pem)
136
ssl_private_key: ssl/private_keys/fqdn.key (created on foreman)
137
138
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. 
139
140
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
141
142
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:
143
144
Generate a new certificate on your puppetmaster: 
145
<pre>
146
puppet cert --generate <proxy-FQDN> (which is your puppet-enterprise host)
147
 </pre>
148
Copy the certificates and key from the puppetmaster (foreman host)  to the smart proxy (puppet enterprise) to  /usr/share/foreman-proxy/ssl :
149
<pre>
150
/usr/share/foreman-proxy/ssl/certs/ca.pem
151
/usr/share/foreman-proxy/ssl/certs/proxy-FQDN.pem
152
/usr/share/foreman-proxy/ssl/private_keys/proxy-FQDN.pem
153
</pre>
154
155
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!
156
157
You also have to enable the PuppetCA and Puppet management if your puppet master and ca is on the puppet enterprise host. 
158
159
<pre>
160
# enable PuppetCA management
161
:puppetca: true
162
:ssldir: /etc/puppet/ssl
163
:puppetdir: /etc/puppet
164
165
# enable Puppet management
166
:puppet: true
167
:puppet_conf: /etc/puppet/puppet.conf
168
</pre>
169
170
h3. Adding the smart-proxy configuration to the puppet httpd directory
171
172
You can find the pe-apache folder in /etc/puppetlabs/httpd/conf.d/
173
174
Create the follwing file 12-pe-httpd-foreman-proxy.conf 
175
176
<pre>
177
Listen 8443
178
<VirtualHost YOURIP:8443>
179
  ServerName puppet-enterprise-fqdn
180
  SetEnv HOME /usr/share/foreman-proxy
181
    RailsAutoDetect On
182
  RailsEnv production
183
  DocumentRoot /usr/share/foreman-proxy/public
184
  PassengerAppRoot /usr/share/foreman-proxy
185
186
  AddDefaultCharset UTF-8
187
188
  SSLEngine On
189
  SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP
190
  SSLProtocol ALL -SSLv2
191
192
  SSLCertificateFile      /usr/share/foreman-proxy/ssl/certs/puppet-enterprise-fqdn.pem
193
  SSLCertificateKeyFile   /usr/share/foreman-proxy/ssl/private_keys/puppet-enterprise-fqdn.pem
194
  SSLCertificateChainFile /usr/share/foreman-proxy/ssl/certs/ca.pem
195
  SSLCACertificateFile    /usr/share/foreman-proxy/ssl/certs/ca.pem
196
  SSLVerifyClient         optional
197
  SSLOptions              +StdEnvVars
198
  SSLVerifyDepth          3
199
200
  Loglevel Debug
201
  CustomLog /usr/share/foreman-proxy/logs/access.log combined
202
  ErrorLog /usr/share/foreman-proxy/logs/error.log
203
</VirtualHost>
204
</pre>
205
206
207
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
208
209
You can get the latest node.rb file from here: 
210
211
https://github.com/theforeman/puppet-foreman/blob/master/templates/external_node.rb.erb
212
213
<pre>
214
# cd /etc/puppetlabs/puppet/
215
# git clone https://github.com/theforeman/puppet-foreman/blob/master/templates/external_node.rb.erb node.rb
216
# chmod +x node.rb
217
</pre>
218
219
h3. Edit node.rb and add the correct url and certificates
220
221
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.
222
223
<pre>
224
SETTINGS = {
225
  :url          => "https://foreman.youdomain",  # e.g. https://foreman.example.com
226
  :puppetdir    => "/var/opt/lib/pe-puppet",  #  This is the puppet enterprise dir
227
  :facts        => true,          # true/false to upload facts
228
  :storeconfigs => true,   # true/false if sharing ActiveRecord-storeconfigs
229
  :timeout      => 10,
230
  # if CA is specified, remote Foreman host will be verified
231
  :ssl_ca       => "/usr/share/foreman-proxy/ssl/certs/ca.pem",      #  This is the ca.pem form you puppet opensource foreman host
232
  # ssl_cert and key are required if require_ssl_puppetmasters is enabled in Foreman
233
  :ssl_cert     => "/usr/share/foreman-proxy/ssl/certs/puppet-enterprise-fqdn.pem",    #  This is the fqdn.pem form you puppet opensource foreman host
234
  :ssl_key      => "/usr/share/foreman-proxy/ssl/private_keys/puppet-enterprise-fqdn.pem"  # This is the fqdn.pem form you puppet opensource foreman host
235
</pre>
236
237
h3. Add the foreman.rb report to the puppetlabs ruby report dir
238
239
<pre>
240
# cd /opt/puppet/lib/ruby/site_ruby/1.8/puppet/reports/
241
# git clone https://github.com/theforeman/puppet-foreman/blob/master/templates/foreman-report.rb.erb foreman.rb
242
# chmod +x foreman.rb
243
</pre>
244
245
Now also add the your certs in foreman.rb
246
247
<pre>
248
# URL of your Foreman installation
249
$foreman_url='https://foreman.yourdomain
250
# if CA is specified, remote Foreman host will be verified
251
$foreman_ssl_ca = "/usr/share/foreman-proxy/ssl/certs/ca.pem"
252
# ssl_cert and key are required if require_ssl_puppetmasters is enabled in Foreman
253
$foreman_ssl_cert = "/usr/share/foreman-proxy/ssl/certs/puppet-enterprise-fqdn.pem"
254
$foreman_ssl_key = "/usr/share/foreman-proxy/ssl/private_keys/puppet-enterprise-fqdn.pem"
255
</pre>
256
257
h3. After adding all these files we need to modify the master section in the puppet.conf file. 
258
259
<pre>
260
[master]
261
    reports = foreman
262
    node_terminus = exec
263
    external_nodes = /etc/puppetlabs/puppet/node.rb
264
    ### foreman settings
265
    privatekeydir = $ssldir/private_keys { group = service }
266
    hostprivkey = $privatekeydir/$certname.pem { mode = 640 }
267
    #### for passenger
268
    ssl_client_header = SSL_CLIENT_S_DN
269
    ssl_client_verify_header = SSL_CLIENT_VERIFY
270
271
</pre>
272
273
h3. Restart pe-httpd
274
275
Restart the puppetlabs httpd server
276
<pre>
277
 /etc/init.d/pe-httpd
278
</pre>
279
280
h2. Add the smart-proxy to the Foreman's Smart Proxy page
281
282
Go to [FOREMAN_URL]/smart_proxies and klick New Proxy
283
Then you type in the Name for your Proxy and the URL of your Proxy, with the Port you use.
284
For example:
285
286
Name: Puppet-Proxy
287
URL: http://puppetpe.your-domain.com:8443