puppet来管理文件和软件包
puppet来管理文件和软件包
1 exec的使用,可以运行shell命令
为配置文件添加配置,指示写了关键部分,其他配置省略没写
代码示例如下:
[root@pup manifests]# cat wenjian.pp
class motd::wenjian{
define append_if_no_such_line($file, $line) {
exec { "/bin/echo '$line' >> '$file'":
unless => "/bin/grep -q '$line' '$file'", #看文件是否存在,不存在在追加
}
} append_if_no_such_line { "enable-ip-conntrack":
file => "/etc/modules",
line => "ip_conntrack",
} }
客户端过程如下
Notice: /Stage[main]/Motd::Wenjian/Motd::Wenjian::Append_if_no_such_line[enable-ip-conntrack]/Exec[/bin/echo 'ip_conntrack' >> '/etc/modules']/returns: executed successfully
Notice: Finished catalog run in 1.37 seconds
2时时保持文件内容的更新
使用 exec 资源将若干配置片段串接成一个文件,示例如下,稍微复杂点
首先创建/etc/puppet/modules/admin/manifests/rsyncdconf.pp文件
class admin::rsyncdconf {
file { "/etc/rrp":
ensure => directory,
} exec { "update-rsyncd.conf":
command => "/bin/cat /etc/rrp/*.conf > /etc/rsyxin.conf",
refreshonly => true,
}
}
然后别忘记在init.pp文件包含这个类,接着
创建如下/etc/puppet/modules/myapp/manifests/rsyncpp.pp
class myapp::rsyncpp {
include admin::rsyncdconf #包含上边刚创建的类 file { "/etc/rrp/myapp.conf":
ensure => present,
source => "puppet:///modules/myapp/myapp.rsync",
require => File["/etc/rrp"],
notify => Exec["update-rsyncd.conf"], 文件一旦改变,就会执行
}
}
include myapp::rsyncpp
接着在file里面创建文件
创建 /etc/puppet/modules/myapp/files/myapp.rsync 文件:
[myapp]
uid = myappuser
gid = myappuser
path = /opt/myapp/shared/data
comment = Data for myapp
list = no
read only = no
auth users = myappuser
在客户端测试
Notice: /Stage[main]/Admin::Rsyncdconf/File[/etc/rrp]/ensure: created
Notice: /Stage[main]/Myapp::Rsyncpp/File[/etc/rrp/myapp.conf]/ensure: defined content as '{md5}d85e5aa28aca2faf3e32b98e96b405e4'
Info: /Stage[main]/Myapp::Rsyncpp/File[/etc/rrp/myapp.conf]: Scheduling refresh of Exec[update-rsyncd.conf]
Notice: /Stage[main]/Admin::Rsyncdconf/Exec[update-rsyncd.conf]: Triggered 'refresh' from events
Notice: Finished catalog run in 2.04 seconds
说明下
(notify => Exec["update-rsyncd.conf"]只要 /etc/rrp 目录中有一个配置片段被更新,exec 资源就会执行一次
上面的说法也可以应用到 Apache 的 conf.d 目录或 PHP 的 php-ini.d 目录
2源码包编译安装的构建(常用)
使用puppet完成以下步骤
下载源码包
解压源码包
配置(Configure)并构建(build)程序
安装已构建的程序
如下实例:
[root@pup manifests]# cat install_app.pp
class myapp::install_app{
exec { "Discuz_X3.2_SC_GBK.zip":
cwd => "/usr/local/src",
command => "/usr/bin/wget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_GBK.zip"&& /bin/unzip Discuz_X3.2_SC_GBK.zip && cd Discuz_X3.2_SC_GBK.zip && && ./Configure --prefix=/usr/local &&make && make install,
creates =>"/usr/local/Discuz_X3.2_SC_GBK",
logoutput => on_failure,
timeout => ,
} }
说明如下:
exec 命令被 && 运算符分割成了五个阶段。也就是说每个阶段的命令若执行失败, 整个命令将会失败且停止运行。 当你想确保每个子命令都成功运行之后才运行下一个子命令时,这是一种有用的构造方法。
creates =>"/usr/local/Discuz_X3.2_SC_GBK",
由于这是一个漫长的过程,你不想每次运行 Puppet 时都运行它,我们指定了一个条件, 即被创建的文件是否存在,存在的话么就不在执行,无论出于任何原因,如果需要重建,你可以删除此文件。
logoutput => on_failure
错误并非只发生在首次编译的情况。在出现问题时,我们指定了 logoutput 参数, 它将为我们显示编译或构建过程中的出错信息
最后,因为编译过程可能会持续一段时间,所以将 timeout 参数设置成了 0 (默认情况下,Puppet 执行 exec 命令 5 分钟后就会超时)
最后一点
如果你有一批必须从源代码构建的软件,那么将上述的 exec 放入一个 define 函数会使这一构建过程变得更方便,因为你可以使用大致相同的代码构建每个包。
puppet来管理文件和软件包的更多相关文章
- 如何做好Puppet Modules管理
如何做好Puppet Modules管理 不同于其他的Openstack项目,puppet modules是一个数量庞大的存在.以我们当前在使用中的puppet modules为例,就已经多达96个( ...
- Puppet自动化管理配置
Puppet:开源系统配置和管理工具 随着虚拟化和云计算技术的兴起,计算机集群的自动化管理和配置成为了数据中心运维管理的热点.对于 IaaS.Paas.Saas 来说,随着业务需求的提升,后台计算机集 ...
- 3,linux-yum源配置-systemctl服务管理-文件权限
3,linux-yum源配置-systemctl服务管理-文件权限 小问答: 1.配置好阿里云yum源 生成yum缓存 下载nginx,并且启动nginx服务,使用浏览器访问10.0.0.10:80 ...
- Linux基本命令(1)管理文件和目录的命令
Linux管理文件和目录的命令 命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touc ...
- 5 个在 Linux 中管理文件类型和系统时间的有用命令
对于想学习 Linux 的初学者来说要适应使用命令行或者终端可能非常困难.由于终端比图形用户界面程序更能帮助用户控制 Linux 系统,我们必须习惯在终端中运行命令.因此为了有效记忆 Linux 不同 ...
- 探索Windows命令行系列(4):通过命令管理文件和文件夹
1.文件夹操作 1.1.DIR(directory)命令 1.2.TREE 命令 1.3.CD(change directory)命令 1.4.MD(make directory)命令 1.5.RD( ...
- with管理文件操作上下文
目录 with管理文件操作上下文(掌握) with管理文件操作上下文(掌握) 之前我们使用open()方法操作文件,但是open打开文件后我们还需要手动释放文件对操作系统的占用.但是其实我们可以更方便 ...
- 【PMP】商业论证与效益管理文件
①项目商业论证 定义:文档化的经济可行性研究报告,用来对尚缺乏充分定义的所选方案的收益进行有效性论证,是启动后续项目管理活动的依据. 项目发起人通常负责商业论证文件的制定和维护,项目经理负责提供建议和 ...
- 【转】使用SQL Server 2012的FileTable轻松管理文件
一 .FileStream和FileTable介绍 我们经常需要把结构化数据(int.Char等)和非结构化数据(如Varbinary(max))一起存储,那我们在怎么存储的呢? 1. 在SQL Se ...
随机推荐
- JAVA基础--异常
异常的分类: 1. Throwable: 根类 1) Error:系统错误, 由java虚拟机生成并抛出, 无法处理 2) Exception: 所有异常类的父类, 可以处理的错误, 可以catch到 ...
- [转] 用Maven搭建多模块企业级项目
转自:http://www.cnblogs.com/quanyongan/archive/2013/05/28/3103243.html 首先,前面几次学习已经学会了安装maven,如何创建maven ...
- c语言 inline函数
大学在教科书上学习过inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率. google的google c++ style guide 1.in ...
- tcpdump的表达元
(nt: True 在以下的描述中含义为: 相应条件表达式中只含有以下所列的一个特定表达元, 此时表达式为真, 即条件得到满足) dst host host如果IPv4/v6 数据包的目的域是host ...
- (简单) UVA 11624 Fire! ,BFS。
Description Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the ow ...
- Android SDK开发包国内下载地址(转)
想了解Android 应用开发,但可恨开发环境安装就困难重重,这里找到一个国内下载地址,特转来记录 Android SDK开发包国内下载地址
- linux中vi和vim编辑工具
linux中知名的还有emacs,功能比vim还要强大 vim 如果文件存在vim是打开这个文件,若果不存在,则先新建再打开 命令模式:任何模式都可以通过Esc回到命令模式,命令模式可以通过命令进行选 ...
- 巧用HTML5给按钮背景设计不同的动画
如何巧用HTML5设计按钮背景不同动画特效,在该特效中,当鼠标滑过按钮时,使用CSS3 animation 来动画 background-size 和 background-posit ...
- Java6 WebService学习
首先,建立一个WebService: package garfield; import javax.jws.WebService; import javax.xml.ws.Endpoint; @Web ...
- jQuery插件的开发
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...