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

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.

主站蜘蛛池模板: 岐山县| 柳江县| 饶阳县| 乌鲁木齐县| 外汇| 沾化县| 阿荣旗| 峨眉山市| 扎兰屯市| 平江县| 师宗县| 阳原县| 建湖县| 新乡市| 邵阳市| 隆安县| 怀安县| 民和| 朔州市| 洛宁县| 桂阳县| 绥江县| 富顺县| 枣阳市| 金湖县| 西宁市| 凭祥市| 汝阳县| 高清| 瑞丽市| 邓州市| 正宁县| 铜梁县| 连江县| 介休市| 兴仁县| 内黄县| 昭苏县| 哈密市| 金湖县| 普兰县|