《Puppet实战手册》——2.8 编写功能强大的条件语句

2.8 编写功能强大的条件语句

Puppet的if语句允许用户基于变量或表达式的值来调整清单。有了它,用户可以根据相关节点的某些fact(如操作系统或内存大小)应用(生效)不同的资源或参数值。

此外,也可以通过在清单内设置变量来调整引入的类的行为。例如,在数据中心A的服务器可能需要使用与在数据中心B不同的DNS服务器,或者可能需要为Ubuntu系统使用一组类,而其他系统使用另一组不同的类。

操作步骤
下面是一个非常有用的关于条件语句的例子。

在清单中添加下面的代码:

if $::operatingsystem == 'Ubuntu' {
 notify { 'Running on Ubuntu': }
} else {
 notify { 'Non-Ubuntu system detected. Please upgrade
  to Ubuntu immediately.': }
}

工作原理
Puppet视if关键字后的一切内容为一个表达式,并且为它求值。如果表达式的值为true,Puppe就会执行大括号内的代码。

当然,也可以添加一个else分支。如果表达式计算为false,则else分支将被执行。

更多参考
下面是使用if语句的一些技巧。

elsif分支
也可以使用elsif关键字来做更多的判断。例如,下面的代码:

if $::operatingsystem == 'Ubuntu' {
 notify { 'Running on Ubuntu': }
} elsif $::operatingsystem == 'Debian' {
 notify { 'Close enough...': }
} else {
 notify { 'Non-Ubuntu system detected. Please upgrade to Ubuntu
  immediately.': }
}

比较
可以使用==语法来检查两个值是否相等,如下例所示:

if $::operatingsystem == 'Ubuntu' {
 …

}

或者,也可以使用!=来检查它们是否不相等:

if $::operatingsystem != 'CentOS' {

}

也可以使用<和>来比较数字:

if $::uptime_days > 365 {
 notify { 'Time to upgrade your kernel!': }
}

可以使用<=或>=来检查是否一个值大于(或小于)或等于另一个值。

if $::lsbmajdistrelease <= 12 {

}

组合表达式
可以把前面描述的各种简单的表达式,使用and、or或not组合在一起成为更加复杂的逻辑表达式。

if ($::uptime_days > 365) and ($::operatingsystem == 'Ubuntu') {

}

if ($role == 'webserver') and ( ($datacenter == 'A') or ($datacenter ==
 'B') ) {

}

延伸阅读
参见2.11节。
参见2.10节。

时间: 2024-07-31 21:29:58

《Puppet实战手册》——2.8 编写功能强大的条件语句的相关文章

《Puppet实战手册》——第2章 Puppet语言和风格 2.1简介

第2章 Puppet语言和风格 计算机语言设计就像是在公园里散步,而且是侏罗纪公园. -Larry Wall① 本章内容包括: 使用社区推荐的Puppet风格使用puppet-lint检查配置清单使用模块使用标准的命名约定/规范使用内联模板数组中多个元素的遍历编写功能强大的条件语句在if语句中使用正则表达式使用选择器和case语句使用in运算符使用正则表达式进行替换 2.1 简介 本章中讲解如何编写优雅的Puppet配置清单(Puppet用于配置服务器的程序代码被称为配置清单,以后均使用配置清单

《Puppet实战手册》——导读

** 前言 **IT运维领域正在进行一场革命.新一代的配置管理工具可以在几秒内完成大量服务器的构建(配置)和整个网络自动化.为了充分利用云计算的强大功能,并且建立可靠.可扩展.安全.高性能的系统,拥有Puppet这样的工具是必不可少的.本书不仅讲解了Puppet的基础知识,而且深入探讨了Puppet的所有强大功能,详细展示了如何解决现实中的各种问题和应用场景.每一步操作都完整地展示了需要录入的命令,并且每一个技巧都有完整的代码示例. 本书带领读者从Puppet的基本知识开始,完整.专业地讲解Pu

《Puppet实战手册》——2.9 在if语句中使用正则表达式

2.9 在if语句中使用正则表达式 正则表达式是可以在if语句和其他条件语句中进行测试的另一种表达式.正则表达式是使用模式匹配来比较字符串的一种强大的方式. 操作步骤下面是在条件语句中使用正则表达式的一个例子. 将下面的代码添加到清单文件中: if $::lsbdistdescription =~ /LTS/ { notify { 'Looks like you are using a Long Term Support version of Ubuntu.': } } else { notif

《Puppet实战手册》——2.10 使用选择器和case语句

2.10 使用选择器和case语句 虽然可以用if来编写任何条件语句,但Puppet还是提供提供了一些其他的形式来帮助用户更容易地编写表达条件语句:选择器(selecteor)和case语句. 操作步骤下面是一些关于选择器和case语句的例子. 1. 把下面的代码加入到配置清单中: $systemtype = $::operatingsystem ? { 'Ubuntu' => 'debianlike', 'Debian' => 'debianlike', 'RedHat' => 're

《Puppet实战手册》——1.6 编写papply脚本

1.6 编写papply脚本 人们希望可以尽量简单和简单地将Puppet配置应用到主机上,因此,通常会写一个脚本,它包含puppet apply命令和所需要的参数.要部署这个脚本到需要它的地方,除了Puppet,还有什么更好的工具吗? 操作步骤具体步骤如下. 1. 在Puppet仓库目录中创建puppet模块必需的目录. ubuntu@cookbook:~/puppet$ mkdir modules ubuntu@cookbook:~/puppet$ mkdir modules/puppet u

《Puppet实战手册》——第1章 Puppet基础设施 1.1 简介

第1章 Puppet基础设施 未来计算机可能只有1000个真空管,而且只有1.5吨重. --<大众机械>(Popular Mechanics),1949 本章内容包括: 安装Puppet创建一个配置清单利用Git管理配置清单创建去中心化Puppet架构编写papply脚本使用cron运行Puppet利用Rake部署变更利用Rake引导Puppet运行利用Git钩子自动进行语法检查 1.1 简介 本书包含一些代表着Puppet社区认同的最佳实践的实例,一些可以帮助读者在工作中更容易使用Puppe

《Puppet实战手册》——2.7 数组中多个元素的遍历

2.7 数组中多个元素的遍历 数组是Puppet中的一个强大的功能,无认想对一组元素做何种相同的操作,数组都能够有所帮助.用户可以通过把数组的内容放在方括号中来创建一个数组. $lunch = [ 'franks', 'beans', 'mustard' ]操作步骤下面是一个常见的如何使用数组的例子. 1. 把下面的代码添加到配置清单中. $packages = [ 'ruby1.8-dev', 'ruby1.8', 'ri1.8', 'rdoc1.8', 'irb1.8', 'libreadl

《Puppet实战手册》——1.8 利用Rake部署变更

1.8 利用Rake部署变更 Rake是一个基于Ruby语言编写的实用工具,它可以帮助自动化完成Puppet的工作流程.虽然有很多其他方法支持在远程服务器上运行命令,但是Rake碰巧是本书使用的方法,它很容易扩展,可以非常方便地使用它做任何事. 此处要让Rake为做的第一件事情是:登录到远程服务器上,运行pull-updates脚本,将新修改的Puppet配置清单应用到该服务器上.做起来非常简单,下面来看看它是如何实现的. 准备工作 你可能已经安装了Rake(尝试运行rake命令进行检查),如果

《Puppet实战手册》——1.4 利用Git管理配置清单

1.4 利用Git管理配置清单 把Puppet配置清单存放在版本控制系统Git或Subversion中管理(推荐Git),所有Puppet管理的机器都从仓库取出配置,这是一个非常好的想法.它有以下几个优点. 可以取消对配置清单的更改并回滚至以前任意一个版本. 可以使用新的分支(branch)来测试新功能. 如果有多人需要修改配置清单,可以分别独立在自己的工作副本上进行,然后再合并所有的修改. 可以使用git log功能查看谁在什么时候做了什么修改. 准备工作 本节将导入现有的清单文件到Git仓库