linux if 语句不换行,Linux自动化运维之puppet的表达式和判断语句

本文介绍了Puppet配置管理工具中的变量使用规范及其数据类型,包括字符串、布尔值、数值等,并详细阐述了Puppet中的各种表达式,如条件判断语句if、case等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要

puppet的变量名称必须以”$”开头,赋值操作符为”=”,任何正常数据类型(非正则)的值都可以赋予puppet中的变量,如字符串、数值、布尔值、数组、hash以及特殊的undef值(即变量未被赋值)。puppet的每个变量都有两个名字:简短名称和长格式完全限定名称(FQN),完全限定名称的格式为”$scope::variable”

一、puppet变量

1、名称必须以$开头:赋值使用=,支持追加赋值+=

2、变量名称引用的格式:简短名称和FQN

$scope::v

ariable

32ba4b3504f8423e3708a2f1469fdfc9.png

puppet的数据类型

1、直接字串(字串可以用引号也可以不用,单双都可以但是单引号是强引用)(换行,符为\n,Windows中为\r\n)

2、布尔型 : ture false,有些类型会自动转换为布尔型譬如:非空为ture,空为false,任何未定义的都是false,任何hash都是ture,任何资源引用都是ture

3、数值:有整数和浮点数可以使用("-"负号)

4、属组:保存在中括号内的值,属组中的元素可以是任意能够接受的puppet数值类型

$array=['red','blue','green']

$array[0]=red,$array[1]=blue,$array[3]=green

例子:package {['nginx','php','mysq']:

}

5、hash:key只能使用字串,value可以是puppet支持的任意类型

{key1 => value1,key2 => value2,key3 => value3,key4 => value4,key5 => value5,}

例子:$dic = {1 => 'monday', 2 => 'tuesday'}

$dic[1]=monday

6、undey:未定义的,不能加引号

puppet支持的变量

自定义变量

facter变量:可以在语言中直接调用

内置变量:

1)、agent端内置变量

$clientcert

$clientversion

2)、master端内置变量

$servername

$serverip

$serverversion

$module_name

二、puppet表达式

1、puppet的操作符:

$osfamily == "CentOS" 毕竟表达式

$kernel in ['Linux','solaris','freebsd'] 判断kernel是不是这三种中的一种

2、puppet的条件判断语句:

puppet2.7中有"if"、"case"、"selectors",而在3.7中引入了"unless"

1、if语句

5def0bf55536f4d4b5560c60f41e035c.png

2、case语句

类似if语句,case语句会从多个代码块中选择一个分支执行,这跟 其他语言中的case语句功能一致

case语句会接受一个控制表达式和一组case代码块,并执行打一个匹配到的控制表达式的块

1)、控制表达式可以是puppet代码中的任何代码片段(可以是单个变量,可以是一个表达式例如算法表达式,可以是一个有返回值的函数)

2)、各case分支可以是一个直接值、可以是个变量、可以是一个有返回单个值的函数、可以是一个正则表达式、可以是默认值default

c23d74d4a79bc019c79128f0ec8abe60.png

3、selector语句

selector只能用于期望出现直接值(planin value)的地方,这包括变量赋值、资源属性、函数参数、资源标题、其他selector的值及表达式

selector不能用于一个已经嵌套于selector的case中,也不能用于一个已经嵌套于case的case语句中

1)、整个selector语句会被当作一个单独的值,puppet会将控制变量按列出的次序与每个case进行比较,并在遇到一个匹配的case后,将其值作为整个语句的值进行返回,并忽略后其他的case

2)、控制变量与各case比较的方式与case遇见相同,但如果没有任何一个case与控制变量匹配时,puppet在编译时会将返回一个错误,因此实践中其必须提供defeat case

3)、selector的控制变量只能是变量或有返回值的函数,切记不能使用表达式

4)、其各case可以是直接值(需加引号)、 变量、能调用返回值的函数、正则表达式模式或default

5)、但与case语句所不同的是 selector的各case不能使用列表

6)、selector的各case的值可以是一个除了hash以外的直接值、变量、能调用返回值的函数或其他selector

b434e23e8ce3c3bf2d6950840a98af5c.png

4、unless语句

基本没什么可讲的和if单分支语句取反一个意思

052fe1a0791f43322d97ffc0785dc318.png

演示 & 示例

[root@Legion100 /tmp/puppet]# cat if.pp

if $operatingsystem == 'CentOS' {

notice("Welcome to CentOS.")

}

