云服务器

用正确的方式管理文件

2017-12-27 16:21:45 0

Puppet是一个非常强大的工具,在文件管理方面,它可以实现非常多的功能。我们知道windows有一个很强大的资源管理器,对个人用户来说是非常棒的选择。而当我们面对成千上万的服务器资源进行集中管理时,就需要借助像puppet这样的工具来实现了。Puppet文件管理有一篇很详细的文章,选择分享给大家。

Puppet配置

  1. 文件管理file
文件服务器写法:

/etc/puppet/ fileserver.conf 定义

[files]

path /tmp/files ## puppet数据存放目录后面远程备份实战会用到

allow *.example.com

实战1: 备份masterc.shagent /tmp目录下。

代码:
##remote backup

filebucket{ main:

server => "pmaster.example.com",

path => false,

}

###备份master机上c.sh文件到agent /tmp目录下

file {"/tmp/master.sh":

source => "puppet://pmaster.example.com/files/c.sh",

backup => main,

}

请留意如图中的目录结构

 
结果输出:
实战2: ##备份agent本地/etc/passwd文件到/tmp并命名为test3,如果文件已存在,先备份再覆盖

代码:
##备份agent本地/etc/passwd文件到/tmp并命名为test3

file {"/tmp/test3":

source => "/etc/passwd",

backup => ".bak_$uptime_seconds",

group => nobody,

owner => nobody,

mode => 600;

}

 
结果输出:
实战3##制定文件内容

代码:
##制定文件内容

file {"/tmp/test4_content":

content => "content test \n",

}

 

结果输出:

实战4##创建软链接测试

代码:
##创建软链接测试

file {"/tmp/test5_link1":

ensure => link,

target => "/var/log/messages";

"/tmp/test5_link2":

ensure => link,

target => "/var/log/puppet/puppet.log";

}

 

结果输出:

实战5.##文件删除测试

代码:
##文件删除测

file {"/tmp/test6":

ensure => absent;

}

 
结果输出:
文件管理常用参数诠释:

1.backup参数 指定在文件内容替换之前进行备份操作,可以备份在本地,也可以集中备份。集中远程备份的话可以使用filebucket(我们在后面的实战部分会进行详细介绍),这个备份的时候如果备份在本地可以指定备份的文件名。

2.content参数 指定文件的内容(字符串),这个参数和source、target参数冲突。

3.ensure参数 这个参数指定是否创建、删除文件或者目录,有present、absent、file、directory等值。其中present会检查文件是否存在,不存在就会创建一个空文件。absent会删除文件或者目录,如果是目录需要指定recurse参数指定是否允许递归。如果指定的是其他的参数,则会创建连接文件,为了方便管理,建议在创建的时候使用ensure => link,并通过target参数指定文件。注意不能在windows系统上链接文件,

4.force参数 该参数强制执行文件操作,进行如下操作的时候必须指定force参数 1)purge 子目录 2)用文件或者链接文件替换目录 3)使用ensure => absent参数删除目录

5.group参数 指定文件或者目录的属组,可以是组名或者组id,如果是windows的话属组和属主不能相同。

6.ignore参数 这个参数指定在递归期间对符合指定的模式的文件操作将被忽略。

7.links参数 这个参数指定处理文件期间如何处理链接文件,可以设置follow和manage。在拷贝文件的时候,follow将会拷贝目标文件代替链接文件,manage将只会拷贝链接文件,ignore将会跳过。

8.mode参数 这个参数用来指定文件或者目录的权限,puppet使用传统的unix权限方案,如果系统采用的权限方案不同的,puppet为这些系统将权限翻译成等价的权限,比如windows。这些权限可以是数字(r=4,w=2,x=1)也可以是字符(rwxst)。

9.owner参数 指定文件的属主,可以是用户名或是用户id,如果是windows的话属组和属主不能相同。

10.path参数 指定文件管理的路径。Windows路径也使用/而不是\。

11.purge参数 这个参数会删除在master上不存在的文件,这个参数只有在管理目录的时候指定了recurse => true参数的时候才有意义。

