文档章节

puppet自动化运维之函数

perofu
 perofu
发布于 2014/06/10 14:20
字数 942
阅读 1106
收藏 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
粉丝 128
博文 155
码字总数 131715
作品 0
广州
系统管理员
私信 提问
自动化运维工具Puppet在实际工作中的注意事项

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

余二五
2017/11/10
0
0
Puppet,Chef,Ansible的共性

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

翟志军
2016/01/10
2.8K
1
puppet 基础应用详解

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

jungege1216
2014/05/17
0
0
[运维] 第三篇:漫谈数据中心运维自动化

运维自动化是从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

没有更多内容

加载失败,请刷新页面

加载更多

2019-1-16

2019-1-16 星期三 晴转霾 早饭:小面包+鸡蛋糕;午饭:馍+地三鲜;晚饭:; 6:50起床,因为媳妇说可能今天晚上去大雁塔那边吃饭,早上起来后洗了个澡(主要因为头发很油了)。 今天早上天气...

莱菔籽
6分钟前
0
0
localDate、localDateTime、localTime的使用

从前端接受的时候,localDate类型的数据要转换,加 @DateTimeFormat(pattern = "yyyy-MM-dd")

shimmerkaiye
12分钟前
1
0
1.二叉树

概念 二叉树(binary tree)是每个节点最多只有两个分支(即不存在分支度大于2的节点)的结构树。通常分支被称为“左子树”和“右子树”,左子树和右子树的位置不能随意颠倒。二叉树的第i层 ...

火拳-艾斯
16分钟前
2
0
java 线程

一、通过实现Runnable接口来创建线程 public class TestThread implements Runnable { public void run() { try { for (int i = 0; i < 10; i++) { ......

朝如青丝暮成雪
21分钟前
1
0
关于eclipse2017 import javax.servlet.jsp.tagext引入错误得问题

在eclipse中: 这个javax.servlet.jsp.tagext属于是tomcat相关jar包找到jsp-api.jar 在tomcat文件夹下边的lib文件夹中就有 如果项目中报错的话 把这个加入到项目中 在myeclipse中: 如下图,...

ZhangLG
35分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部