- 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.
- ASP.NET MVC4框架揭秘
- JavaScript修煉之道
- Vue.js 3.x從入門到精通(視頻教學版)
- 從程序員到架構師:大數據量、緩存、高并發、微服務、多團隊協同等核心場景實戰
- VMware vSphere 6.7虛擬化架構實戰指南
- Asynchronous Android Programming(Second Edition)
- D3.js By Example
- Python全棧數據工程師養成攻略(視頻講解版)
- Access 2010中文版項目教程
- Odoo 10 Implementation Cookbook
- Raspberry Pi Robotic Blueprints
- Web程序設計:ASP.NET(第2版)
- Java Hibernate Cookbook
- 虛擬現實建模與編程(SketchUp+OSG開發技術)
- INSTANT EaselJS Starter