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

Adding control structures in manifests

So far, you have written three simple manifests while following the instructions in this chapter. 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, }
}
/_webservers$/: {
service { [‘apache’, ‘ssh’]: ensure => running, }
}
default: {
service { ‘ssh’: ensure => running, }
}
}

At the second matcher, you can see how it is possible to use regular expressions.

The case statement can also be used to switch to specific code based on variable data types:

case $role {
Array: {
include $role[0]
}
String: {
include $role
}
default: {
notify { 'This nodes $role variable is neither an
Array nor a String':}
}
}

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',
},
}

Similar to the case statement, the selector can also be used to return results, depending on the data types:

package { 'dovecot':
ensure => $role ? {
Boolean => 'installed',
String => 'purged',
default => 'removed',
},
}

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

主站蜘蛛池模板: 湖北省| 荆门市| 洛宁县| 柯坪县| 荥阳市| 济南市| 翁牛特旗| 张家口市| 石棉县| 阿拉善右旗| 望江县| 竹北市| 建水县| 仙居县| 镇康县| 泊头市| 漠河县| 灌阳县| 博客| 安塞县| 沁水县| 庐江县| 海南省| 子洲县| 阿拉善左旗| 无为县| 分宜县| 商河县| 赤壁市| 临朐县| 怀来县| 共和县| 湄潭县| 丹巴县| 弥勒县| 铜陵市| 苏尼特左旗| 明光市| 横山县| 福建省| 策勒县|