Modules
Update code dir to use your current workspace
On puppet master
puppet
cp -r /etc/puppetlabs/code /workspace/code
Update config in the server's config file /etc/puppetlabs/puppetserver/conf.d/puppetserver.conf and update
master-code-dir: /etc/puppetlabs/code
to
master-code-dir: /workspace/code
(assuming you are using /workspace as your working/developement directory on the puppet master to store the code at )
Restart Puppet Server
shell
service puppetserver restart
This may take time.
Generating Modules
Change into the directory for production env
sh
cd /workspace/code/environments/production/modules
Using puppet module command, generate the scaffolding for java and tomcat modules
bash
puppet module generate --skip-interview user-java
puppet module generate --skip-interview gshah-tomcat
Writing classes
file: modules/java/manifests/init.pp
class java {
package { [ 'epel-release', 'java-1.7.0-openjdk'] :
ensure => installed,
}
}
Node Definitions - Applying the code
To apply the default class from java module, create a node definition
create file: environments/production/manifests/app.pp
add the node definition
node 'node1' {
include java
}
To apply, login to node1 and run puppet agent
ssh devops@node1
sudo su
puppet agent -t
Writing the class to install tomcat
file: modules/tomcat/manifests/install.pp
class tomcat::install {
include java
package { [ 'tomcat', 'tomcat-webapps' ]:
ensure => installed,
require => Package['epel-release']
}
}
Add tomcat::install
to node definition for node1 which should now look like
node 'node1' {
include java
include tomcat::install
}
Apply on node1 by running puppet agent
[on node1, as root]
puppet agent -t
Nano Project
Now that you have learnt how to write a manifest and apply, and have gone through the class naming conventions, you have been tasked to create the following classe with the specifications as give below,
-
class : tomcat::service resource : service name : tomcat ensure : running enable : true
-
service resource should have a dependency on install class
-
apply it to node1 by updating the node definition. Validate by visiting the IP address of the server and port 8081.
Note : Tomcat may take up to 10mins to come up for the first time. This is discussed in details on this page https://wiki.apache.org/tomcat/HowTo/FasterStartUp at the Entropy Source section. We are going to apply that fix in the subsequenct sections.
Also bootstrap node2 ( configure it to talk to the master), create a node definition identical to node1, and apply. Validate that the tomcat service is started on port 8082.
Simplify Run List
file: modules/tomcat/manifests/init.pp
class tomcat {
include tomcat::install
include tomcat::service
}
And production/manifests/app.pp
node 'node1' {
include tomcat
}
node 'node2' {
include tomcat
}
Question : Why are we not including java anymore?
Managing Files
-
Create file
- create directory to hold files : modules/tomcat/files
- create a file modules/tomcat/files/tomcat.conf and add the content from https://gist.github.com/initcron/01f8554fba3305a1bceee9df5ff0aa24
-
Create a class tomcat::config to copy this file to destinition
tomcat::config class
class tomcat::config {
file { '/etc/tomcat/tomcat.conf':
source => 'puppet:///modules/tomcat/tomcat.conf',
owner => 'tomcat',
group => 'tomcat',
mode => '0644',
notify => Service['tomcat']
}
}
Call it from tomcat class (init.pp)
class tomcat {
include tomcat::install
include tomcat::config
include tomcat::service
}
Apply on Node1 and Node2