12.recurse参数 这个参数指定是否进行递归调用以及递归调用的深度,选项如下 1)inf,true —在远程和本地都进行递归调用 2)remote —只在远程进行递归调用 3)false —不进行递归调用 4)[0-9]+ —和true参数一样,但是限制递归调用目录的深度

13.source参数 该参数指定将会被拷贝到指定位置的资源文件,值可以是指定远程文件的URIS或者本地的完整路径。可以指定多个sorce,这个参数和content、target冲突。

14.target参数 这个参数指定创建链接文件的目标文件或者目录。

文档参考:

http://docs.puppetlabs.com/references/stable/type.html#file

http://www.jbxue.com/

  1. 用户管理

代码:
###用户管理

group{"py": #组名

ensure => "present", #创建用户组

gid => 2002, #组id

name => "py",

}

 

user{"py":

#ensure => "absent", #删除py用户

ensure => "present", #新增py用户

uid => 2002,

gid => 2002,

home => '/home/py',

shell => "/bin/bash",

password => '$1$zRFsT1$X3TE0/smnkWtxE2P.BPWq/', #grub-md5-crypt 工具生成

 

}

file {"/home/py": #创建用户家目录

group => 2002,

owner => 2002,

mode => 700,

ensure => directory;

}

 
结果输出:
用户管理常用参数诠释:

使用puppet可以方便的进行文件管理,可以对文件的内容、属组、属主、权限等进行管理。可管理的文件类型包括普通文件、目录、链接文件。类型需要在ensure类型中明确指定。接下来从三个方面来介绍puppet文件管理的操作。

一、 Puppet服务器端的配置

  1. fileserver.conf文件的配置
vim fileserver.conf 添加如下内容,在puppet master上创建一个文件存放目录

[files]

path /etc/puppet/files

allow 10.1.4.0/24

  1. site.pp文件的配置
最好是更改其他的文件,然后用这个文件import进来,我这里为了测试简便就直接更改这个文件了,具体的如何操作见后面的实战部分。

二、 Puppet文件管理重要参数介绍

  1. backup参数
指定在文件内容替换之前进行备份操作,可以备份在本地,也可以集中备份。集中远程备份的话可以使用filebucket(我们在后面的实战部分会进行详细介绍),这个备份的时候如果备份在本地可以指定备份的文件名。
  1. content参数
指定文件的内容(字符串),这个参数和source、target参数冲突。
  1. ensure参数
这个参数指定是否创建、删除文件或者目录,有present、absent、file、directory等值。其中present会检查文件是否存在,不存在就会创建一个空文件。absent会删除文件或者目录,如果是目录需要指定recurse参数指定是否允许递归。如果指定的是其他的参数,则会创建连接文件,为了方便管理,建议在创建的时候使用ensure => link,并通过target参数指定文件。注意不能在windows系统上链接文件,
  1. force参数
该参数强制执行文件操作,进行如下操作的时候必须指定force参数

Ø purge 子目录

Ø 用文件或者链接文件替换目录

Ø 使用ensure => absent参数删除目录

  1. group参数
指定文件或者目录的属组,可以是组名或者组id,如果是windows的话属组和属主不能相同。
  1. ignore参数
这个参数指定在递归期间对符合指定的模式的文件操作将被忽略。
  1. links参数
这个参数指定处理文件期间如何处理链接文件,可以设置follow和manage。在拷贝文件的时候,follow将会拷贝目标文件代替链接文件,manage将只会拷贝链接文件,ignore将会跳过。
  1. mode参数
这个参数用来指定文件或者目录的权限,puppet使用传统的unix权限方案,如果系统采用的权限方案不同的,puppet为这些系统将权限翻译成等价的权限,比如windows。这些权限可以是数字(r=4,w=2,x=1)也可以是字符(rwxst)。
  1. owner参数
指定文件的属主,可以是用户名或是用户id,如果是windows的话属组和属主不能相同。
  1. path参数
指定文件管理的路径。Windows路径也使用/而不是\。
  1. purge参数
这个参数会删除在master上不存在的文件,这个参数只有在管理目录的时候指定了recurse => true参数的时候才有意义。
  1. recurse参数
这个参数指定是否进行递归调用以及递归调用的深度,选项如下

Ø inf,true ---在远程和本地都进行递归调用

Ø remote ---只在远程进行递归调用

