使用 Puppet 社区规范

A society made up of individuals who were all capable of original thought would probably be unendurable.

— H. L. Mencken

“随大溜” 有时会是个好主意。如果其他人需要阅读或管理你的配置清单, 或者如果你想要分享代码到社区, 那么尽可能遵循现有的样式约定会是个好主意。

操作步骤

  1. 将你的资源名用双引号括起来;例如使用 package { "exim4": 而不是 package { exim4:

    当使用一些像连字符和空格这样的字符时很容易引起 Puppet 解析器的混乱, 明智而又安全的做法是始终使用双引号将所有的资源名括起来。

  2. 总是将非 Puppet 保留字的参数值用双引号括起来,例如:

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

    但保留字不用使用引号:

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

    当在字符串中引用变量的值时,始终使用大括号将变量名括起来。例如:

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

    否则 Puppet 的解析器不得不猜测哪些字符是变量名的一部分。使用大括号将使其变得清晰。

  3. 总是以逗号结束参数声明的行,即使它是最后一个参数:

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

    很多时候,当你编辑文件时会追加一个额外的参数, 而忘记在原来最后一行的末尾添加必要的逗号!

  4. 当声明仅有一个参数的资源时,将声明放在一行上且无需使用结尾的逗号:

    package { "puppet": ensure => installed }
    
  5. 当声明有多个参数的资源时,每个参数占一行:

    package { "rake":
        ensure   => installed,
        provider => gem,
        require  => Package["rubygems"],
    }
    
  6. 当声明 符号链接symlinks)时,使用 ensure => link:

    file { "/etc/php5/cli/php.ini":
        ensure => link,
        target => "/etc/php.ini",
    }
    
  7. 为了使代码便于阅读,所有的箭头以最长一个参数对齐,例如:

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

    每个资源中的箭头(=>)都要对齐,而不是每个文件中的箭头都对齐; 否则会在不同文件之间复制代码时带来麻烦。

更多用法

Puppet Labs 网站上维护着 Puppet 社区规范指南文档: http://docs.puppetlabs.com/guides/style_guide.html

Tim Sharpe 写了一个 puppet-lint 工具, 你可以用它检查你的配置清单是否符合规范。 运行 gem install puppet-lint 安装它,详细的信息请参考 https://github.com/rodjek/puppet-lint