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

Adding control structures in manifests

You have written three simple manifests while following the instructions in this chapter so far. Each comprised only one resource, and one of them was given on the command line using the -e option. Of course, you would not want to write distinct manifests for each possible circumstance. Instead, just as how Ruby or Perl scripts branch out into different code paths, there are structures that make your Puppet code flexible and reusable for different circumstances.

The most common control element is the if/else block. It is quite similar to its equivalents in many programming languages:

if 'mail_lda' in $needed_services {
  service { 'dovecot': enable => true }
} else {
  service { 'dovecot': enable => false }
}

The Puppet DSL also has a case statement, which is reminiscent of its counterparts in other languages as well:

case $role {
  'imap_server': {
    package { 'dovecot': ensure => 'installed' }
    service { 'dovecot': ensure => 'running' }
  }
  /_webserver$/: {
    service { [ 'apache', 'ssh' ]: ensure => 'running' }
  }
  default: {
    service { 'ssh': ensure => running }
  }
}

A variation of the case statement is the selector. It's an expression, not a statement, and can be used in a fashion similar to the ternary if/else operator found in C-like languages:

package { 'dovecot':
  ensure => $role ? {
    'imap_server' => 'installed',
    /desktop$/    => 'purged',
    default       => 'removed',
  },
}

It should be used with caution, because in more complex manifests, this syntax will impede readability.

主站蜘蛛池模板: 尉氏县| 库尔勒市| 麻江县| 灵武市| 调兵山市| 达孜县| 海丰县| 永安市| 蓝山县| 松溪县| 喀喇沁旗| 镇原县| 阳东县| 吴堡县| 东阿县| 苏尼特左旗| 香港 | 潮州市| 将乐县| 凤山市| 定远县| 柳州市| 青铜峡市| 晋城| 田东县| 嘉义县| 江华| 咸丰县| 宜兰市| 汽车| 木兰县| 兰溪市| 新民市| 敦煌市| 陇川县| 遵义市| 七台河市| 秦皇岛市| 西贡区| 安陆市| 逊克县|