- Puppet 4 Essentials(Second Edition)
- Felix Frank Martin Alfke
- 254字
- 2021-07-30 09:58:42
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.
- Getting Started with Citrix XenApp? 7.6
- GAE編程指南
- Effective C#:改善C#代碼的50個有效方法(原書第3版)
- CentOS 7 Server Deployment Cookbook
- Python爬蟲開發:從入門到實戰(微課版)
- Java 9 Programming Blueprints
- Java:Data Science Made Easy
- Python Network Programming Cookbook(Second Edition)
- JSP開發案例教程
- Learning Python by Building Games
- 微信小程序入門指南
- Linux:Embedded Development
- Clojure Reactive Programming
- 硬件產品設計與開發:從原型到交付
- 軟件測試技術