Types of Modules (roles & profiles) file structure in puppet

Types of Modules

Component Modules: Modules managing specific technologies.

Profile Modules: Wrapper modules which used multiple component modules to create a technology stack.
ex: creating app server module by using webserver and tomcat

Role Module: Wrapper modules which uses multiple profiles to create complete system configuration.
ex: create web-serve role with by using web-server host config profile modules

Directory & file structure for puppet modules

manifests: contains puppet logic written in puppet language
files: contains static puppet managed files required for configuration
templates: contains dynamic puppet managed files where content is different for different agent nodes
lib: contains custom plugins such as facts or resources.
facts.d: contains facts in the form of yaml, json or txt files.
example: contains smoke test files for configured manifests
spec: contains unit and other test for the modules.

###########################

Files:

Gemfile: contains list of ruby-gems required for module activities.
metadata.json: contains module specific information especially required for publishing modules in puppet forge
Rakefile: contains a series of tasks specific to testing module
README.md: conatins documentation for module
CHANGELOG.md: contains release specific modules change information such as bug fixes, features, know issues, and so on.

mohammedrafi@NOC-RAFI:~$ mkdir mymodule && cd mymodule
mohammedrafi@NOC-RAFI:~/mymodule$ puppet module generate –skip-interview rafi494-samplemodule

Notice: Generating module at /home/mohammedrafi/mymodule/rafi494-samplemodule…
Notice: Populating templates…
Finished; module generated in rafi494-samplemodule.
rafi494-samplemodule/README.md
rafi494-samplemodule/Gemfile
rafi494-samplemodule/manifests
rafi494-samplemodule/manifests/init.pp
rafi494-samplemodule/spec
rafi494-samplemodule/spec/spec_helper.rb
rafi494-samplemodule/spec/classes
rafi494-samplemodule/spec/classes/init_spec.rb
rafi494-samplemodule/metadata.json
rafi494-samplemodule/Rakefile
rafi494-samplemodule/tests
rafi494-samplemodule/tests/init.pp

mohammedrafi@NOC-RAFI:~/mymodule$ ls -l
total 4
drwxrwxr-x 5 mohammedrafi mohammedrafi 4096 Aug 24 07:45 rafi494-samplemodule

mohammedrafi@NOC-RAFI:~/mymodule$ tree rafi494-samplemodule/
rafi494-samplemodule/
|– Gemfile
|– manifests
| `– init.pp
|– metadata.json
|– Rakefile
|– README.md
|– spec
| |– classes
| | `– init_spec.rb
| `– spec_helper.rb
`– tests
`– init.pp

4 directories, 8 files

 

 

Validating syntax

bundle exec rake validate
puppet-lint manifest/
bundle exec rake
bundle exec rake lint

http://puppet-lint.com/
http://puppet-lint.com/checks/
http://puppet-lint.com/checks/2sp_soft_tabs/

vim Rakefile
PuppetLint.configuration.send(‘disable_2sp_soft_tabs’)

Writing Unit Tests with rspec-puppet

http://rspec-puppet.com/
http://rspec-puppet.com/tutorial/
https://github.com/rodjek/rspec-puppet/

Writing Tests with Beaker Using Serverspec
bundle install
bundle update

https://github.com/puppetlabs/beaker
http://serverspec.org/
http://serverspec.org/resource_types.html

 

Leave a comment