Puppet 条件判断语句(十六)

目前puppet2.7以上版本都支持if...elif ...else...、selecter和case语句.它们的条件判断分为两类:一类为条件执行(if...elif ...else...、selecter)通过逻辑判断来选择要执行的特定代码或加载代码;另一类(case)是循环执行类,依照代码规则来执行代码或加载代码.

if条件判断语句:

示例一:

if判断系统发行版本安装apache软件包:

[[email protected] ~]# cat apache.pp 
if $operatingsystem == ‘CentOS‘ {
    $packages = ‘httpd‘
} elsif $operatingsystem == ‘Redhat‘ {
    $packages = ‘httpd‘
} else {
    $packages = ‘apache2‘
}
    package {"$packages":
    ensure=> "present",
}

本地应用puppet代码:

[[email protected] ~]# puppet apply apache.pp 
Notice: Compiled catalog for sh-web1.localdomain in environment production in 0.04 seconds
Notice: /Stage[main]/Main/Package[httpd]/ensure: created
Notice: Finished catalog run in 1.78 seconds

注意:"=="是等于的意思,完完全全匹配到对应的.

示例二:

if匹配hostname主机载入相应的puppet模块.(if在node.pp文件中匹配主机很少用,几乎都是用case.)

node base {
    include admin
}
node /sh-(proxy|web)\d+/  inherits base {
    if $hostname =~ /sh-proxy\d+/ {
        include apache
    } elsif $hostname =~ /sh-web\d+/ {
        include php
    } else {
        include nginx::nginxconf
    }
}

agent端更新puppet代码.

[[email protected] ~]# puppet agent -t
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for sh-proxy2.localdomain
Info: Applying configuration version ‘1506450177‘
Notice: /Stage[main]/Admin/Exec[selinux]/returns: executed successfully
Notice: /Stage[main]/Install/Package[httpd]/ensure: created
Notice: /Stage[main]/Service/Service[httpd]/ensure: ensure changed ‘stopped‘ to ‘running‘
Info: /Service[httpd]: Unscheduling refresh on Service[httpd]
Notice: Finished catalog run in 20.24 seconds

agent端更新puppet代码.

[[email protected] ~]# puppet agent -t
Notice: Ignoring --listen on onetime run
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for sh-web1.localdomain
Info: Applying configuration version ‘1506450177‘
Notice: /Stage[main]/Admin/Exec[selinux]/returns: executed successfully
Notice: /Stage[main]/Php/Package[php]/ensure: created
Notice: /Stage[main]/Php/Package[php-devel]/ensure: created
Notice: Finished catalog run in 4.01 seconds

注意:"=~"是匹配的意思,只要匹配到就行.

case语句应用:

示例:(之前文章一直都在用的匹配方法case)

node base {
include admin
}
node /sh-(proxy|web)\d+/  inherits base {
  case $::hostname {
    /sh-proxy\d+/: {
         include apache
      }
     "sh-web1": {
            include nginx::nginxconf
            include php
         } 
    }
}

agent端更新就不演示了,上面的case语句博客开始就是这样写的.

时间: 2024-09-28 20:34:04

Puppet 条件判断语句(十六)的相关文章

sas条件判断语句

if语句<可执行语句> data b; set sashelp.class; if _n_ le 4; *如果if为真,则继续执行if后面的语句,最后输出满足if的条件的观测,如果if为假则立刻返回到data步开头继续执行下一条set语句; y = 'now'; /* y = 'now'; if _n_ le 4;也能得出同样的结果,但是效率相对来说较低,因为要重复执行y的赋值语句 */ run; if的另外两种格式if x=3 then y=4; 对于要表达的只有一条数据就用thenif x

条件判断语句比较

