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.
- DBA攻堅指南:左手Oracle,右手MySQL
- Visual Basic編程:從基礎到實踐(第2版)
- R語言編程指南
- UML+OOPC嵌入式C語言開發精講
- Visual Basic程序設計實驗指導(第4版)
- R語言與網絡輿情處理
- ASP.NET Core 2 Fundamentals
- Python極簡講義:一本書入門數據分析與機器學習
- Mastering Unity 2D Game Development(Second Edition)
- Python從入門到精通
- Extending Unity with Editor Scripting
- 分布式架構原理與實踐
- Java Web開發教程:基于Struts2+Hibernate+Spring
- Bitcoin Essentials
- Backbone.js Patterns and Best Practices