elsif $operatingsystem == 'Ubuntu' {

notice("Welcome to Ubuntu.")

}

elsif $operatingsystem == 'RedHat' {

notice("Welcome to RedHat.")

}

else {

notice("Welcome, ET.")

}

[root@Legion100 /tmp/puppet]# puppet apply if.pp

Notice: Scope(Class[main]): Welcome to CentOS.

Notice: Compiled catalog for legion100.dwhd.org in environment production in 0.02 seconds

Notice: Finished catalog run in 0.07 seconds

[root@Legion100 /tmp/puppet]#

d45db2b24cc5e087e09bfd4b5e917dd1.png

[root@Legion100 /tmp/puppet]# cat if2.pp

if $operatingsystem =~ /^(?i-mx:(centos|ubuntu|debian|redhat))/ {

notice("Welcome to $1.")

}

[root@Legion100 /tmp/puppet]# puppet apply if2.pp

Notice: Scope(Class[main]): Welcome to CentOS.

Notice: Compiled catalog for legion100.dwhd.org in environment production in 0.02 seconds

Notice: Finished catalog run in 0.05 seconds

[root@Legion100 /tmp/puppet]#

ca97002b53e2e64be3058725f67d8552.png

[root@Legion100 /tmp/puppet]# cat case.pp

case $operatingsystem {

'Solaris':{ notice("Welcome to Solaris.") }

/^(Ubuntu|Debian)$/:{ notice("Welcome to Debian OSFamily.") }

'CentOS','RedHad':{ notice("Welcome to RedHat OSFamily.") }

default:{ notice("Welcome, ET *_*") }

}

[root@Legion100 /tmp/puppet]# puppet apply case.pp

Notice: Scope(Class[main]): Welcome to RedHat OSFamily.

Notice: Compiled catalog for legion100.dwhd.org in environment production in 0.02 seconds

Notice: Finished catalog run in 0.08 seconds

[root@Legion100 /tmp/puppet]#

889e392b4af439d0d70e9a494c701322.png

[root@Legion100 /tmp/puppet]# service nginx stop

停止 nginx: [确定]

[root@Legion100 /tmp/puppet]# cat apache.pp

$webserver = $operatingsystem ? {

/(?i-mx:ubuntu|debian)/ => 'apache2',

/(?i-mx:centos|redhat)/ => 'httpd',

}

package {"$webserver":

ensure => present,

}

[root@Legion100 /tmp/puppet]# puppet apply apache.pp 2>/dev/null

Notice: Compiled catalog for legion100.dwhd.org in environment production in 0.32 seconds

Notice: Finished catalog run in 0.28 seconds

[root@Legion100 /tmp/puppet]# rpm -q httpd

httpd-2.2.15-39.el6.centos.x86_64

[root@Legion100 /tmp/puppet]#

b5b165dd2c26ef0c2b617ecb398afc0e.png

[root@Legion100 /tmp/puppet]# cat lamp.pp

$webserver = $operatingsystem ? {

/(?i-mx:ubuntu|debian)/ => 'apache2',

/(?i-mx:centos|redhat)/ => 'httpd',

}

package {["$webserver","php","mysql-server"]:

ensure => present,

}

service {['mysqld',httpd]:

ensure => true,

enable => true,

}

[root@Legion100 /tmp/puppet]# puppet apply lamp.pp 2>/dev/null

Notice: Compiled catalog for legion100.dwhd.org in environment production in 0.38 seconds

Notice: /Stage[main]/Main/Package/ensure: created

Notice: /Stage[main]/Main/Service[httpd]/ensure: ensure changed 'stopped' to 'running'

Notice: /Stage[main]/Main/Package[mysql-server]/ensure: created

Notice: /Stage[main]/Main/Service[mysqld]/ensure: ensure changed 'stopped' to 'running'

Notice: Finished catalog run in 18.07 seconds

[root@Legion100 /tmp/puppet]# ss -tnlp | grep mysql

LISTEN 0 50 *:3306 *:* users:(("mysqld",61841,10))

[root@Legion100 /tmp/puppet]# ss -tnlp | grep http

LISTEN 0 511 :::80 :::* users:(("httpd",61590,4),("httpd",61594,4),("httpd",61595,4),("httpd",61596,4),("httpd",61597,4),("httpd",61598,4),("httpd",61600,4),("httpd",61601,4),("httpd",61603,4))

[root@Legion100 /tmp/puppet]#

7afd7247543343b2be58832dd657d7ad.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值