条件判断语句比较 流程控制进行条件语句判断的时候,经常用到各种数据类型的变量与零值比较的问题,这里进行一个总结加深对数据类型的认识,不规范的与零比较语句容易让人对参与比较的数据类型产生误解. §1. 布尔变量与零值比较 C++有bool类型,C99标准才有布尔类型_Bool,用整型代替布尔类型,非0表示真,0表示假,如果你的编译器不支持布尔类型,可以自定义类型enum_BOOL{FALSE = 0,TRUE = !FALSE}. 不可将布尔变量直接与TRUE.FALSE或者1.0进行比较,假设布

条件判断语句 if语句/switch语句

if(条件表达式)语句 if语句即条件判断语句,对于if语句括号里的表达式,ECMAScript会自动调用Boolean()转型函数将这个表达式的结果转换成一个布尔值.如果值为true,执行后面的一条语句,否则不执行 <script type="text/javascript"> var box = 100; if (box > 50) //if 语句里的表达式如果返回的false,只会不执行后面的一条语句 alert(box); //第二条语句,和if语句无关,所以

if条件判断语句的不同

let number = ["a":1, "b":2, "c":3]; if let num = number["d"] { print(num) } 看似条件语句是个赋值语句,而我们若如下这样定义: if let n = 1 { } 不行,语法报错的,if条件判断语句只有true与false,初看两个例子差不多,主要是刚接触,对可选类型不太熟,第一个例子中num值是可选类型 int?,它的展开形式如下: let number

21_Shell语言——条件判断一之执行状态返回值、单分支条件判断语句

一.选择执行语句概述 面向过程的程序其流程控制结构主要有三种:1. 顺序执行:2. 循环执行:3. 选择执行.前文中介绍了循环执行,本章及后续章节将重点介绍选择执行这种结构. 选择执行是指当程序执行过程中如果满足指定条件,就执行其中一部分内容,否则就执行其他内容,即只是有选择性的执行测试条件的相关内容. 现在设想,如果要添加用户user1,可以使用useradd user1来实现.但如果user1用户已经存在了,那么执行useradd user1时就会报错.为了避免这种情况,就需要在执行前先测试

求 1+2+...+n, 要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句 (A?B:C)。

求 1+2+...+n,要求不能使用乘除法.for.while.if.else.switch.case 等关键字以及条件判断语句 (A?B:C). #include <bits/stdc++.h> using namespace std; int Sum(int n) { int Ret = 0; n == 0 || (Ret = Sum(n-1)); return n + Ret; } class A{ public: A() { sum += ++n; } static int sum;

Js的三种条件判断语句

Js的三种条件判断语句 If if语句 只有当指定条件为 true 时,使用该语句来执行代码. 语法 if (条件) { 只有当条件为 true 时执行的代码 } if...else 语句 在条件为 true 时执行代码,在条件为 false 时执行其他代码. 语法 if (条件) { 当条件为 true 时执行的代码 } else { 当条件不为 true 时执行的代码 } If...else if...else 语句 使用 if....else if...else 语句来选择多个代码块之一来

题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)

题目:求1+2+…+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字以及条件判断语句(A?B:C). 分析:这道题没有多少实际意义,因为在软件开发中不会有这么变态的限制.但这道题却能有效地考查发散思维能力,而发散思维能力能反映出对编程相关技术理解的深刻程度. 通常求1+2+…+n除了用公式n(n+1)/2之外,无外乎循环和递归两种思路.由于已经明确限制for和while的使用,循环已经不能再用了.同样,递归函数也需要用if语句或者条件判断语句来判断是继续

求1+2+3+...+n的值,要求不能使用乘除法,for、while、if、else、switch、case、等关键字及条件判断语句(JAVA)

采用递归和三目表达式注意红色字体一定不能写成n-- 1 package com.hunag; 2 3 public class Sum { 4 5 static int sum; 6 public static int isum(int n) 7 { 8 sum+=n; 9 sum=n==0?sum:isum(--n); 10 System.out.println(n); 11 return sum; 12 } 13 public static void main(String[] args)