puppt资源文件基础编写

一、puppet资源

puppet的资源文件通常以.pp结尾,资源是puppet 的基本元素,每个定义的资源都具有标题、类型及一系列的属性。
puppet定义资源的默认语法为:

     type {'title':
      attribute1 => value1,
      atrribute2    => value2,
      ……
     }

puppet的资源定义有三个特殊属性NAMEVAR、ensure和Provider,分别表示定义资源的名称、资源的目标状态和资源的管理接口。
puppet的资源定义具有以下特性:
1、puppet使用title在编译时区分每个资源,并使用命令变量(NAMEVAR)在执行时区分资源。
2、在同一类资源中其资源的title和NAMEVAR都是唯一的。
3、每个类型的资源都有部分属性具有默认值。
4、如果在某一个资源中,不指定其NAMEVAR值,则默认使用其title的值。

二、puppet的资源类型

1、group

此类型用于管理用户组资源,其常用的属性包括但不限于:

name:用于设置用户组名。
gid:用于蛇用户组ID。
system:用于设置此组是否为系统组,true or false。
ensure:目标状态,present or absent。
members:成员用户。

资源例子:

group{'charles':
        ensure => present,
        name => 'charles',      
}   

2、user

此类型用户定义用户资源,其属性包括但不限于:

name:设置用户名。
uid:设置UID。
gid:设置基本组ID。
groups:设置附加组,注意,不能包含基本组。
comment:添加注释。
expiry:设置用户账号过期时间。
home:设置用户家目录。
shell:设置用户的默认shell。
system:设置该用户是否为系统 用户。
ensure:设置该用户资源的状态。
password:设置用户的登录密码,需为加密后的密码串。
b

资源例子:

user{'charles':
        ensure => present,
        name => 'charles',
        shell => '/bin/bash',
        password => '$6$MFMKzg2y3Obrujqi$KOuDgG8kdE3v3Bl0I8LEpCe.LZOqM1ZNerBCPdfwBnmkDbC4ZhLJlXKd/yp/7JSu9PZ4JrCpVmWviCbK3Cyss.',
}

3、package

用于管理包组资源,其属性包括但不限于:

ensure:用于指明包资源的状态,包括:installed、present、latest、absent等等。
name:指明包名。
source:指定安装包的来源路径。
provider:指定如何安装包,如rpm、yum等等的方式。

资源例子:

package{'nginx':
        ensure => latest,
        provider => yum,
        require => Package['epel']
}

package{'epel':
        ensure => latest,
        provider => yum,
        name => 'epel-release',
}

4、service

用于管理服务资源,其属性包括但不限于:

ensure:指定服务的运行状态,running or stopped。
enable:指定服务是否开机自启动,true or false。
name:指定服务名称。
path:指定搜索启动脚本的路径。
hasrestart:用于指定带有restart命令的脚本,如果没有restart选项,则会默认调用stop和start来组合完成重启动作。true or false
restart:手动定义用于重启的命令,通常用于定义reload的操作。
subscribe => File["配置文件路径"]:当配置文件改变的时候,重启服务。

资源例子:

service{'nginx':
        ensure => running,
        enable => true,
        name => 'nginx',
        require => Package['nginx'],
}

5、file

用于管理文件资源,包括文件的属主、属组和访问权限等,其属性包括但不限于:

ensure:指定文件的状态及类型,常用值:present、absent、file、directory、link。
path:指定目标文件的路径。
source:指定源文件路径。
content:指定文件内容。
target:指定符号链接的目标文件。
owner:指定文件的属主。
group:指定文件的属组。
mode:指定文件的权限。
atime/ctime/mtime:指定文件的时间戳属性。

资源示例:

      file{'test.txt':
       path => '/tmp/test.txt',
       ensure => file,
       source => '/etc/fstab',
      }

      file{'test.symlink':
       path => '/tmp/test.symlink',
       ensure => link,
       target => '/tmp/test.txt',
       require => File['test.txt'],
      }

      file{'test.dir':
       path => '/tmp/test.dir',
       ensure => directory,
       source => '/etc/yum.repos.d/',
       recurse => true,
      }

6、exec

用于定义指定的命令资源,定义的命令必须可以重复执行多次并且不产生额外的错误。其常用属性包括:

command:指明要运行的命令,不指定的话默认为namevar的值。
cwd:切换到指定的目录下执行命令。
creates:文件路径,仅此路径表示的文件不存在时,command方才执行。
user/group:运行命令的用户身份。
path:指定所使用命令的存放路径。
onlyif:此属性指定一个命令,此命令正常(退出码为0)运行时,当前command才会运行。
unless:此属性指定一个命令,此命令非正常(退出码为非0)运行时,当前command才会运行。
refresh:重新执行当前command的替代命令。
refreshonly:仅接收到订阅的资源的通知时方才运行。

资源例子:

exec{'useradd':
        command => 'useradd user1 ; echo "123456"| passwd --stdin user1',
        unless => 'id user1',
        path => '/bin:/sbin',
}

7、cron

用于安装管理cron资源,每一个cron任务资源都必须提供 一个任务和至少一个周期属性,其常用属性包括:

command:需要周期执行的任务命令。
ensure:cron任务资源的状态。
hour/minute/monthday/month/weekday:定义时间周期属性
user:定义该cron任务以哪个用户身份运行。
target:添加为指定用户的周期任务。
name:cron周期任务的名称。

资源示例:

    cron{'timesync':
     command => '/usr/sbin/ntpdate 10.1.0.1 &> /dev/null',
     ensure => present,
     minute => '*/3',
     user => 'root',

8、notify

向代理终端发送开始工作的通知信息,常用属性:

    message:信息内容
    name:信息名称;

三、应用例子

#配置安装nginx,并根据根据nginx.conf是否修改来决定是否需要重载nginx服务
[root@localhost manifests]# vim nginx.pp 

package{'nginx':
        ensure => latest,
        provider => yum,
        require => Package['epel'],
}

package{'epel':
        ensure => latest,
        provider => yum,
        name => 'epel-release',
}

file{'nginx.conf':
        path => '/etc/nginx/nginx.conf',
        source => '/root/manifests/nginx.conf',
        ensure => file,
        notify => Service['nginx'],
}

service{'nginx':
        ensure => running,
        enable => true,
        name => 'nginx',
        restart => '/usr/sbin/nginx -s reload',
        hasrestart => true,
}


Package['nginx'] -> File['nginx.conf'] -> Service['nginx']


[root@localhost manifests]# puppet apply -v -d --noop nginx.pp
[root@localhost manifests]# puppet apply -v -d nginx.pp
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容

  • 1.puppet 是什么 puppet是一个开源的软件自动化配置和部署工具,很多大型IT公司均在使用puppet对...
    milo_e1ce阅读 4,878评论 0 4
  • Puppet理论定义: Puppet 是一个跨平台的集中化配置管理系统,它使用自有的描述语言,可管理配置文件、用户...
    属于你的世界阅读 963评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,652评论 18 139
  • 王纪山阅读 176评论 0 1
  • 今天是11月25号,星期六,晴。 上午给老大开了一上午家长会,通过这次会了解的孩子在学校里的各方面情况,有几个同学...
    雅琳妈妈阅读 107评论 0 3