Using a decent text editor with the plugins that equip you to write well for Puppet is a really good step toward better quality. There are quite a few options out there, and it's best to use whatever suits your own unique writing style. Personally, I have used Atom (https://atom.io) most successfully, and recently installed it locally on my workstation. I used Eclipse many years ago (this has also been known previously as Geppetto), which I in fact felt was unwieldy due to a large memory footprint. It's also nice to remain fairly handy with Vim, especially for working on the command line server-side, or if you use a Linux OS on your workstation. There's also TextMate, for an macOS X only editor that has all of Apple's look and feel.
Let's take a look at some of the various options for an Integrated Development Machine (IDE) available to us as Puppet developers.
Vim (http://www.vim.org) is, of course, still a mainstay for text file editing. It has a very long history in the Unix world, and it's a very lightweight command-line text editor. Vim is just about as raw a text editor as you can get. It can be used as a lightning fast and efficient IDE if you have the memory and patience to learn the myriad keyboard commands. My advice is to start out with a few basic commands, and make an effort to pick up a few more each time you use Vim.
You can pimp your Vim and make it better suited for editing Puppet manifests. Let's take a look at that, assuming you've just grabbed a fresh Vim installation, and you have Git installed.
Move to your home directory and clone the given repository with the following commands:
cd ~ git clone https://github.com/ricciocri/vimrc .vim cd .vim git pull && git submodule init && git submodule update && git submodule status cd ~ ln -s .vim/.vimrc
Cloning the repository into your home directory's .vim
directory will configure your Vim settings for you. The repository contains several submodules containing the following:
- Pathogen (https://github.com/tpope/vim-pathogen) is Vim guru Tim Pope's general-purpose add-on that allows you to manage your Vim runtimepath with ease and install Vim plugins and runtime files each in their own private directories, rather than having file collisions.
- Vim-puppet (https://github.com/rodjek/vim-puppet) is the original Vim plugin written by Tim Sharpe, making Vim much more Puppet-friendly.
- snipmate.vim (https://github.com/msanders/snipmate.vim) is a Vim script that implements some of TextMate's snippet features for Vim.
- Syntastic (https://github.com/vim-syntastic/syntastic) is a syntax-checking plugin that runs files through external syntax checkers and displays any resulting errors. This can be done from the command line with the
pdk validate
command, or automatically as files are saved. - Tabular (https://github.com/godlygeek/tabular) is used to line up your fat arrows (=>) according to the Puppet Style Guide, so that it will pass running the
pdk validate
command. (We will cover thepdk validate
command in full later.) - vim-fugitive (https://github.com/tpope/vim-fugitive) provides deep Git integration for Vim.
I can't promise this will be a perfect Vim setup for your own personal Vim style, but it will certainly get you on the right path, and you will have Pathogen installed, so you can further tweak your Vim settings until you have it just how you like it.
You might also want to fork this repository in GitHub, so you can keep all your settings and share them with your team.
TextMate (http://macromates.com) is an macOS X only editor, and there's a TextMate bundle available (https://github.com/masterzen/puppet-textmate-bundle) for editing Puppet manifests. First, install TextMate and Git (available with the command-line developer tools), and follow these commands to set up the Puppet bundle:
$ mkdir ~/temp $ cd ~/temp $ git clone https://github.com/masterzen/puppet-textmate-bundle.git Puppet.tmbundle $ mv ~/temp/Puppet.tmbundle ~/Library/Application\ Support/TextMate/Bundles/ $ rm -fr ~/temp
Now select a manifest and open it with TextMate. In the TextMate
dialog, select Puppet
and Install Bundle
, and you are all ready to rock.
Here's the IDE that I would recommend based on my own personal style, using my MacBook as the host OS. Atom (https://atom.io) is a fully featured IDE described as, A hackable text editor for the 21st Century and contains all the functionality you'd expect: cross-platform, package (that is, plugin) manager, auto-completion, file browser, multiple panes, find and replace, and so on.
GitHub has developed Atom, and they have built it with the goal of combining the convenience of a fully fledged IDE with the deep configurability of a classic but complex editor such as Vim.
There are literally thousands of open source packages that add new features and functionality to Atom, and here are the ones I recommend specifically for Puppet development:
language-puppet
(adds syntax highlighting and snippets to Puppet files)linter-puppet-lint
(provides linter support to your Puppet manifests)aligner-puppet
(aligns the fat arrows according to the Puppet Style Guide)erb-snippets
(snippets and hotkeys for writing Puppet ERB templates)linter-js-yaml
(parses your YAML files with JS-YAML)tree-view-git-status
(displays the Git status of files in the tree view)
If you're a developer in the Windows and .NET world, then look no further than the Puppet language support for Visual Studio Code extension (https://marketplace.visualstudio.com/items?itemName=jpogran.puppet-vscode).
It contains all the features you would expect for Puppet development in the Visual Studio IDE: syntax highlighting, code snippets, file validation, linting according to the Puppet Style Guide, IntelliSense for resources and parameters, importing from the puppet resource
command, node graph previewing, and now, Puppet Development Kit (PDK) integration.