在配置管理系统中,从中心服务器想客户端推送文件是很基本的需求。SaltStack
使用内建的ZeroMQ
服务器做为文件服务器。
文件服务器主要用来在state
系统中推送文件到客户端,也可以用于其他文件的传输。
cp模块
客户端对文件服务器的操作都在cp
模块中。Salt Stat
e系统,Salt-cp
都用到了cp
模块。
环境
因为文件服务器是为Salt state
系统服务,所以也支持环境的概念。master
的配置文件中定义各环境的路径,文件的路径基于指定环境的根目录(参见下面的例子)。
常见用法
get_file
cp.get_file
用来从master
下载文件到客户端,语法如下:
[root@localhost ~]# salt '*' cp.get_file salt://123.txt /etc/123.txt salt_minion_002: /etc/123.txt salt_minion_001: /etc/123.txt
其中123.txt
在master
上的实际路径要看环境中定义的根目录,假设在master
中有如下定义:
file_roots: base: - /srv/salt/
那么123.txt
的实际路径就是/srv/salt/123.txt
,这样做的好处是,可以满足state
系统中环境的概念。
源路径和目标路径中都可以使用模板,如下:
salt '*' cp.get_file "salt://`grains`.`os`/vimrc" /etc/vimrc template=jinja 这个例子中,将下载与客户端操作系统名字相同的目录下的文件。
salt '*' cp.get_file "salt://`grains`.`os`/vimrc" /etc/vimrc template=jinja 这个例子中,将下载与客户端操作系统名字相同的目录下的文件。
对于大文件,cp.get_file
支持gzip
压缩,在参数中指定gzip
的压缩级别,如下:
salt '*' cp.get_file salt://vimrc /etc/vimrc gzip=5 其中,1代表作小压缩,9代表最大压缩。
cp.get_file
默认不在客户端上建立目录,如果客户端上没有这个目录了,文件拷贝将失败,可以指定makedirs=True
来创建目录:
[root@localhost ~]# salt 'salt_minion_002' cp.get_file salt://123.txt /etc/test_dir/123.txt makedirs=True salt_minion_002: /etc/test_dir/123.txt 如果test_dir不存在则会创建
get_dir
cp.get_dir
可以从master
下载整个目录,语法如下:
[root@localhost ~]# salt '*' cp.get_dir salt://test001 /opt/ salt_minion_002: - /opt//test001/123.txt - /opt//test001/456.txt salt_minion_001: - /opt//test001/123.txt - /opt//test001/456.txt
cp.get_dir
也支持模板和压缩:
salt '*' cp.get_dir salt://etc/`pillar`.`webserver` /etc gzip=5 template=jinja
get_url
cp.get_url
可以从一个URL地址下载文件,URL可以是msater
上的路径(salt://
),也可以是http网址。
salt '*' cp.get_url salt://my/file /tmp/mine salt '*' cp.get_url http://www.slashdot.org /tmp/index.html
get_template
cp.get_template
可以在文件下载之前用模板引擎处理。
salt '*' cp.get_template salt://path/to/template /minion/dest
push
cp.push
可以从客户端传文件到master
上,处于很明显的安全考虑,默认没有启用此功能,如果你需要的话可以参考文档,很方便的开启。