本帖最后由 匿名 于 2015-4-26 16:07 编辑
- Puppet之file资源
- 作用:
- ①.支持文件和目录的操作;
- ②.设置文件及目录的所有者及权限;
- ③.恢复文件(包括文件的内容、权限及所有者);
- ④.清理目录以及子目录。
-
- 格式:
- file {"title": #一般是文件名
- ensure => present|absent|file|directory|link
- content => "content", #文件内容(必须有,否则,文件的内容为空)
- user => "username", #用户
- group => "groupname", #用户组
- mode => "priviliegs", #四位八进制数
- 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 { "/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
复制代码
|