sszxf 发表于 2018-8-2 08:12:28

1.9-puppet文件或目录资源

  上一节中的模块其实只是同步了一个文件而已,那么要想同步一个目录如何做?我们可以通过实现同步一个目录来做一个包发布系统。 比如在一台机器上编译安装好了apache,那么就可以通过这样的模块把这个apache目录整个分发到其他机器上。
  vim /etc/puppet/modules/testm/manifests/init.pp#编辑配置文件
  模块配置文件如下:
  class testm{
  file {"/tmp/2.txt":    #送往客户端的文件名,属性和内容来源
  owner => "root",
  group => "root",
  mode => 0400,
  source => "puppet://$puppetserver/modules/testm/1.txt"
  }
  }
  #新定义的类
  class apache{
  file {"/usr/local/apache2":   #同步到客户端后的文件路径
  owner => "root",
  group => "root",
  source => "puppet://$puppetserver/modules/testm/apache2",
  recurse => true,
  purge => true
  }}
  其中recurse=>true 这个参数很关键,它表示递归的意思,没有这个不能同步目录。purge参数可以保证当服务端删除或修改某个文件,客户端可以跟着删除或修改。
  然后在testm目录下,创建apache2目录。在这个目录下,创建conf、bin、logs三个目录。然后创建3个文件touch logs/1.logtouch bin/apachectl   touch conf/httpd.conf
  最后编辑puppet主配置文件,加入新的类
  vim/etc/puppet/manifests/site.pp   //内容如下
  $puppetserver = 'master.wyp.com'   #定义模块配置文件中的变量
  node 'client.wyp.com'{
  include testm
  include apache
  }
  配置完成后,在客户端执行命令:
  puppet agent --test--server=master.wyp.com   //如果客户端上启动了puppet服务,不用执行这命令,它也会自动同步的
  课后答疑:
  问:source => "puppet://$puppetserver/modules/testm/apache2",实际文件在testm/files目录下,而配置文件中直接在testm目录下
  答:这个就是省略掉files目录的,它的特性。
  问:类名至少要有一个与模块名一致吗?实验的时候,不一致就报错:
  答:必须要一致。
页: [1]
查看完整版本: 1.9-puppet文件或目录资源