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 ...
随机推荐
- web前端性能优化指南
web前端性能优化指南 web前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loadin ...
- PAT (Advanced Level) 1027. Colors in Mars (20)
简单题. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...
- 使用bootstrap建立响应式网页——头部导航栏
1.要建立响应式网站的布局,这个时候bootstrap的高级就能体现出来了. 2.先来了解一下bootstrap提供了哪些响应式工具供我们使用: (1)屏幕宽度尺寸的概念: <768px ...
- Hibernate批量提交
的 批量插入(Batch inserts) 如果要将很多对象持久化,你必须通过经常的调用 flush() 以及稍后调用 clear() 来控制第一级缓存的大小. Session session = s ...
- hibernate--student_course_score
学生, 课程,分数的设计. a)使用联合主键@EmbeddedId 使用Serializable接口 b)不适用联合主键 联合主键: 3张表, student: id, name course: id ...
- java数组的声明由几种方式
数组的声明由几种方式: 1,String []a = new String[length];再赋值 a[0]=?;....... 2,new完就直接初始化: String []a = new Stri ...
- VS2010与SVN
http://blog.sina.com.cn/s/blog_4fe44775010182yl.html 在VS2010中使用SVN,必须先安装SVN的客户端,再安装VisualSVN(SVN的插件) ...
- JAVA基础--适配器模式
interface Window{ // 定义Window接口,表示窗口操作 public void open() ; // 打开 public void close() ; // 关闭 public ...
- heritrix1.14.4配置-没有add和change按钮的问题
今天搞了下heritrix1.14.4在eclipse下的配置,根据http://www.360doc.com/content/10/0913/18/2793979_53385587.shtml教程, ...
- YII 框架在 MAC OS下 连接数据库失败 提示 DB connection: SQLSTATE[HY000] [2002]
作者:zccst CDbConnection failed to open the DB connection: SQLSTATE[HY000] [2002] No such file or dire ...