自定义一个salt.grains 查看/etc/salt/master配置文件 file_roots: #分环境 uat: - /srv/salt/uat/ prod: - /srv/s
自定义一个salt.grains 查看/etc/salt/master配置文件
file_roots: #分环境
uat:
- /srv/salt/uat/
prod:
- /srv/salt/prod/
根据配置在/srv/salt/prod 生产环境profile下新建文件夹_grains
由于salt不自带获取disk磁盘大小的grains,我们必须要通过Python脚本自定义,脚本如下:
[root@PyDev _grains]# cat disk.py
import subprocess
def disk():
child = subprocess.Popen(["lsblk", "-b"], stdout=subprocess.PIPE)
out = child.stdout.readlines()
total_disk=0
for item in out:
line = item.strip().split()
if line[5] == 'disk': #把类型为disk的物理磁盘空间加起来
k = int(line[3])
total_disk += k
total_disk = total_disk / 1024 /1024 /1024
grains['disk']=total_disk
return grains #返回给grains
注意千万别写错了,任何对生产的操作都可能会造成非常严重的后果,Devops的开发必须对自己每一行代码负责
Jul 26 22:18:47 PyDev salt-minion: TypeError: can't serialize <function disk at 0x181f050>
删除 /var/cache/salt/minion/extmods/grains/ 下对应的文件就可以了
以后执行grains之前一定要准备好ssh脚本,任何方案和操作都要有回滚计划
把grains推送prod环境
[root@PyDev bin]# salt '*' saltutil.sync_all slatenv=prod
PyDev:
----------
beacons:
engines:
grains:
- grains.disk
log_handlers:
modules:
output:
proxymodules:
renderers:
returners:
sdb:
states:
utils:
运用成功,我们来跑一下grains
[root@PyDev _grains]# salt '*' grains.items | more
cpu_model:
Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
cpuarch:
x86_64
disk:
100
disks:
已经获取了100G磁盘