Linux/Python学习论坛-京峰教育

 找回密码
 立即注册

一键登录:

搜索
热搜: 活动 交友 discuz
查看: 1630|回复: 0

Puppet file 资源详解

[复制链接]
Linux爱好者
Linux爱好者  发表于 2015-4-11 22:37:29 |阅读模式
本帖最后由 匿名 于 2015-4-26 16:07 编辑
  1. Puppet之file资源


  2. 作用:

  3. ①.支持文件和目录的操作;

  4. ②.设置文件及目录的所有者及权限;

  5. ③.恢复文件(包括文件的内容、权限及所有者);

  6. ④.清理目录以及子目录。



  7. 格式:

  8. file {"title":                          #一般是文件名

  9.     ensure  =>   present|absent|file|directory|link

  10.     content =>   "content",             #文件内容(必须有,否则,文件的内容为空)

  11.     user    =>   "username",            #用户

  12.     group   =>   "groupname",           #用户组

  13.     mode    =>    "priviliegs",         #四位八进制数

  14.     path    =>   "title",               #一般和title同名

  15.     source  =>   "puppet:///URL",       #指定到master上文件的绝对路径或agent上本地文件绝对路径

  16.     target  =>   {"源文件或目录"}       #指定目标文件,用于ln -s $target $title

  17.     recurse => true,                    #递归

  18.     purge   => true,                    #将不再资源中管理的其他数据,删除

  19.     force   => true,                    #如不加,则不会删除

  20. }



  21.     注:{},代表里面的内容,为必选的。



  22. 详解:

  23.    注:cp就使用source,echo就使用content。

  24. content :   
  25.   content => "字符串",

  26. 把文件的内容(title或path)设置为content 参数后面的字符串, 新行,tab,空格可用 escaped syntax 表示(必须有,否则,文件的内容为空,除非你不需要)。


  27. ensure :
  28.   ensure => {absent|present|file|directory|link},
  29.                   

  30.   如果文件本来不存在是否要新建title名的文件:
  31.   
  32.   present,检查该文件是否存在,如果不存在就新建title名的文件,
  33.   
  34.   absent, 文件存在,就会删除title名的文件(如果recurse => true ,就会删除目录)。
  35.   
  36.   file, 不存在就新建title名的文件
  37.   
  38.   directory, 不存在就新建title名的目录
  39.   
  40.   link,和target连用,指定目标文件



  41. group :
  42.   group => {gid|组名},

  43.   指定那个该文件的用户组,值可以是gid或者组名。


  44. mode :
  45.   mode => {rwx},

  46.   mode用于设置文件的权限(数字)r=4,w=2,x=1。


  47. owner :
  48.   owner => {用户名},

  49.   设置文件的属主。


  50. path :
  51.   path => " 文件的路径",
  52.             
  53.   指定要管理文件的路径,必须用引号引起来, 这也是一个资源的 namevar ,通常path 等于资源的title。

  54. source :
  55.   source => {"puppet:///URL"|"完整的文件路径"},                 

  56.   以puppet:///开头为从master下载,正常路径则在client本地读取。

  57.   拷贝一个文件覆盖当前文件,用checksum来判断是否有必要进行复制,可以设置的值是一个引用master或agent的完整的文件路径,或者是URI,当前支持的URI只有puppet和file ; 这是一个对文件常用的操作,可以让puppet修改系统的配置文件。

  58.   source => "puppet:///modules/ssh/etc/ssh/sshd_config" ,

  59.   source => "/etc/passwd",

  60.         注:"puppet://"等价于主配置文件puppet.config中的modulepath值。


  61. backup :
  62.   backup => {|.文件名|false},

  63.     文件的内容在被修改前是否进行备份. 利用filebucket对文件进行备份,按文件的md5sum进行归类,便于恢复文件的时候找到文件.可以把文件备份到 puppet 客户端,也可以把文件备份到网络上的其他机器。

  64.   backup => "."       puppet会把文件备份在同一目录下,备份文件的扩展名就是 bakcup里面的那个字符串。

  65.      backup => false     该文件不做备份。


  66. recurse :
  67.   recurse => { true|false|inf|remote},

  68.   设置是否以及如何进行递归操作,即可以管理子目录(recurse,purge和force连用,用于删除子目录中,不在资源控制的文件或目录)。


  69. purge :
  70.   purge => {true|false},            

  71.   将不再资源中管理的其他数据,则删除。

  72. force :
  73.   force => {ture|false},

  74.   force是否可以删除文件或目录,与ignore相反。


  75. ignore :
  76.   ignore => {文件名|正则表达式},

  77.   当用recursion 方法复制一个目录的时候,可以用ignore来设定过滤条件,符合过滤条件的文件不被复制或删除. 使用ruby自带的匹配法则.因此shell级别的过滤表达式完全支持,例如[a-g]*, 与force相反。


  78. target :
  79.   target => {"源文件或目录"},
  80.              是为创建链接文件的,即将target的值,作为源文件,title的值,作为目标文件。如ln -s $target $title。当且仅当ensure => link, 才可以使用。


  81. checksum :
  82.   checksum => {md5|mtime|time|timestamp},

  83.   检查文件是否被修改,这个状态用来在复制文件的时候使用, 这里有几种检测方式,包括md5 ,mtime,time,timestamp等.默认的检测是用md5。

  84. links :
  85.   link => {follow|manage},
  86.                     
  87.   定义操作符合链接文件.文件拷贝的时候,

  88.   follow,会拷贝文件的内容,而不是只拷贝符合链接本身,

  89.    manage ,会拷贝符合链接本身。


  90. recurselimit :   
  91.   recurselimit => { 数字},

  92.   递归的深度,设置的值可以匹配/^[0-9]+$/。


  93. replace :
  94.   replace => {true|false},

  95.   是否覆盖已经存在的文件。可以设置的值是(true,yes),(false,no)。



  96. selrange        文件内容是否属于SElinux哪个组成部分,只适于开启了Selinux的机器。

  97. selrole         文件所属的SeLinux 角色。

  98. seltype         文件所属的Selinux   type。

  99. seluser         文件所属的Selinux user。

  100. sourceselect    选择拷贝目录级别,默认,source是递归的。

  101. type            检查文件是否只读。


  102.     注:绿色的,表示常用的;紫色的,表示不常用的。


  103.     file资源在puppet里面用的挺多,属性包括大家已经属性的owner,group,mode,content等等。file还有两个重要的命令,source和template。

  104.     通常,一个文件的内容可以由content属性来包含固定的内容,但是也可以用source命令来从其他url复制文件内容。目前puppet只支持puppet这个url,表示从puppet的fileserver去下载文件内容。例如:

  105.     source => "puppet://${fileserver}/lvs/${corp}.${idc}.keepalived.conf   "



  106.     其中fileserver后面的lvs表示是lvs模块的files目录这个路径【/etc/puppet/module/lvs/files/】。正如前面提到的一样。用source就可以把很多配置文件放到puppet服务器端统一管理。

  107.     template,可以通过erb模板生成文件内容,erb模板可以使用变量。而且还可以对变量进行计算和操作。

  108. 这是puppet强大的地方,举一个例子,你配置两台squid服务器,两台服务器的内存不一样,那么在squid.conf里面有关内存的配置命令就要根据硬件配置来设置。在过去,你只能手工去判定和修改,现在puppet自己搞定。看下面的代码:

  109. vi /etc/puppet/manifest/test.pp

  110. file   { "/etc/squid/squid.conf":

  111.   mode    => 0644,

  112.   content =>   template("squid/squid.conf.erb"),

  113. }



  114.     这里的template里面的"squid/squid.conf.erb"表示的路径是squid模块下面templates目录下的squid.conf.erb这个路径。看看squid.conf.erb里面的部分内容。

  115. vi   squid.conf.erb

  116. cache_mem <%= Integer(vmx_memsize.to_i*0.45) -%> MB

  117. visible_hostname   <%= fqdn %>

  118.    

  119.     在这里,cache_mem设置成总内存的45%大小,visible_hostname 设置成主机名。更多有趣的功能也可以实现。

  120.        在使用puppet过程中,有时有个类需要使用到多个file 资源. 而这些资源有相同的属性,例如,用户和组相同,权限相同,你还是每次都照样写吗?这里给大家提供一个小的技巧.其实这里我们可以给file 设置默认的属性。就不用重复写了,大大地简化我们的代码.

  121. 例如:

  122. vi /etc/puppet/manifest/test.pp

  123. File {            ##这里的大写,表示默认属性,下面的两个文件,属主和组都会被设置为root且权限为644  

  124. ensure =>   "present",

  125. owner  =>   "root",  

  126. group  =>   "root",  

  127. mode   =>    644;

  128. }

  129. file   {  "/etc/cobbler/modules.conf":

  130.   content =>   template("cobbler/modules.conf"),

  131. }

  132. file {   "/etc/cobbler/dhcp.template":

  133.   content =>   template("cobbler/dhcp.template"),

  134. }






  135. 实例:

  136. #软连接

  137. vi /etc/puppet/manifest/test.pp

  138. file { "/tmp/puppet_link.txt":

  139.   ensure =>   link,

  140.   target =>   "/etc/motd";

  141. }


  142. [root@client  ~]# puppetd --test --server master.perofu.com

  143. info: Caching catalog for client.perofu.com

  144. info: Applying configuration version '1395062999'

  145. notice:   /Stage[main]//File[/tmp/puppet_link.txt]/ensure: created

  146. notice: Finished catalog run in 0.07 seconds

  147. [root@client  ~]# ll /tmp/

  148. total 8

  149. lrwxrwxrwx 1 root root      9 Mar 17 21:32 puppet_link.txt -> /etc/motd

  150. #目录及管理

  151. file {"/tmp/puppet_dir":

  152.   ensure  =>   directory,

  153.   owner   =>   root,

  154.   group   =>   root,

  155.   recurse =>   true,      #递归管理目录

  156.   purge   =>   true,      #将不再当前file资源管理的,均删除

  157.   force   =>   true,      #可以删除文件盒目录

  158.   ignore  =>   "dir*";    #正则,忽略dir*的

  159. }



  160. [root@client  ~]# puppetd --test --server master.perofu.com

  161. info: Caching catalog for client.perofu.com

  162. info: Applying configuration version '1395063252'

  163. notice: /Stage[main]//File[/tmp/puppet_dir]/ensure:   created

  164. notice: Finished catalog run in 0.14 seconds


  165. [root@client  ~]# touch /tmp/puppet_dir/aaa

  166. [root@client  ~]# touch /tmp/puppet_dir/dir1

  167. [root@client  ~]#

  168. [root@client  ~]# puppetd --test --server master.perofu.com

  169. info: Caching catalog for client.perofu.com

  170. info: Applying configuration version '1395063252'

  171. info: FileBucket adding /tmp/puppet_dir/aaa as   {md5}d41d8cd98f00b204e9800998ecf8427e

  172. info: /File[/tmp/puppet_dir/aaa]: Filebucketed   /tmp/puppet_dir/aaa to puppet with sum d41d8cd98f00b204e9800998ecf8427e

  173. notice: /File[/tmp/puppet_dir/aaa]/ensure: removed

  174. notice: Finished catalog run in 0.12 seconds



  175. [root@client  ~]# ll /tmp/puppet_dir/     

  176. total 0

  177. -rw-r--r-- 1 root root 0 Mar 17 21:36 dir1

  178. # source和template

复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|京峰教育,只为有梦想的人 ( 京ICP备15013173号 )

GMT+8, 2019-1-22 22:50 , Processed in 0.029806 second(s), 17 queries , Apc On.

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