官术网_书友最值得收藏!

Using community Puppet style

If other people need to read or maintain your manifests, or if you want to share code with the community, it's a good idea to follow the existing style conventions as closely as possible. These govern such aspects of your code as layout, spacing, quoting, alignment, and variable references, and the official Puppet Labs recommendations on style are available at

http://docs.puppetlabs.com/guides/style_guide

How to do it…

In this section I'll show you a few of the more important examples and how to make sure that your code is style-compliant.

Indentation

Indent your manifests using two spaces (not tabs), as follows:

node 'monitoring' inherits 'server' {
  include icinga::server
  include repo::apt
}

Quoting

Always quote your resource names, for example:

package { 'exim4':

Not

package { exim4:

Use single quotes for all strings, except when:

  • The string contains variable references (for example, ${name})
  • The string contains character escape sequences (for example, \n)

In these cases you should use double quotes. Puppet doesn't process variable references or escape sequences unless they're inside double quotes.

Always quote parameter values that are not reserved words in Puppet. For example, the following values are not reserved words:

name => 'Nucky Thompson',
mode => '0700',
owner => 'deploy',

But these values are reserved words and therefore not quoted:

ensure => installed,
enable => true,
ensure => running,

Variables

Always include curly braces ({}) around variable names when referring to them in strings, for example:

source => "puppet:///modules/webserver/${brand}.conf",

Otherwise Puppet's parser has to guess which characters should be a part of the variable name and which belong to the surrounding string. Curly braces make it explicit.

Parameters

Always end lines that declare parameters with a comma, even if it is the last parameter:

service { 'memcached':
  ensure => running,
  enable => true,
}

This is allowed by Puppet, and makes it easier if you want to add parameters later, or re-order the existing parameters.

When declaring a resource with a single parameter, make the declaration all on one line and with no trailing comma:

package { 'puppet': ensure => installed }

Where there is more than one parameter, give each parameter its own line:

package { 'rake':
  ensure   => installed,
  provider => gem,
  require  => Package['rubygems'],
}

To make the code easier to read, line up the parameter arrows in line with the longest parameter, as follows:

file { "/var/www/${app}/shared/config/rvmrc":
  owner   => 'deploy',
  group   => 'deploy',
  content => template('rails/rvmrc.erb'),
  require => File["/var/www/${app}/shared/config"],
}

The arrows should be aligned per resource, but not across the whole file, otherwise it can make it difficult for you to cut and paste code from one file to another.

Symlinks

When declaring file resources which are symlinks, use ensure => link and set the target attribute, as follows:

file { '/etc/php5/cli/php.ini':
  ensure => link,
  target => '/etc/php.ini',
}

There's more…

When several people are working on a codebase, it's easy for style inconsistencies to creep in. Fortunately, there's a tool available which can automatically check your code for compliance with the style guide: puppet-lint. We'll see how to use this in the next section.

主站蜘蛛池模板: 句容市| 沙河市| 临安市| 古浪县| 宜宾市| 上虞市| 鸡东县| 弥渡县| 鄂伦春自治旗| 科技| 灵川县| 克什克腾旗| 德江县| 古交市| 江津市| 霍城县| 镇雄县| 缙云县| 通化县| 黄平县| 平顺县| 南岸区| 布拖县| 堆龙德庆县| 乌恰县| 建宁县| 丰顺县| 金溪县| 绥江县| 万荣县| 福贡县| 定安县| 怀集县| 东阿县| 凉城县| 临夏市| 于都县| 合江县| 萝北县| 泽州县| 井研县|