# Awesome Puppet

A curated list of amazingly awesome puppet resources inspired by @bayandin’s awesome-awesomeness.

Your pull requests are very welcome! Let’s make this the awesomest resource for Puppet!

- Integrated Development Enviroments
- Documentation
- Module Management
- Build Tools
- Testing
- Puppet Tools
- Learning Resources
- Other Awesome Lists

## Integrated Development Enviroments

> IDEs and Editors for development

- Atom - The hackable editor by GitHub
  - Puppet plugin - The Puppet plugin for Atom
- Sublime - Non-FOSS text editor for MacOS X
  - SublimePuppet - Puppet syntax for Sublime
  - SublimeLinter Puppet - Sublime Linter plugin for Puppet
- Textmate - FOSS text editor for MacOS X
  - Puppet Bundle - Textmate bundle for Puppet
- RubyMine - Code editor for Windows/Mac/Linux (not free or FOSS)
  - Puppet language support plugin - also compatible with other editors
- VSCode
  - Puppet plugin - Puppet syntax, code snippets, PDK integration, etc.
- Vim - the ubiquitous text editor
  - vim-puppet - provides syntax highlighting and other plugins

## Documentation

> Libraries for generating project documentation

- HereDoc - HereDoc support for Puppet
- puppet-strings - Current generation documentation from Puppet
  - puppetlabs/ntp - reference module for Strings support

## Module Management

> Libraries for module management

- Librarian Puppet - Flexible module management for your puppet repository
- Puppet Blacksmith - Ruby Gem with several Puppet Module utilities used for easily publishing modules to the forge
- Hiera-Regex - Regex backend for Hiera data.
- Modulesync - Synchronize consistent settings across modules in a user or organization namespace (not PDK compatible).
  - modulesync_config reference - Reference modulesync configuration repo.
- pdksync - Use PDK to synchronize multiple module repositories.

## Build Tools

> Libraries for building and task running

- Puppet Lint Check that your Puppet manifest conform to the style guide
- puppet-lint-action GitHub Action for interacting with Puppet Lint

## Testing

> Testing frameworks

- Rspec Puppet RSpec tests for your Puppet Manifests
  - rspec-puppet.com - Official docs
- Beaker Puppet acceptance testing harness
- Kitchen
- Kitchen Puppet
- Using kitchen with puppet
- Onceover Repository testing

## Puppet Tools

- Puppet Bolt A Ruby command-line tool for executing commands, scripts, and tasks on remote systems using SSH and WinRM. Great for ‘ad hoc’ task execution. Bolt tasks can be written in any scripting/programming language (Also known as puppet tasks).
- Puppet Development Kit A toolkit for puppet module developers
- puppet-retrospec - Generates puppet rspec test code based on the current code inside your module.
- puppet-ghostbuster - Finds dead code by displaying unused classes, defined resources, template and files. Requires puppetdb 3+.
- puppet-debugger - A interactive live debugger and REPL for the puppet language
- puppet-function-updater - A tool that helps port legacy Puppet functions to the modern Ruby API.

## Control Repositories

> Reference implementations

- puppetlabs/control-repo - Official reference architecture from Puppet, based on Even Besterer Practices.
- PSICK A reusable Puppet control repository using many of what are considered best practices.
- puppetlabs-education/classroom-control-vf - A good reference implementation of the control repository, maintained by Puppet’s Education group.
- puppetinabox/controlrepo - Rob Nelson’s control repository for his PuppetInABox project.

## Learning

> Resources for new puppet users

- Puppet Learning VM A simple VM that gives you a set of challenges to learn puppet by doing.
- Puppet Cookbook, a collection of task oriented solutions in Puppet.
- YAML for Puppet users? - A combination YAML primer and Guide to Puppet/YAML idiosyncracies.
- Introduction to Testing Puppet Modules (and video) by David Schmitt

## References

> Active code references representing various design patterns and usage

- puppetlabs/httpd - Beaker tests in Travis.
- Resource API - Examples of Types & Providers.
- puppetlabs/java’s java_version - Writing a custom fact in ruby.
- puppetinabox puppet_role fact and test - Testing of a custom fact.
- puppetlabs/apache’s defined type apache::vhost - Include a dependency (`apache`) during unit testing of another resource (`apache::vhost`).
- puppetlabs/apache - Testing an ERB template’s resulting content

## Other Awesome Lists

Other amazingly awesome lists can be found in the awesome-awesomeness list.

## Contributing

Your contributions are always welcome!