saltstack配置gitfs與開發環境

##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

  1. gitfs使用/root/.ssh/id_rsa 私鑰,確保私鑰已經被正確的設置
  2. 確保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等其餘環境,因此忽略掉。

相關文章
相關標籤/搜索