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

    客户端过程如下

    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 successfully
    2 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: created
    2 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 events
    5 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 函数会使这一构建过程变得更方便,因为你可以使用大致相同的代码构建每个包。

  • 相关阅读:
    Centos 8 部署harbor 访问502
    selenium学习记录
    shell基础
    抓取人民日报
    caffe在笔记本ubuntu10.04 64位下的无GPU安装
    【转】HMM
    typedef 的一些用法
    j2ee 使用tomcat开发网站需要访问中文名的资源遇到的问题解决方案。。
    解决lex.yy.c文件在vs2012下编译生成exe
    python学习
  • 原文地址:https://www.cnblogs.com/Dicky-Zhang/p/6323770.html
Copyright © 2020-2023  润新知