##dev,stage,prod配置 目的:使用gitfs统一分布式环境中的配置,将开发环境与生产环境区分开来
###修改/etc/salt/master中如下内容
file_roots:
#保留字段
base:
- /srv/salt/base
#开发环境
dev:
- /srv/salt/dev
#测试环境
stage:
- /srv/salt/stage
#生产环境
prod:
- /srv/salt/prod
pillar_roots:
base:
- /srv/pillar/base
dev:
- /srv/pillar/dev
stage:
- /srv/pillar/stage
prod:
- /srv/pillar/prod
###重启服务
service salt-master restart
service salt-api restart
###top.sls文件
dev:
'localhist':
- test
pillar中的top.sls同上
###命令行测试效果
salt ‘localhist’ state.highstate’
###注意事项 state.sls 命令不受上述配置影响,它默认使用base环境,可通过saltenv=‘dev’ 来指定为开发环境
##使用gitfs ###安装必要的软件包
yum install -y libgit2
yum install -y libgit2-devel
yum install -y libffi
yum install -y libffi-devel
pip install -y pygit2
yum install -y GitPython
###修改/etc/salt/master
gitfs_remotes:
- ssh://git@127.0.0.1/saltconf.git
fileserver_backend:
- git
###设置key
- gitfs使用/root/.ssh/id_rsa 私钥,确保私钥已经被正确的设置
- 确保SSH Host Key 被添加到known_hosts文件中,可以用如下命令来设置(127.0.0.1为git服务器地址):
ssh 127.0.0.1
###重启服务
service salt-master restart
默认情况下,salt-master每隔60秒(loop_interval)从gitfs同步一次配置,文件存放在类似这样的路径中/var/cache/salt/master/gitfs/89883d08902f39c3af5e38cd990e2231/.git/
###开发和生产环境
git中不同的分支对应不同环境,例如dev
分支对应的就是dev
的开发环境。不过有一个例外,master
分支对应base
环境
###使用git hook触发更新 默认情况下,salt-master每隔60秒去更新gitfs。当使用命令git push来更新文件时 ,可以使用git hook来触发更新gitfs.
####salt-master端配置
修改/etc/salt/master
新增如下内容
reactor:
- 'salt/fileserver/gitfs/update':
- /srv/reactor/update_fileserver.sls
新增文件/srv/reactor/update_fileserver.sls
:
update_fileserver:
runner.fileserver.update
可以使用如下命令来触发salt-master更新gitfs
salt-call event.fire_master update salt/fileserver/gitfs/update
####配置git服务端hook post-receive钩子的作用是当用户成功push文件后触发一些操作
编辑/home/git/repositories/saltconf.git/hooks/post-receive
#!/bin/sh
set –e
sudo salt-call event.fire_master update salt/fileserver/gitfs/update
由于salt-master使用root权限在跑,git使用普通用户,所以要个git用户sudo权限
-
编辑
/etc/sudoers
注释掉如下选项。否则会报错:sudo: sorry, you must have a tty to run sudo# Defaults requiretty
-
新增文件
/etc/sudoers.d/git
:git ALL = NOPASSWD: ALL
NOPASSWD选项使git用户不需要输入密码来使用sudo
###已知问题
在salt-master启动后,第一次触发git hook时,salt-call event.fire_master update salt/fileserver/gitfs/update
命令会执行失败 ,这时可以在执行一次命令,或者等待60秒让sal-master自己刷新,以后就不会出现这个问题了。
###Pillar使用gitfs 可以通过ext_pillar来使用gitfs,不过其只支持base环境,无法设置dev,prod等其他环境,所以忽略掉。
来源:oschina
链接:https://my.oschina.net/u/1461430/blog/536260