The simple idea is that they are passed from the puppet/manifest/site.pp to the module/apache/templates/velcrohurts.conf.erb via magic!
I agree, it is magic, but the magic tells you how to do it.
Lets start with breaking down our previous simple config.
# Managed by Puppet # All changes will be overwriten <VirtualHost *:80> ServerName internal.velcrohurts.net DocumentRoot /var/www/html/ LogLevel info LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" combined ErrorLog ${APACHE_LOG_DIR}/velcrohurts-error.log CustomLog ${APACHE_LOG_DIR}/velcrohurts-access.log combined RedirectMatch ^/$ http://velcrohurts.net/ <Directory /var/www/html/> AllowOverride all Order allow,deny allow from all </Directory> </virtualHost>
The virtual host config has the ServerName, what if we want to use this config for other servers.
We can edit it, or we can set it as a variable. Let's do the second one for this example.
First we need to copy the config to the modules/apache/templates/velcrohurts.conf.erb
Then we want to edit it to add the variable names.
# Managed by Puppet # All changes will be overwriten <VirtualHost *:80> ServerName <%= server_name %> DocumentRoot /var/www/html/ LogLevel info LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" combined ErrorLog ${APACHE_LOG_DIR}/<%= server_name %>-error.log
CustomLog ${APACHE_LOG_DIR}/<%= server_name %>-access.log combined RedirectMatch ^/$ http://velcrohurts.net/ <Directory /var/www/html/> AllowOverride all Order allow,deny allow from all </Directory> </virtualHost>
So now that we have the .erb we need to edit our modules/apache/manifests/init.pp and add the variables there, and make a few changes.
class apache ($server_name){ # Install package package {'apache2': ensure => installed, } # set the configure for debian file { '/etc/apache2/sites-available/velcrohurts.conf': ensure => file, mode => '0644', owner => 'root', group => 'root', content => template["apache/velcrohurts.conf.erb"], require => Package['apache2'], notify => Exec ["reload-apache2"], } # Reload apache with the config # And remove the default-000 config exec {'/usr/sbin/a2dissite 000-default': require => Package['apache2'], notify => Exec ["reload-apache2"], } # Now add your config exec {'/usr/sbin/a2ensite ajplus': notify => Exec ["reload-apache2"], require => Package['apache2'], } # the apache reloader exec { 'reload-apache2': command => '/etc/init.d/apache2 reload', refreshonly => true, } }
The final step here is to add the magic, set the manifests/site.pp settings
node default { include accounts } # web servers node web1 { class apache { server_name = internal.velcrohurts.com } node web2 { class apache { server_name = public.velcrohurts.com } node web3 { class apache { server_name = public.velcrohurts.com }
No comments:
Post a Comment