1.安装启动配置服务及简单使用
yum install python-jinja2 salt salt-master salt-minion -y
systemctl start salt-master && systemctl start salt-minion && systemctl enable salt-master && systemctl enable salt-minion
或者pip install salt(因为salt是python程序),会打开4505端口用于发送命令与4506端口用来接收结果
cat /etc/hosts
127.0.0.1 master minion-one
vim /etc/salt/minion
master:
- master # master为master的主机名,也可以是ip,可设置多个master
- new-master
id: minion-one # :后面必须要有个空格,一般设置成你的主机名
minion执行:systemctl restart salt-minion
master执行:salt-key -L # 看到minion-one存在于Unaccepted Keys里
salt-key -f minion-one # 查看minion-one密钥更具体的信息
minion执行:salt-call --local key.finger # 查看本地密钥,跟刚才在master查看是一致的
master执行:salt-key -a minion-one # 为minion-one接受密钥
salt-key -L # 看到minion-one存在于Accepted Keys里,表示签发成功了
在minion较多的情况下可以编辑master的/etc/salt/master文件修改#auto_accept: False为auto_accept: True就可以自动签发了
master执行:salt '*' test.ping
minion-one:
True
这是一条测试主机是否存活的命令,返回为True为存活,False不一定为不存活,如果拥有多个minion则会返回各minion的True(False)
salt 'minion-one' sys.list_functions test # 查看其他内置方法
salt minion-one sys.doc test.sleep # 查看某方法的帮助文档
2.常用操作
salt '*' cmd.run 'whoami' # 执行某条命令
salt '*' pkg.install 'httpd' # 安装某个包
salt '*' pkg.version 'httpd' # 查看包的版本
salt '*' pkg.remove 'httpd' # 删除某个包
salt '*' service.status 'httpd' # 查看某服务状态
salt '*' service.start 'httpd' # 开
salt '*' service.stop 'httpd' # 关
salt '*' file.stats /etc/yum.repos.d/base.repo # 查看某文件(目录)状态,返回所有者、组、ctime、atime、权限等
salt '*' file.chown /etc/yum.repos.d/base.repo apache root # 更改权限等,返回值是None(估计有BUG)
salt '*' user.add bfmq # 加用户
salt '*' user.delete bfmq # 删除用户
salt '*' user.info bfmq # 查看用户信息
3.自定义模块
mkdir -p /srv/salt/_modules/
salt '*' saltutil.sync_modules # 同步模块
4.state
执行模块是过程式的,而状态模块是描述性的
调用命令时仅仅实质性命令,而使用state模块会先检测当前状态与目标状态,状态不同才会进行操作
sls配置文件使用yaml语言,层级关系用缩进(两个空格来表示)
salt '*' sys.list_state_modules # 列出所有状态模块
salt '*' sys.list_state_functions pkg # 列出某状态模块内所有函数
5.常用state
下发文件(文件必须存在!)
/etc/foo.conf: # 目标路径
file.managed:
- source:
- salt://foo.conf # 源路径,默认情况下salt的base目录在/srv/salt/中
- user: foo # 目标所有者
- group: users # 目标所有组
- mode: 644 # 目标权限
创建目录
/srv/stuff/substuf: # 目标路径
file.directory:
- user: root # 目标所有者
- group: root # 目标所有组
- mode: 755 # 目标权限
- makedirs: True # 允许创建目录
创建软连接
/etc/grub.conf: # 目标路径
file.symlink:
- target: /boot/grub/grub.conf # 源路径
下发整个目录
/opt/code/flask: # 目标路径
file.recurse:
- source: salt://code/flask # 目标所有者
- include_empty: True # 包含空目录
安装软件
mypkgs:
pkg.installed:
- pkgs:
- foo
- bar: 1.2.3-4
- baz
安装指定版本
mypkgs:
pkg.installed:
- pkgs:
- foo
- bar: ‘>=1.2.3-4’
- baz
指定源安装
mypkgs:
pkg.installed:
- sources:
- foo: salt://rpms/foo.rpm
- bar: http://some.org/bar.rpm
- baz: ftp://some.rog/baz.rpm
- gux: /var/ftp/pub/gux.rpm
安装最新版本
mypkgs:
pkg.latest:
- pkgs:
- foo
- bar
- baz
启动redis
redis:
service.running:
- enable: True
- reload: True
- watch:
-pkg: redis
自动任务
date > /tmp/crontest:
cron.present:
- user: root
- minute: '*/5'
创建用户
user.present:
- fullname: bfmq
- shell: /bin/bash
- home: /home/bfmq
- uid: 666
- gid: 666
- groups:
- root
- bfmq
- apache
内核参数
vm.swappiness:
sysctl.present:
- value: 20
安装python模块
django:
pip.installed:
- name: django >= 1.6, <= 1.7
-require:
-pkg.python-pip
5.watch和require
require前置
watch变更后执行
6.jinja2
模版语言{{}},{%%}
7.grain
minion上的静态信息,如操作系统、cpu、内存、内核数量,重启后会重新计算生成
salt '*' grains.ls # 查看grains项
salt '*' grains.item os # 查看某项的值
salt '*' grains.items # 查看全部项的值
salt '*' grains.setval my_grain bar # 设置kv
salt '*' grains.setval "{'k1':'v1', 'k2':'v2'}" # 设置多个kv
salt -E '^m' grains.setval my_grain '['1','2','3']' # 设置单k多v
minion的/etc/salt/grains内可查询到刚才设置的值,因此直接在此文件内修改也可以达到添加自定义grain的目的
salt '*' grains.delval my_grain # 删除grains项,文件内直接删除也是可以的
mkdir -p /srv/salt/_grains
vim /srv/salt/_grains/my_grain_mod.py
salt '*' saltutil.sync_all # 同步全部
salt '*' sys.reload_modules # 重载模块
salt '*' grains.item now
8.pillar
储存在master上,每台minion只可以查询到自己的pillar
mkdir -p /srv/salt/_pillar
vim /srv/salt/_pillar/top.sls # 入口文件
base:
'minion_one':
- minion_one_key
vim /srv/salt/_pillar/minion_one_key.sls # 各minion自己的pillar文件
private_key: minion_one_key
salt '*' saltutil.refresh_pillar # 刷新pillar数据
9.jinja2+grain+pillar
呵呵