页面“Saltstack文件管理”与“Zabbix 调用API 批量添加主机”之间的差异

来自linux中国网wiki
(页面间的差异)
跳到导航 跳到搜索
 
 
第1行: 第1行:
saltstack 文件管理
+
[[category:ops]]  [[category:zabbix]]
SLS(代表SaLt State文件)是Salt State系统的核心
+
=pre=
==Q:问题出现==
 
项目有好几台机器要改一下备份脚本,如果一台台上去,真的是烦和累,刚好想到salt ,爽了一把 又有想学好 python的动力了 哈哈
 
  
==配置==
+
已有 salt  
<pre>## 首先修改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
+
可以见 批量添加 salt Salt-ssh批量自动安装被控端minion
  
## 重启master服务
+
=批量添加zabbix agent=
/etc/init.d/salt-master restart
+
==直接用cmd.run==
 +
  salt 'prod-mq03' cmd.run 'yum install  -y zabbix-agent'
 +
==zabbix state.sls ==
 +
  有空要试一下
  
salt://httpd/httpd.conf表示 /srv/salt/base/httpd/httpf.conf</pre>
 
  
==A: 解决方案==
 
===1、文件传输:===
 
<pre>salt自带有cp模块,模块的方法可以用下面的命令查看下
 
salt '*' sys.doc | grep "salt '\*' cp"
 
  
发送一个文件给客户端: 会自动覆盖原来的文件 这个要小心
 
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这个文件推送到客户端去
 
  
这样写可能报错哦
+
[https://www.cnblogs.com/LYCong/p/7879805.html salt 使用state文件来配置zabbix客户端文件]
salt ‘abroad_db2’ cp.get_file salt://dbbackup.sh /root/
 
  
使用cp.get_file进行文件的分发时时也可以指定是否对分发的文件进行压缩
+
[https://blog.csdn.net/u011075143/article/details/78615691 salt 使用state文件来配置zabbix客户端文件]
使用gzip的方式进行压缩,数字越大,压缩率就越高,9代表最大的压缩率
 
[root@ ~]# salt 'db' cp.get_file salt://dbbackup.sh /root/dbbackup.sh gzip=9
 
  
当minion上的目标目录不存在时,可以使用makedirs参数来创建目标目录,如下
+
[https://www.cnblogs.com/Jackie-Chen/articles/10795003.html SaltStack批量安装zabbix-agent(yum安装)]
[root@ ~]# salt 'db' cp.get_file salt://dbbackup.sh /root/dbbackup.sh gzip=9 makedirs=True
 
  
</pre>
+
[https://www.cnblogs.com/xiewenming/p/7713660.html SaltStack安装zabbix-agent-第九篇]
  
===2、文件追加:===
+
[https://www.cnblogs.com/python-study/p/5504501.html SaltStack 使用pillar安装配置管理zabbix]
<pre>使用file模块的append方法:
 
  
root@debian:/srv/salt# salt '*' file.append /root/test.sh "adfadf"
+
[https://blog.csdn.net/reblue520/article/details/76286843 saltstack自动化运维系列⑦SaltStack实践配置管理安装zabbix]
192.168.1.101:
 
Wrote 1 lines to “/root/test.sh”
 
这样可以轻松把内容添加到文件上去,file还有很多方法,具体可以看看源码
 
  
不怕文件零碎,不怕新加了机器你还要为他们单独推送</pre>
+
[https://www.cnblogs.com/LYCong/p/7879805.html salt 使用state文件来源码安装和配置zabbix客户端文件]
  
===3. 目录传输 cp.get_dir===
+
=批量修改zabbix agent配置=
<pre>顾名思义,cp.get_dir就是下载目录,用法基本同cp.get_file一样
+
<pre>
 +
Server=148.66.11.55
 +
ServerActive=148.66.11.55
 +
Hostname=prod-sns-mq01
  
将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
 
  
</pre>
 
 
===4.cp.push 下载 ===
 
<pre>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
+
sed -i '/^Hostname/ s/.*/Hostname=zabbix_hk/' /etc/zabbix/zabbix_agentd.conf
file_recv: True
 
  
# It will be interpreted as megabytes. Default: 100
+
#zbx hostname
file_recv_max_size: 400
+
salt 'prod-mq03' cmd.run 'hostname'
 +
prod-mq03:
 +
    prod-mq03
  
#从minions 中把 miniontest 文件 下载回master
 
[root@vm ~]# salt '192.168.30.95' cp.push /root/miniontest
 
192.168.30.95:
 
    True
 
  
 +
#这里可以取出 hostname 作变量 和作循环
 +
Server=148.66.01.05
 +
ServerActive=148.66.01.05
  
# 查看文件
+
myhost=`salt 'prod-mq03' cmd.run 'hostname' |sed -n '2p' |awk '{print $1}'`
[root@vm ~]# ls /var/cache/salt/master/minions/192.168.30.95/files/root/miniontest
+
salt 'prod-sns-mq02' cmd.run "sed -i '/^Hostname/ s/.*/Hostname=$myhost//etc/zabbix/zabbix_agentd.conf"
/var/cache/salt/master/minions/192.168.30.95/files/root/miniontest
 
  
</pre>
+
#这个替换太多了 不太好写匹配  要如下添加 =  or  直接 inser 就是了
 +
salt 'prod-mq03' cmd.run "sed -i '/^Server=/ s/.*/Server=$Server/'  /etc/zabbix/zabbix_agentd.conf"
 +
salt 'prod-mq03' cmd.run "sed -i '/^ServerActive=/ s/.*/ServerActive=$ServerActive/'  /etc/zabbix/zabbix_agentd.conf"
  
  
 +
注意  ""  结果不太对的
 +
salt 'prod-sns-mq02' cmd.run "hostname |sed -n '2p' |awk '{print $1}'"
 +
prod-sns-mq02:
  
==利用Salt API分发文件==
 
 
</pre>
 
</pre>
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,达到的效果也是十分理想的。当然,前提是要把文件准备在特定的目录下,这点只要自己做一个规范,也是很好管理的
 
</pre>
 
 
== 其它 ==
 
<pre>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 </pre>
 
 
==参考==
 
 
[https://blog.csdn.net/m0_37814112/article/details/80348715 saltstack使用指南:saltstack组件之state状态管理]
 
 
[https://blog.csdn.net/Freshair_x/article/details/80290562 saltstack salt的state.sls的使用]
 
 
 
 
http://lihuipeng.blog.51cto.com/3064864/1317841
 
 
自动化运维神器之saltstack (二)文件服务器
 
http://www.ahlinux.com/mainte/9915.html
 
 
[http://www.jianshu.com/p/a0677d38bd1f Salt文件服务器与salt-cp以及cp模块]
 
[http://732233048.blog.51cto.com/9323668/1640990 saltstack管理六之数据同步方式和常用命令]
 
[[category:ops]] [[category:saltstack]]
 

2019年12月26日 (四) 08:17的版本

pre

已有 salt

可以见 批量添加 salt Salt-ssh批量自动安装被控端minion

批量添加zabbix agent

直接用cmd.run

  salt 'prod-mq03' cmd.run 'yum install  -y zabbix-agent'

zabbix state.sls

有空要试一下 



salt 使用state文件来配置zabbix客户端文件

salt 使用state文件来配置zabbix客户端文件

SaltStack批量安装zabbix-agent(yum安装)

SaltStack安装zabbix-agent-第九篇

SaltStack 使用pillar安装配置管理zabbix

saltstack自动化运维系列⑦SaltStack实践配置管理安装zabbix

salt 使用state文件来源码安装和配置zabbix客户端文件

批量修改zabbix agent配置

Server=148.66.11.55
ServerActive=148.66.11.55
Hostname=prod-sns-mq01



sed -i '/^Hostname/ s/.*/Hostname=zabbix_hk/' /etc/zabbix/zabbix_agentd.conf

#zbx hostname
 salt 'prod-mq03' cmd.run 'hostname'
prod-mq03:
    prod-mq03


#这里可以取出 hostname 作变量 和作循环 
Server=148.66.01.05
ServerActive=148.66.01.05

myhost=`salt 'prod-mq03' cmd.run 'hostname' |sed -n '2p' |awk '{print $1}'`
salt 'prod-sns-mq02' cmd.run "sed -i '/^Hostname/ s/.*/Hostname=$myhost/'  /etc/zabbix/zabbix_agentd.conf"

#这个替换太多了 不太好写匹配  要如下添加 =  or  直接 inser 就是了 
salt 'prod-mq03' cmd.run "sed -i '/^Server=/ s/.*/Server=$Server/'  /etc/zabbix/zabbix_agentd.conf"
salt 'prod-mq03' cmd.run "sed -i '/^ServerActive=/ s/.*/ServerActive=$ServerActive/'  /etc/zabbix/zabbix_agentd.conf"


注意  ""  结果不太对的 
 salt 'prod-sns-mq02' cmd.run "hostname |sed -n '2p' |awk '{print $1}'"
prod-sns-mq02: