“Saltstack文件管理”的版本间的差异
跳到导航
跳到搜索
(→参考) |
|||
第25行: | 第25行: | ||
<pre>salt自带有cp模块,模块的方法可以用下面的命令查看下 | <pre>salt自带有cp模块,模块的方法可以用下面的命令查看下 | ||
salt '*' sys.doc | grep "salt '\*' cp" | salt '*' sys.doc | grep "salt '\*' cp" | ||
+ | |||
+ | |||
+ | |||
+ | #利用 salt 传输和安装 jdk | ||
+ | mv jdk-8u172-linux-x64.rpm /srv/salt/ | ||
+ | salt prod-secret* test.ping | ||
+ | salt prod-secret* cp.get_file salt://jdk-8u172-linux-x64.rpm /root/jdk-8u172-linux-x64.rpm | ||
+ | salt prod-secret* cmd.run 'rpm -ivh /root/jdk-8u172-linux-x64.rpm' | ||
+ | alt prod-secret* cmd.run 'java' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
发送一个文件给客户端: 会自动覆盖原来的文件 这个要小心 | 发送一个文件给客户端: 会自动覆盖原来的文件 这个要小心 |
2020年1月16日 (四) 08:23的版本
saltstack 文件管理 SLS(代表SaLt State文件)是Salt State系统的核心
目录
Q:问题出现
项目有好几台机器要改一下备份脚本,如果一台台上去,真的是烦和累,刚好想到salt ,爽了一把 又有想学好 python的动力了 哈哈
配置
## 首先修改master的配置文件,指定根目录,注意缩进全部使用两个空格来代替Tab(python规范) [root@ ~]# vi /etc/salt/master file_roots: base: - /srv/salt # dev: # - /srv/salt/dev ## 确定指定的目录是否存在,如果不存在,需要手动来创建目录 /srv/salt/base和/srv/salt/failover这些目录是不存在,需要手动创建。这里还需要说明的是下载文件时的搜索顺序。文件服务器在给minions传输文件时,是有搜索顺序的。这里用上述配置说明:如果文件URL为:salt://httpd/httpd.conf。那么传输文件时,首先搜索/srv/salt/base/httpd/httpd.conf,如果找到了,则下载;否则就使用/srv/salt/failover/httpd/httpd.conf ## 重启master服务 /etc/init.d/salt-master restart salt://httpd/httpd.conf表示 /srv/salt/base/httpd/httpf.conf
A: 解决方案
1、文件传输:
salt自带有cp模块,模块的方法可以用下面的命令查看下 salt '*' sys.doc | grep "salt '\*' cp" #利用 salt 传输和安装 jdk mv jdk-8u172-linux-x64.rpm /srv/salt/ salt prod-secret* test.ping salt prod-secret* cp.get_file salt://jdk-8u172-linux-x64.rpm /root/jdk-8u172-linux-x64.rpm salt prod-secret* cmd.run 'rpm -ivh /root/jdk-8u172-linux-x64.rpm' alt prod-secret* cmd.run 'java' 发送一个文件给客户端: 会自动覆盖原来的文件 这个要小心 root@ab bakcup]# salt 'db' cp.get_file salt://dbbackup.sh /root/dbbackup.sh abroad_db2: /root/dbbackup.sh salt的主目录在/srv/salt下面,这个可以在配置文件里设定,我上面就是把/srv/salt/test/dbbackup.sh这个文件推送到客户端去 这样写可能报错哦 salt ‘abroad_db2’ cp.get_file salt://dbbackup.sh /root/ 使用cp.get_file进行文件的分发时时也可以指定是否对分发的文件进行压缩 使用gzip的方式进行压缩,数字越大,压缩率就越高,9代表最大的压缩率 [root@ ~]# salt 'db' cp.get_file salt://dbbackup.sh /root/dbbackup.sh gzip=9 当minion上的目标目录不存在时,可以使用makedirs参数来创建目标目录,如下 [root@ ~]# salt 'db' cp.get_file salt://dbbackup.sh /root/dbbackup.sh gzip=9 makedirs=True
2、文件追加:
使用file模块的append方法: root@debian:/srv/salt# salt '*' file.append /root/test.sh "adfadf" 192.168.1.101: Wrote 1 lines to “/root/test.sh” 这样可以轻松把内容添加到文件上去,file还有很多方法,具体可以看看源码 不怕文件零碎,不怕新加了机器你还要为他们单独推送
3. 目录传输 cp.get_dir
顾名思义,cp.get_dir就是下载目录,用法基本同cp.get_file一样 将master端的test_dir目录下载到minion端的/root目录下 [root@vm ~]# salt '*' cp.get_dir salt://test_dir/ /root 192.168.30.96: - /root/test_dir/a.txt - /root/test_dir/b.txt 192.168.30.95: - /root/test_dir/a.txt - /root/test_dir/b.txt
4.cp.push 下载
cp.push 模块允许minion上传文件到master端。注意事项: cp.push功能默认不开启,需要修改配置文件中的file_recv 环境,默认为False 上传的文件存放在master端的 /var/cache/salt/master/minions/<minion_id>/files/ 目录下 修改master配置文件并重启。 # Allow minions to push files to the master. This is disabled by default, for file_recv: True # It will be interpreted as megabytes. Default: 100 file_recv_max_size: 400 #从minions 中把 miniontest 文件 下载回master [root@vm ~]# salt '192.168.30.95' cp.push /root/miniontest 192.168.30.95: True # 查看文件 [root@vm ~]# ls /var/cache/salt/master/minions/192.168.30.95/files/root/miniontest /var/cache/salt/master/minions/192.168.30.95/files/root/miniontest
利用Salt API分发文件
In [10]: import salt.client
In [11]: local = salt.client.LocalClient()
In [12]: local.cmd('*', 'cp.get_file', ['salt://httpd/httpd.conf', '/root/aaaaaaa']) Out[12]: {'192.168.1.223': '/root/aaaaaaa'}
最近在写运维管理平台时,要做一个文件分发的功能,因此就用到了Salt的文件服务器以及cp模块来做,再调用下Salt开放的API,达到的效果也是十分理想的。当然,前提是要把文件准备在特定的目录下,这点只要自己做一个规范,也是很好管理的
其它
salt提供的sls模板来实现下 先在/srv/salt目录下建立一个入口文件 root@debian:/srv/salt# cat top.sls base: '*': - scpfile.mytest 第二行是一个标志 第三行是指定机器 第四行就是去执行scpfile目录下mytest.sls这个文件 [root@ab scpfile]# cat mytest.sls /root/test.sh: file.managed: - source: salt://scpfile/test.sh - mode: 755 sls文件讲解 第二行是客户端文件位置 第三行是salt函数 第四行是源文件 第五行是指文件的权限控制 然后在scpfile目录下新建一个test.sh 最后我们来推送一下: #run [root@abroad_sdk scpfile]# salt '*' state.highstate -v Executing job with jid 20161111165118556055 ——————————————- abroad_queue: ———- ID: /root/test.sh Function: file.managed Result: True Comment: File /root/test.sh updated Started: 16:51:18.969509 Duration: 14.46 ms Changes: ———- diff: New file mode: 0755 Summary ———— Succeeded: 1 (changed=1) Failed: 0 ———— Total states run: 1 这里开始 是另外一个机器了 追加内容: sed 的好像不成功 [root@abroad_sdk scpfile]# cat mytest.sls /root/test.sh: file.managed: - source: salt://scpfile/test.sh - mode: 755 /root/test.sh: file.append: - text: - "11111111111111" sed修改内容: root@ubuntu:/srv/salt/scpfile# vi my.sls - textdd: /root/test.sh: file.managed: - source: salt://scpfile/test.sh - mode: 755 /root/test.sh: file.append: - text: - "11111111111111" /root/test.sh: file.sed: - before: 11111111111111 - after: 2222 ——————————————————– root@ubuntu:/srv/salt/scpfile# salt ‘*’ state.highstate -v Executing job with jid 20131031165305244140 ——————————————- 192.168.1.101: ———- State: – file Name: /root/test.sh Function: sed Result: True Comment: sed ran without error Changes: diff: — +++ @@ -1,4 +1,4 @@ adfkdddddd ddddddddddd ddd -11111111111111 +2222 Summary ———— Succeeded: 1 Failed: 0 ———— Total: 1
参考
saltstack使用指南:saltstack组件之state状态管理
http://lihuipeng.blog.51cto.com/3064864/1317841
自动化运维神器之saltstack (二)文件服务器 http://www.ahlinux.com/mainte/9915.html