设为首页 收藏本站
查看: 607|回复: 0

[经验分享] puppet资源讲解——文件资源file

[复制链接]

尚未签到

发表于 2018-8-2 07:07:16 | 显示全部楼层 |阅读模式
  puppet自动化运维之file资源
  作用:
  ①.支持文件和目录的操作;
  ②.设置文件及目录的所有者及权限;
  ③.恢复文件(包括文件的内容、权限及所有者);
  ④.清理目录以及子目录。
  格式:
  file {"title":                      #一般是文件名
  ensure =>   present|absent|file|directory|link
  content =>   "content",   #文件内容(必须有,否则,文件的内容为空)
  user =>   "username",     #用户
  group =>   "groupname",   #用户组
  mode => 权限,       #四位八进制数
  path =>   "title",    #一般和title同名
  source =>   "puppet:///URL",
  #指定到master上文件的绝对路径或agent上本地文件绝对路径
  target => {"源文件或目录"}  #指定目标文件,用于ln -s $target $title
  recurse => true,            #递归
  purge => true,              #将不再资源中管理的其他数据,删除
  force => true;              #如不加,则不会删除
  }
  注:{},代表里面的内容,为必选的。
  详解:
  注:cp就使用source,echo就使用content。
  content     content => "字符串",
  把文件的内容(title或path)设置为content 参数后面的字符串, 新行,tab,空格可用 escaped syntax 表示(必须有,否则,文件的内容为空,除非你不需要)。
  ensure      ensure => {absent|present|file|directory|link},
  如果文件本来不存在是否要新建title名的文件:
  present,检查该文件是否存在,如果不存在就新建title名的文件,
  absent, 文件存在,就会删除title名的文件(如果recurse => true ,就会删除目录)。
  file, 不存在就新建title名的文件
  directory, 不存在就新建title名的目录
  link,和target连用,指定目标文件
  group       group => {gid|组名},
  指定那个该文件的用户组,值可以是gid或者组名。
  mode        mode => {rwx},
  mode用于设置文件的权限(数字)r=4,w=2,x=1。
  owner       owner => {用户名},
  设置文件的属主。
  path         path => " 文件的路径",
  指定要管理文件的路径,必须用引号引起来, 这也是一个资源的 namevar ,通常path 等于资源的title。
  source      source => {"puppet:///URL"|"完整的文件路径"},
  以puppet:///开头为从master下载,正常路径则在client本地读取。
  拷贝一个文件覆盖当前文件,用checksum来判断是否有必要进行复制,可以设置的值是一个引用master或agent的完整的文件路径,或者是URI,当前支持的URI只有puppet和file ; 这是一个对文件常用的操作,可以让puppet修改系统的配置文件。
  source => "puppet:///modules/ssh/etc/ssh/sshd_config" ,
  source => "/etc/passwd",
  注:"puppet://"等价于主配置文件puppet.config中的modulepath值。
  backup      backup => {|.文件名|false},
  文件的内容在被修改前是否进行备份. 利用filebucket对文件进行备份,按文件的md5sum进行归类,便于恢复文件的时候找到文件.可以把文件备份到 puppet 客户端,也可以把文件备份到网络上的其他机器。
  backup => "."       puppet会把文件备份在同一目录下,备份文件的扩展名就是 bakcup里面的那个字符串。
  backup => false     该文件不做备份。
  recurse     recurse => { true|false|inf|remote},
  设置是否以及如何进行递归操作,即可以管理子目录(recurse,purge和force连用,用于删除子目录中,不在资源控制的文件或目录)。
  purge       purge => {true|false},
  将不再资源中管理的其他数据,则删除。
  force       force => {ture|false},
  force是否可以删除文件或目录,与ignore相反。
  ignore      ignore => {文件名|正则表达式},
  当用recursion 方法复制一个目录的时候,可以用ignore来设定过滤条件,符合过滤条件的文件不被复制或删除. 使用ruby自带的匹配法则.因此shell级别的过滤表达式完全支持,例如[a-g]*, 与force相反。
  target      target => {"源文件或目录"},
  是为创建链接文件的,即将target的值,作为源文件,title的值,作为目标文件。如ln -s $target $title。当且仅当ensure => link, 才可以使用。
  checksum     checksum => {md5|mtime|time|timestamp},
  检查文件是否被修改,这个状态用来在复制文件的时候使用, 这里有几种检测方式,包括md5 ,mtime,time,timestamp等.默认的检测是用md5。
  links        link => {follow|manage},
  定义操作符合链接文件.文件拷贝的时候,
  follow,会拷贝文件的内容,而不是只拷贝符合链接本身,
  manage ,会拷贝符合链接本身。
  recurselimit     recurselimit => { 数字},
  递归的深度,设置的值可以匹配/^[0-9]+$/。
  replace         replace => {true|false},
  是否覆盖已经存在的文件。可以设置的值是(true,yes),(false,no)。
  selrange          文件内容是否属于SElinux哪个组成部分,只适于开启了Selinux的机器。
  selrole         文件所属的SeLinux 角色。
  seltype         文件所属的Selinux   type。
  seluser         文件所属的Selinux user。
  sourceselect    选择拷贝目录级别,默认,source是递归的。
  type            检查文件是否只读。
  注:绿色的,表示常用的;紫色的,表示不常用的。
  file资源在puppet里面用的挺多,属性包括大家已经属性的owner,group,mode,content等等。file还有两个重要的命令,source和template。
  通常,一个文件的内容可以由content属性来包含固定的内容,但是也可以用source命令来从其他url复制文件内容。目前puppet只支持puppet这个url,表示从puppet的fileserver去下载文件内容。例如:
  source => "puppet://${fileserver}/lvs/${corp}.${idc}.keepalived.conf   "
  其中fileserver后面的lvs表示是lvs模块的files目录这个路径【/etc/puppet/module/lvs/files/】。正如前面提到的一样。用source就可以把很多配置文件放到puppet服务器端统一管理。
  template,可以通过erb模板生成文件内容,erb模板可以使用变量。而且还可以对变量进行计算和操作。
  这是puppet强大的地方,举一个例子,你配置两台squid服务器,两台服务器的内存不一样,那么在squid.conf里面有关内存的配置命令就要根据硬件配置来设置。在过去,你只能手工去判定和修改,现在puppet自己搞定。看下面的代码:
  vi /etc/puppet/manifest/test.pp
  file   {"/etc/squid/squid.conf":
  mode => 0644,
  content =>   template("squid/squid.conf.erb");
  }
  这里的template里面的"squid/squid.conf.erb"表示的路径是squid模块下面templates目录下的squid.conf.erb这个路径。看看squid.conf.erb里面的部分内容。
  vi   squid.conf.erb
  cache_mem <%= Integer(vmx_memsize.to_i*0.45) -%> MB
  visible_hostname   <%= fqdn %>
  在这里,cache_mem设置成总内存的45%大小,visible_hostname 设置成主机名。更多有趣的功能也可以实现。
  在使用puppet过程中,有时有个类需要使用到多个file 资源. 而这些资源有相同的属性,例如,用户和组相同,权限相同,你还是每次都照样写吗?这里给大家提供一个小的技巧.其实这里我们可以给file 设置默认的属性。就不用重复写了,大大地简化我们的代码.
  例如:
  vi /etc/puppet/manifest/test.pp
  File {            ##这里的大写,表示默认属性,下面的两个文件,属主和组都会被设置为root且权限为644
  ensure => "present",
  owner  =>   "root",
  group  =>   "root",
  mode   => 644;
  }
  file   {  "/etc/cobbler/modules.conf":
  content =>   template("cobbler/modules.conf"),
  }
  file {   "/etc/cobbler/dhcp.template":
  content =>   template("cobbler/dhcp.template"),
  }
  其实我们可以再优化下写法,如下:
  vi /etc/puppet/manifest/test.pp
  File {
  ensure => "present",
  owner  =>   "root",
  group  =>   "root",
  mode   => 644,
  }
  file   {  "/etc/cobbler/modules.conf":
  content =>   template("cobbler/modules.conf"),
  "/etc/cobbler/dhcp.template":
  content =>   template("cobbler/dhcp.template"),
  }
  
  实例:
  #软连接
  vi /etc/puppet/manifest/test.pp
  file {"/tmp/puppet_link.txt":
  ensure =>   link,
  target =>   "/etc/motd";
  }
  #
  [root@client  ~]# puppetd --test --server master.perofu.com
  info: Caching catalog for client.perofu.com
  info: Applying configuration version '1395062999'
  notice:   /Stage[main]//File[/tmp/puppet_link.txt]/ensure: created
  notice: Finished catalog run in 0.07 seconds
  [root@client  ~]# ll /tmp/
  total 8
  lrwxrwxrwx 1 root root      9 Mar 17 21:32 puppet_link.txt -> /etc/motd
  #目录及管理
  file {"/tmp/puppet_dir":
  ensure =>   directory,
  owner =>   root,
  group =>   root,
  recurse =>   true,    #递归管理目录
  purge =>   true,      #将不再当前file资源管理的,均删除
  force =>   true,      #可以删除文件盒目录
  ignore =>   "dir*";   #正则,忽略dir*的
  }
  #
  [root@client  ~]# puppetd --test --server master.perofu.com
  info: Caching catalog for client.perofu.com
  info: Applying configuration version '1395063252'
  notice: /Stage[main]//File[/tmp/puppet_dir]/ensure:   created
  notice: Finished catalog run in 0.14 seconds
  [root@client  ~]# touch /tmp/puppet_dir/aaa
  [root@client  ~]# touch /tmp/puppet_dir/dir1
  [root@client  ~]#
  [root@client  ~]# puppetd --test --server master.perofu.com
  info: Caching catalog for client.perofu.com
  info: Applying configuration version '1395063252'
  info: FileBucket adding /tmp/puppet_dir/aaa as   {md5}d41d8cd98f00b204e9800998ecf8427e
  info: /File[/tmp/puppet_dir/aaa]: Filebucketed   /tmp/puppet_dir/aaa to puppet with sum d41d8cd98f00b204e9800998ecf8427e
  notice: /File[/tmp/puppet_dir/aaa]/ensure: removed
  notice: Finished catalog run in 0.12 seconds
  [root@client  ~]# ll /tmp/puppet_dir/
  total 0
  -rw-r--r-- 1 root root 0 Mar 17 21:36 dir1
  # source和template
  后面会有详解。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-544985-1-1.html 上篇帖子: Puppet核心配置文件详解 下篇帖子: puppet自动化运维之service资源
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表