博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
puppet来管理文件和软件包
阅读量:6458 次
发布时间:2019-06-23

本文共 3316 字,大约阅读时间需要 11 分钟。

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",}}

客户端过程如下

1 Notice: /Stage[main]/Motd::Wenjian/Motd::Wenjian::Append_if_no_such_line[enable-ip-conntrack]/Exec[/bin/echo 'ip_conntrack' >> '/etc/modules']/returns: executed successfully2 Notice: Finished catalog run in 1.37 seconds
View Code

 2时时保持文件内容的更新

使用 exec 资源将若干配置片段串接成一个文件,示例如下,稍微复杂点

1 首先创建/etc/puppet/modules/admin/manifests/rsyncdconf.pp文件 2 class admin::rsyncdconf { 3     file { "/etc/rrp": 4         ensure => directory, 5     } 6  7     exec { "update-rsyncd.conf": 8         command => "/bin/cat /etc/rrp/*.conf > /etc/rsyxin.conf", 9         refreshonly => true,10     }11 }

然后别忘记在init.pp文件包含这个类,接着

1 创建如下/etc/puppet/modules/myapp/manifests/rsyncpp.pp 2 class myapp::rsyncpp { 3     include admin::rsyncdconf    #包含上边刚创建的类 4  5     file { "/etc/rrp/myapp.conf": 6         ensure  => present, 7         source  => "puppet:///modules/myapp/myapp.rsync", 8         require => File["/etc/rrp"], 9         notify  => Exec["update-rsyncd.conf"],  文件一旦改变,就会执行10     }11 }12 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

在客户端测试

1 Notice: /Stage[main]/Admin::Rsyncdconf/File[/etc/rrp]/ensure: created2 Notice: /Stage[main]/Myapp::Rsyncpp/File[/etc/rrp/myapp.conf]/ensure: defined content as '{md5}d85e5aa28aca2faf3e32b98e96b405e4'3 Info: /Stage[main]/Myapp::Rsyncpp/File[/etc/rrp/myapp.conf]: Scheduling refresh of Exec[update-rsyncd.conf]4 Notice: /Stage[main]/Admin::Rsyncdconf/Exec[update-rsyncd.conf]: Triggered 'refresh' from 1 events5 Notice: Finished catalog run in 2.04 seconds
View Code

说明下

(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 => 0,}  }

说明如下:

exec 命令被 && 运算符分割成了五个阶段。也就是说每个阶段的命令若执行失败, 整个命令将会失败且停止运行。 当你想确保每个子命令都成功运行之后才运行下一个子命令时,这是一种有用的构造方法。

creates =>"/usr/local/Discuz_X3.2_SC_GBK",

由于这是一个漫长的过程,你不想每次运行 Puppet 时都运行它,我们指定了一个条件, 即被创建的文件是否存在,存在的话么就不在执行,无论出于任何原因,如果需要重建,你可以删除此文件。

logoutput => on_failure

错误并非只发生在首次编译的情况。在出现问题时,我们指定了 logoutput 参数, 它将为我们显示编译或构建过程中的出错信息

最后,因为编译过程可能会持续一段时间,所以将 timeout 参数设置成了 0 (默认情况下,Puppet 执行 exec 命令 5 分钟后就会超时)

最后一点

如果你有一批必须从源代码构建的软件,那么将上述的 exec 放入一个 define 函数会使这一构建过程变得更方便,因为你可以使用大致相同的代码构建每个包。

转载于:https://www.cnblogs.com/Dicky-Zhang/p/6323770.html

你可能感兴趣的文章
打印图片
查看>>
apache 配置
查看>>
SHOW CREATE DATABASE Syntax
查看>>
rsync常见问题及解决办法
查看>>
半自动化运维之服务器信息维护
查看>>
AKM项目轶事之GBS同事转入GDC
查看>>
MySQL日期 专题
查看>>
C#中禁止程序多开
查看>>
分布式缓存Redis使用以及原理
查看>>
tcpcopy,模拟在线MySQL压力测试的好帮手
查看>>
Guava库学习:学习Concurrency(二)Monitor_2
查看>>
我的友情链接
查看>>
Chrome 强制显示最小字体为 12px的解决方法
查看>>
一行命令搞定node.js 版本升级
查看>>
手动方式配置IPsec隧道
查看>>
网易云信相关
查看>>
mysql数据库死锁的产生原因及解决办法
查看>>
mhvtl虚拟磁带库(提供软件包)
查看>>
PL/SQL异常处理
查看>>
我们该怎么成为技术尖子生
查看>>