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

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.

主站蜘蛛池模板: 铜陵市| 磐安县| 会同县| 苏尼特右旗| 永兴县| 会同县| 静乐县| 巢湖市| 镇沅| 高青县| 南丰县| 偏关县| 东乡族自治县| 平乐县| 思南县| 广南县| 三原县| 筠连县| 蒲江县| 邵武市| 普定县| 临猗县| 土默特左旗| 当雄县| 金门县| 龙游县| 固安县| 克东县| 普兰店市| 浙江省| 华容县| 钟山县| 东乌珠穆沁旗| 石门县| 河曲县| 鹤壁市| 嵩明县| 松江区| 佳木斯市| 伊宁市| 万山特区|