Linux/Python学习论坛-京峰教育

 找回密码
 立即注册

一键登录:

搜索
热搜: 活动 交友 discuz
查看: 1026|回复: 0

Puppet的资源基础知识

[复制链接]
Linux爱好者
Linux爱好者  发表于 2015-4-11 22:35:15 |阅读模式
此篇文章,主要是让读者提前了解puppet资源的一些知识。

    变量和数组会经常用的,你懂得。

    资源或变量,都分为:定义和引用。这一点一定要注意。
1.变量和数组
①、变量:

学过编程的同学,都应该知道变量的优点。一般的变量都区分全局变量和局部变量,以我个人习惯,一般只用全局变量,这样就不必在变量的区分上费时间了。例如,在shell里,我就是这样的。

puppet用$符号定义变量,变量的内容。

声明格式:      $变量名="值"

引用格式:      ${变量名}

例:

vi /etc/puppet/manifest/test.pp

$test="   hello , guys "

file {"/tmp/test":

content => ${test};     # content => " hello , guys   "

}


②、数组:

(1)、直接定义数组:

        puppet利用方括号来定义数组,数组的内容由逗号分割,分别用双引号括起来.

[ "apache2" , " httpd " , " ssh " ]

例:

vi /etc/puppet/manifest/test.pp

$packages = [   "ruby1.8-dev",

"ruby1.8",

"ri1.8",

"rdoc1.8",

"irb1.8",

"libreadline-ruby1.8",

"libruby1.8",

"libopenssl-ruby"   ]

package {   $packages: ensure => installed }




(2)、从字符串创建数组,像这样使用split 函数:

例:

vi /etc/puppet/manifest/test.pp

$menu = "egg   beans chips"

$items =   split($menu, ' ')

lunchprint {   $items: }

Lunch included   egg

Lunch included   beans

Lunch included   chips

注意:split需要两个参数,第1个是需要split的字符串,第二个是split的分隔符。

       split(字符串,分隔符)


vi /etc/puppet/manifest/test.pp

$menu = "egg and beans and chips"

$items = split($menu, 'and')



例:正则表达式

vi /etc/puppet/manifest/test.pp

$lunch = "egg:beans,chips"

$items = split($lunch, ':|,')


2.资源总述

puppet基本单元是资源。资源描述了系统的某些方面的属性,这些方面包括文件,服务,软件包甚至是你自定义的一个资源。

定义一个资源,需要指定资源的type(类型)和资源的title(标题)。

格式:

type { "title1 ",…,"title ":

    attribute => "value",

              ...

              attribute => "value";

  }

例:

vi /etc/puppet/manifest/test.pp

file{"/etc/passwd":

name =>   "/etc/passwd",

owner => root,

group => root,

mode => 644;

}



    上面的代码让/etc/passwd的权限保持644,并且属于root用户和root用户组;

第一行的file是指定资源的类型是"file"类型;

第二行的"/etc/passwd"是资源title,title的作用是让puppet能唯一标识这个资源;第三行的name指定了要对那个文件操作,默认情况下,name都等于title,所以很多时候name是可以省略的。这点要注意。

例:

vi /etc/puppet/manifest/test.pp

file{"sshdconfig":

name =>   $operatingsystem ? {

solaris =>   "/usr/local/etc/ssh/sshd_config",

default =>   "/etc/ssh/sshd_config";

},

owner => root,

group => root,

mode => 644,

}



    资源的title是sshdconfig,但是name却可以通过判定操作系统自己选择合适的值。这样,当其他的资源要依赖sshdconfig的时候,只需要说明依赖sshdconfig就行,不需要关心文件到底在什么路径下面。例如下面的代码:

vi /etc/puppet/manifest/test.pp

service   {"sshd":

subscribe =>   File[sshdconfig],

}


    指定了一个sshd的服务,这个服务如果发现文件资源sshdconfig 有变动,就会自己reload配置文件。是不是很方便呢?注意上面的subscribe后面的File,第一个字母要大写,定义资源关系的时候,这里的字母要大写。

通常,在puppet代码里面可能会定义很多相同的资源,可以用[]把所有资源的title写在一起,即数组,例如:

vi /etc/puppet/manifest/test.pp

file{["/etc/passwd","/etc/hosts"]:

owner => root,

group => root,

mode => 644;

}



    你可能已经发现了,每次定义文件的时候如果都输入mode,owner,group会很繁琐,因此你可以在puppet的site.pp的开头定义资源的默认值。

定义资源的默认值需要把资源的第一个资源大写。例如下面的代码让所有的file资源的mode是644,owner是root。默认值可以被后面的设置覆盖。

vi /etc/puppet/manifest/test.pp

File{owner   => root,mode => 644;}


    在puppet里面可以定义资源之间的关系,例如前面提到的,如果sshdconfig文件如果有修改,sshd服务就重启。puppet里面还有另一个资源关系:依赖。例如资源A依赖资源B,如果资源B不存在,资源A就不被执行。定义资源依赖的属性是requre 。例如:

vi /etc/puppet/manifest/test.pp

file{"/etc/apache2/port.conf":

content =>   "80",

require   => Package["apache2"];

}



package{"apache2":

ensure   =>installed;

}



    file资源设置port.conf的内容为80,但是在设置file资源之前,要求apache2这个软件包配置好了(即file资源依赖Package["apache2"])。


3.资源的类型

    puppet的资源是由具体的系统管理任务抽象而来的,系统管理中遇到什么任务,就会有相应的资源类型,目前puppet支持的资源类型有:

    file           文件/目录的管理

    package        软件包的管理(yum install|remove)

    service        服务的管理(start|restart|stop|status)

    cron           crontab定时任务的管理

    user           添加用户

    group          添加用户组

     exec           shell命令

    notify         资源之间的通讯


    至此,puppet的资源基础知识就结束了,变量和数组会经常用的,接下来的是puppet的file资源学习,请听下回分解!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|京峰教育,只为有梦想的人 ( 京ICP备15013173号 )

GMT+8, 2019-6-24 16:46 , Processed in 0.047725 second(s), 15 queries , Apc On.

快速回复 返回顶部 返回列表