Saltstack-07-文件服务器和cp模块

一、目标

如何开启salt的文件服务器,

如何使用salt拷贝文件、文件夹到各客户端

如何将客户端的文件上传到master上?(master服务器上存储传来的文件的默认路径是:/var/cache/salt/master/minions/)

二、说明

由于文件服务器是为Salt state system工作的,所以文件服务器也是支持环境的概念的。 
Salt文件服务器/etc/salt/master配置文件中的flie_roots选项管理。Salt文件服务器的默认环境为为base环境,base环境必须定义,因为当环境没有明确指定时,文件下载就是从base环境中去找的。其配置如下:

file_roots:
  base:
    - /srv/salt/
    - /srv/salt/fileserver

/srv/salt和/srv/salt/fileserver这些目录是不存在,需要手动创建。这里还需要说明的是下载文件时的搜索顺序。文件服务器在给minions传输文件时,是有搜索顺序的。这里用上述配置说明:如果文件URL为:salt://httpd/httpd.conf。那么传输文件时,首先搜索/srv/salt/httpd/httpd.conf,如果找到了,则下载;否则就使用/srv/salt/fileserver/httpd/httpd.conf

三、在master节点上开启salt的文件服务器

1.编辑master节点的主配置文件

vim /etc/salt/master
#在合适的地方添加以下内容
file_roots:
  base:
    - /srv/salt/
    - /srv/salt/fileserver

注释:base下可以有一个或多个路径。

2.手工创建这些文件服务器用到的文件夹

mkdir /srv/salt/
mkdir /srv/salt/fileserver

3.重启salt-master服务

systemctl restart salt-master

四、测试使用salt文件服务器-拷贝单个文件

1、往配置文件中写的文件服务器跟目录里随便写个测试文件

echo kahn > /srv/salt/fileserver/kahn.txt

2、将刚才创建的文件利用salt文件服务器拷贝到所有客户端

#写法1:
salt '*' cp.get_file salt://kahn.txt /tmp/kahn.txt

#写法2:拷贝到客户端的tmp目录下,同时文件名另存为kahn2.txt
salt '*' cp.get_file salt://kahn.txt /tmp/kahn2.txt

#写法3:拷贝到客户端的tmp目录下,文件名保持不变
salt '*' cp.get_file salt://kahn.txt /tmp/

3、测试在salt的两个文件服务器文件夹里放置同样一个文件名的不同内容的文件,看到底拷贝哪个?

#往master的第一个文件根目录里放一个文件a.txt
echo a >/srv/salt/a.txt
#往master的第2个文件根目录里放一个文件a.txt
echo b >/srv/salt/fileserver/a.txt

#开始拷贝
salt '*' cp.get_file salt://a.txt /tmp

测试结果是/srv/salt/a.txt被拷贝到了客户端。

当/srv/salt/a.txt在服务器端被删了的话,那么/srv/salt/fileserver/a.txt将会被拷贝到客户端。

也就是说有个先后顺序,顺序就是/etc/salt/master里定义的文件夹的顺序,最上面的文件夹最优先。

另外,如果客户端已经存在了这个文件,你再去拷贝到客户端,客户端的文件将被覆盖,切记。

4、当拷贝文件存放的目标路径不存在时,如何自动创建文件夹?

salt '*' cp.get_file salt://a.txt /tmp/a/d/ makedirs=True

注释:将salt服务器上的a.txt拷贝到minion的/tmp/a/d/文件夹下,如果该文件夹不存在,则自动创建目标文件夹(makedirs=True)

五、测试使用salt文件服务器-拷贝文件夹

1、在master上建测试文件夹和测试文件

mkdir /srv/salt/sourceFolder
echo s1 >/srv/salt/sourceFolder/s1.txt
echo s2 >/srv/salt/sourceFolder/s2.txt
mkdir /srv/salt/sourceFolder/a
mkdir /srv/salt/sourceFolder/b
echo a1 > /srv/salt/sourceFolder/a/a1.txt
echo b1 > /srv/salt/sourceFolder/a/b1.txt

2、在master上执行拷贝文件夹到minion服务器上

salt '*' cp.get_dir salt://sourceFolder /tmp

六、将客户端的文件上传到master上(cp.push)

1、修改master配置文件开启文件接收功能

vim /etc/salt/master

将【#file_recv: False】改为【file_recv: True】
file_recv: True

2、重启master服务

systemctl restart salt-master

3、在客户端创建个测试文件,便于等会传回master服务器上

salt 'salt2' cmd.run 'echo aaa | tee /root/a123.txt'

注释:在salt2这台客户端上创建个文件a123.txt

4、在master上执行文件上传(将客户端上的a123.txt上传到master服务器上)

salt 'salt2' cp.push /root/a123.txt

 上传到服务器的哪里了?默认master存储文件的路径是:/var/cache/salt/master/minions/

 

七、简单文件拷贝命令salt-cp

1.salt-cp拷贝文件

salt-cp '*' /MasterPath/source.txt /destination-minion-path/destination.txt

格式:salt-cp '<目标minion-id>' <master节点上的源文件的路径> <minion上的存放文件路径>

2.在master上用命令查看有哪些文件资源可供拷贝到minion上

salt '*' cp.list_master


版权声明:本文为xoofly原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。