puppet自动化运维之函数

定义使用和类相同的基本形式,不同的是它们使用关键字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的函数就结束了,接下来的是模块的学习,请听下回分解!!!


转载于:https://my.oschina.net/fufangchun/blog/277618

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值