文档章节

puppet自动化运维之函数

perofu
 perofu
发布于 2014/06/10 14:20
字数 942
阅读 1102
收藏 4

定义使用和类相同的基本形式,不同的是它们使用关键字define(而不是class),并且定义支持参数不支持继承。就像之前所提到的,定义可以接收参数并在相同的系统上多次重用

注:define最好在定义时,使用变量,赋值就可以使用class

 

1.无变量格式:

 

define 函数名() {

       type   { "title ":

    attribute   => "value",

              ...

              attribute   => "value";

         }

       ...(各种资源)

       type   { "title ":

    attribute   => "value",

              ...

              attribute   => "value";

         }

}

 

 

2.有变量格式:

 

define 函数名(变量名1,...,变量名n) {             #格式:$var

       type   { "title ":

    attribute   => "变量名",          #格式:${var},下同

              ...

              attribute   => "变量名";

         }

       ...(各种资源)

       type   { "title ":

    attribute   => "变量名",

              ...

              attribute   => "变量名";

         }

}

 

 

3.class中定义define:

 

class 类名 {

define 函数名 (变量名1,...,变量名n) {

              type { "title ":

           attribute => "变量名",          #格式:${var},下同

                     ...

                     attribute   => "变量名",

                }

              ...(各种资源)

              type { "title ":

           attribute => "变量名",

                     ...

                     attribute   => "变量名",

                }

}

}

 

 

 

4.引用define:

①.一般情况(无class):

      

函数名 {

       变量名 => "",

       ...

       变量名 => "",

}

 

 

例:

#定义了一个definition 用来执行一个脚本去配置一个新的主机.

define newip ( $ip ) {

exec {   "/sbin/ifconfig" $title $ip ":

       }

}

 

#引用

newip { eth0:

       ip   => "11.11.11.11"

}

 

#

newip(11.11.11.11) {"eth0":

}

 

 

 

②.class类引用

      

类名::函数名 {

       变量名 => "",

       ...

       变量名 => "",

}

 

例:

我们创建了一个definition叫做newip并且有一个参数叫做$ip,内部定义了我们用来执行资源类型内部二进制代码,这里是ifconfig 命令,我们已经指出变量$ip和使用的另一个变量$title$name

 

#②同上,不过使用了类class

class virtuals {

       define   newip ( $ip ) {

              exec { "/sbin/ifconfig $title   $ip":

              }

       }

}

 

#引用

virtuals::newip { eth0:

ip => "11.11.11.11",

}

#

virtuals::newip(11.11.11.11) { eth0:

}

 

 

#③声明多个参数列表,逗号分割:

define webapp( $domain, $path, $platform   ) {

      ...

}

webapp { "mywizzoapp":

            domain   =>   "mywizzoapp.com",

            path     =>   "/var/www/apps/mywizzoapp",

            platform => "Rails",

}

 

 

#④创建了一个函数(define),并只添加了一个参数,参数又是实例的名字.但是,我们也可以添加任何我们想要的参数,因此我们只要在函数中进行声明.    

 

define   tmpfile( $greeting ) {

       file { "/tmp/$name":

       content => $greeting,

       }

}

 

在声明实例资源的时候,并传递相应的变量值

tmpfile{   "foo": greeting => "Hello, world" }

 

 

 

#⑤为每一个参数指定一个默认的值

define   config_file(owner = root, group = root, mode = 0644,source, backup = false,   recurse = false, ensure = file ) {

       file{ $name:

       mode => $mode,

       owner => $owner,

       group => $group,

       backup => $backup,

       recurse => $recurse,

       ensure => $ensure,

       source => "puppet:///$source"

       }

}

 

config_file   { "/etc/vnc.conf":

source   => "vnc/vnc.conf",

mode   => "0640"

}

 

我们创建了config_file定义, 然后对其应用,这跟函数调用差不多。

 

 

5. VS 定义

