##dev,stage,prod配置 目的:使用gitfs統一分佈式環境中的配置,將開發環境與生產環境區分開來react
###修改/etc/salt/master中以下內容git
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
###重啓服務api
service salt-master restart service salt-api restart
###top.sls文件服務器
dev: 'localhist': - test
pillar中的top.sls同上ssh
###命令行測試效果分佈式
salt ‘localhist’ state.highstate’
###注意事項 state.sls 命令不受上述配置影響,它默認使用base環境,可經過saltenv=‘dev’ 來指定爲開發環境oop
##使用gitfs ###安裝必要的軟件包post
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
###設置keyui
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等其餘環境,因此忽略掉。