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 ...
随机推荐
- vector 的用法(c++)
vertor是向量类型,它是一个对象实体.它作为容器可以容纳不同的实体,如int,flout,double,还有类类型. 1.包含头文件 #include <vector> 2.声明:ve ...
- SQL复习六(视图)
视图是关系数据库系统提供给用户以多角度观察数据库中数据的一种重要方法.视图是从一个或者几个表中导出的虚拟表.视图一经定义就可以被查询和删除.也可以在视图上定义视图.用视图完成数据的更新(增,删,改)操 ...
- Xcode8 去除系统日志输出
Edit Scheme-> Run -> Arguments, 在Environment Variables里边添加 OS_ACTIVITY_MODE = disable
- 一、什么是hadoop?
一.什么是hadoop 1. 背景 Hadoop为分布式文件系统和计算的基础框架系统,其中包含hadoop程序,hdfs系统等. 2. 名词解释 1.Hadoop, Apache开源的分布式框架. ...
- Android Material各种颜色设置
Blogpost about support appcompat v21 from Chris Banes
- AOP:代理实现方式①通过继承②通过接口
文件结构: 添加日志: package com.wangcf.manager; public class LogManager { public void add(){ System.out.prin ...
- BZOJ 1106: [POI2007]立方体大作战tet
1106: [POI2007]立方体大作战tet Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 682 Solved: 496[Submit][St ...
- (简单) POJ 3468 A Simple Problem with Integers , 线段树+区间更新。
Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...
- NSURLRequest POST方式请求服务器示例
http://lizhuang.iteye.com/blog/1833297 1. 准备阶段 NSString *urlString = [NSString stringWithFormat:@&q ...
- Java中的条件编译(转)
源:Java中的条件编译 一直以来,不知道怎么在Java中实现像C/C++一样的#ifdef...#endif这样的预编译宏,致使Java代码中一直用if判断,刚好刚才看到了解决办法,记录一下. C/ ...