类和定义的创建过程都很相似(但类不接收参数),不过他们使用起来非常不同。

定义是用来定义在一个主机上包含多个实例的可重用对象的,所以定义不能包含任何只能有一个实例的资源。比如,多次使用同一个定义不能创建相同的文件。

是独一无二的,无论你包含它们多少次,你只会得到资源的一个副本

大多数时候,服务会被定义成类,服务的包,配置文件以及正在运行的服务都会被定义在类中,因为通常在每一个主机上它们都只有一个副本。(这些有时被惯称为服务————文件)。

定义是用来管理类似虚拟主机这样可以有许多的资源,或者使用一个可重用的封装来包装一些简单的信息,以此来减少代码量。


    至此,puppet的函数就结束了,接下来的是模块的学习,请听下回分解!!!


© 著作权归作者所有

共有 人打赏支持
perofu
粉丝 127
博文 153
码字总数 131146
作品 0
广州
系统管理员
自动化运维工具Puppet在实际工作中的注意事项

自动化运维工具Puppet在实际工作中的注意事项 Puppet在不同平台上的安装方法不一样,个人不是特别推荐用源码的方式,推荐使用yum和apt-get,因为既然用到了puppet环境,说明应用场景的机器数...

余二五
2017/11/10
0
0
puppet 基础应用详解

运维自动化 运维自动化是指将IT运维中日常的、大量的重复性工作自动化,把过去的手工执行转换为自动化操作,自动化是运维工作的生化,运维自动化不单纯是一个维护过程,更是一个管理的提升过...

jungege1216
2014/05/17
0
0
Puppet,Chef,Ansible的共性

本文试图找到类似Puppet、Chef、Ansible这样自动化配置管理工具的共性,以不至于迷失在杂乱的尘世中。总会有各种人为各种目的造概念,来让世界更复杂。 本文同样适用于没有运维经验的人。因为...

翟志军
2016/01/10
2.8K
1
[运维] 第三篇:漫谈数据中心运维自动化

运维自动化是从2010年以后起来的一个运维需求,10年之前,运维项目主要集中在监控和ITIL流程上,当时也有BMC Control-M等产品在推,但是客户接受程度和影响力不如监控和流程。10年之后,运维...

lawsonduan
2016/08/11
0
0
SaltStack;以及与AnsibleWorks,Chef-solo,puppet等等等的比较!

SaltStack;以及与AnsibleWorks,Chef-solo,puppet等等等的比较! ...       http://www.vpsee.com/2013/08/a-system-configuration-management-and-orchestration-tool-saltstack/ 系统......

carocy
2017/10/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【大福利】极客时间专栏返现二维码大汇总

我已经购买了如下专栏,大家通过我的二维码你可以获得一定额度的返现! 然后,再给大家来个福利,只要你通过我的二维码购买,并且关注了【飞鱼说编程】公众号,可以加我微信或者私聊我,我再...

飞鱼说编程
今天
1
0
Spring5对比Spring3.2源码之容器的基本实现

最近看了《Spring源码深度解析》,该书是基于Spring3.2版本的,其中关于第二章容器的基本实现部分,目前spring5的实现方式已有较大改变。 Spring3.2的实现: public void testSimpleLoad(){...

Ilike_Java
今天
1
0
【王阳明心学语录】-001

1.“破山中贼易,破心中贼难。” 2.“夫万事万物之理不外于吾心。” 3.“心即理也。”“心外无理,心外无物,心外无事。” 4.“人心之得其正者即道心;道心之失其正者即人心。” 5.“无...

卯金刀GG
今天
2
0
OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
今天
10
0
vm GC 日志 配置及查看

-XX:+PrintGCDetails 打印 gc 日志 -XX:+PrintTenuringDistribution 监控晋升分布 -XX:+PrintGCTimeStamps 包含时间戳 -XX:+printGCDateStamps 包含时间 -Xloggc:<filename> 可以将数据保存为......

Canaan_
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部