文档章节

puppet自动化运维之函数

perofu
 perofu
发布于 2014/06/10 14:20
字数 942
阅读 1096
收藏 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
博文 152
码字总数 131036
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Shell | linux安装包不用选择Y/N的方法

apt-get install -y packageOR echo "y" | sudo apt-get install package

云迹
3分钟前
0
0
Hadoop的大数据生态圈

基于Hadoop的大数据的产品圈 大数据产品的一句话概括 Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架...

zimingforever
18分钟前
1
0
八大包装类型的equals方法

先看其中一个源码 结论:八大包装类型的equals方法都是先判断类型是否相同,不相同则是false,相同则判断值是否相等 注意:包装类型不能直接用==来等值比较,否则编译报错,但是数值的基本类型...

xuklc
42分钟前
1
0
NoSQL , Memcached介绍

什么是NoSQL 非关系型数据库就是NoSQL,关系型数据库代表MySQL 对于关系型数据库来说,是需要把数据存储到库、表、行、字段里,查询的时候根据条件一行一行地去匹配,当量非常大的时候就很耗...

TaoXu
昨天
0
0
890. Find and Replace Pattern - LeetCode

Question 890. Find and Replace Pattern Solution 题目大意:从字符串数组中找到类型匹配的如xyy,xxx 思路: 举例:words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb"abc ......

yysue
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部