一、目标
如何开启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/fileserver3.重启salt-master服务
systemctl restart salt-master四、测试使用salt文件服务器-拷贝单个文件
1、往配置文件中写的文件服务器跟目录里随便写个测试文件
echo kahn > /srv/salt/fileserver/kahn.txt2、将刚才创建的文件利用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.txt2、在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: True2、重启master服务
systemctl restart salt-master3、在客户端创建个测试文件,便于等会传回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