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

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.

主站蜘蛛池模板: 景宁| 墨竹工卡县| 大悟县| 永丰县| 临清市| 龙门县| 甘德县| 绿春县| 清徐县| 武邑县| 涪陵区| 玉环县| 荥经县| 沙坪坝区| 九江市| 冀州市| 巩留县| 鄱阳县| 潜江市| 承德市| 凯里市| 莱芜市| 亚东县| 尚义县| 米泉市| 呼和浩特市| 普兰店市| 翁源县| 河北省| 麻栗坡县| 江门市| 西丰县| 太原市| 宜春市| 广安市| 阳城县| 娄烦县| 上饶市| 和硕县| 泰宁县| 黄平县|