Ø false ---不进行递归调用

Ø [0-9]+ ---和true参数一样,但是限制递归调用目录的深度

  1. source参数
该参数指定将会被拷贝到指定位置的资源文件,值可以是指定远程文件的URIS或者本地的完整路径。可以指定多个sorce,这个参数和content、target冲突。
  1. target参数
这个参数指定创建链接文件的目标文件或者目录。

上面只是列了一些常用的选项,更多选项请参考:

http://docs.puppetlabs.com/references/latest/type.html#file

 

三、 Puppet文件管理实战

  1. 使用filebucket进行远程备份。
Ø Filebucket的配置

vim site.pp

#添加filebucket的配置

filebucket { 'main':

server => "puppet.zhang.com",

path => false,

}

#让节点node1.zhang.com进行远程备份

node 'node1.zhang.com'{

file { "/etc/test2":

source => "puppet://puppet.zhang.com/files/test2",

backup => main

}

}

如果没有设置bucketdir路径,那么默认文件保存在master的$vardir/bucket路径。存储是以文件的md5值为目录,目录下面存储了文件的路径和内容,因此获取备份文件的内容和恢复都需要使用到文件的md5值。

Ø 在agent通过filebucket客户端获取文件的内容

puppet filebucket get 4894b816078bcca4b63a6feaaf38aff8

Ø 在agent通过filebucket客户端还原文件的内容

puppet filebucket restore /etc/test2 4894b816078bcca4b63a6feaaf38aff8

 

  1. 将master上文件目录下的一个文件,复制到agent的指定位置,如果文件存在就先对文件进行备份然后覆盖。
配置代码如下:

node 'node1.zhang.com'{

file {"/etc/test1":

source => "puppet://puppet.zhang.com/files/test1",

backup => ".bak_$uptime_seconds",

}

}

 

  1. 将agent上的一个文件复制成另外一个文件,如果目的文件存在就先做备份再覆盖,并制定文件属master和权限。
配置代码如下:

node 'node1.zhang.com'{

file {"/tmp/test2":

source => "/etc/passwd",

backup => ".bak_$uptime_seconds",

group => nobody,

owner => nobody,

mode => 600;

}

}

 

  1. 在agent上创建/tmp/test3,并制定文件的内容为test3。
配置代码如下:

node 'node1.zhang.com'{

file {"/tmp/test3":

content => "test3"}

}

 

  1. 对agent上的某个文件或者文件夹建立软连接。
node 'node1.zhang.com'{

file {"/tmp/test4":

ensure => link,

target => "/var/log/messages";

"/tmp/test5":

ensure => link,

target => "/var/log";

}

}

也可以简写成如下代码:

node 'node1.zhang.com'{

file {"/tmp/test4":

ensure => "/var/log/messages";

"/tmp/test5":

ensure => "/var/log";

}

}

 

  1. 如果agent上/tmp/test6文件存在的话就删除掉agent上的/tmp/test6文件。
node 'node1.zhang.com'{

file {"/tmp/test6":

ensure => absent;

}

}

 

  1. 如果agent上不存在/tmp/test7文件就在agent上创建/tmp/test6文件。
node 'node1.zhang.com'{

file {"/tmp/test7":

ensure => present;

}

}

 

  1. 在agent上创建目录。
node 'node1.zhang.com'{

file {

"/tmp/test8":

ensure => directory;

}

}

 

  1. 删除agent上面的目录。
node 'node1.zhang.com'{

file { "/tmp/test9/":

ensure => absent,

force => true;

}

}

 

  1. 类似rsync,将master上面的文件目录同步到agent上,不同步含有log的文件和目录,如果含有子目录,递归到子目录,删除master上没有agent上有的文件或者目录。
node 'node1.zhang.com'{

file {"/tmp/test10":

ensure => directory,

source => "puppet://puppet.zhang.com/files/",

ignore => 'log',

recurse => true,

purge => true,

force => true,

}

}

 

 

四、 参考文档

http://docs.puppetlabs.com/references/stable/configuration.html

http://docs.puppetlabs.com/references/stable/configuration.html

转载自http://www.178linux.com/3987

上一篇: 无

微信关注

获取更多技术咨询