博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
puppet自动化运维之函数
阅读量:6738 次
发布时间:2019-06-25

本文共 2523 字,大约阅读时间需要 8 分钟。

hot3.png

定义使用和类相同的基本形式,不同的是它们使用关键字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

你可能感兴趣的文章
手把手玩转win8开发系列课程(11)
查看>>
Spring AOP源码分析(八)SpringAOP要注意的地方
查看>>
SparkContext的初始化(季篇)——测量系统、ContextCleaner等组件介绍
查看>>
一千零一夜:检查数组包含某一目标元素的几种方法分析
查看>>
poj 1273 Drainage Ditches
查看>>
SoC嵌入式软件架构设计
查看>>
[LeetCode]38.Count and Say
查看>>
网络协议系列之八:TCP差错控制
查看>>
《Apache Velocity用户指南》官方文档
查看>>
docker network case with customized bridge
查看>>
3月10日SLB、CDP、OCS、OSS升级公告
查看>>
用JDK开发web service
查看>>
Linux下Tomcat8的安装
查看>>
CFRunLoop
查看>>
Vue父子组件常用通信
查看>>
阿里云函数计算简单介绍
查看>>
【javaScript基础】执行上下文
查看>>
(九)Java springcloud B2B2C o2o多用户商城 springcloud架构 - commonservice-config配置服务搭建...
查看>>
三角知识
查看>>
基于ARM的智能灯光控制系统(8)设备添加
查看>>