記得很亂,需再整理
在master端重啓minion
salt '*' service.restart salt-minion
利用Returner_Mysql
需要在每臺minion上配置,vim /etc/salt/minion
每個minion都需要安裝python連接mysql的模塊:
yum -y install MySQL-python
mysql.host: '192.168.99.47'
mysql.user: 'salt'
mysql.pass: 'salt123'
mysql.db: 'salt'
mysql.port: 3306
在mysql上
DROP TABLE IF EXEISTS 'salt_returns';
CREATE TABLE 'salt_returns' (
'fun' varchar(50) not null,
'jid' varchar(255) not null,
'id' mediumtext not null,
'success' varchar(10) not null,
'full_ret' mediumtext not null,
'alter_time' timestamp default current_timestamp,
key 'id' ('id'),
key 'jid' ('jid'),
key 'fun' ('fun')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
grant all on salt.* to salt@'192.168.99.%' identified by "salt123";
flush privileges;
event
event是一個本地的ZeroMQ PUB Interface,event是一個開放的系統,用於發送信息
通知salt或其他的操作系統
每個event都有一個標籤。事件標籤允許快速置頂過濾事件。除了標籤之外,每個事件都有一個數據結構。這個數據結構是一個dict類型,其中包含關鍵事件的信息。
安裝mysql
創建數據庫,授權
修改master配置文件/etc/salt/master
mysql.host: '192.168.99.47'
mysql.user: 'salt'
mysql.pass: 'salt123'
mysql.db: 'salt'
mysql.port: 3306
4.準備監聽event的py腳本
5.安裝python的mysql模塊
在master端
import salt.utils.event
event = salt.utils.event.MasterEvent('/var/run/salt/master')
print eachevent
print '------'
yum -y install MySQL-python
DROP TABLE IF EXEISTS 'salt_returns';
CREATE TABLE 'salt_returns' (
'fun' varchar(50) not null,
'jid' varchar(255) not null,
'id' mediumtext not null,
'success' varchar(10) not null,
'full_ret' mediumtext not null,
'alter_time' timestamp default current_timestamp,
key 'id' ('id'),
key 'jid' ('jid'),
key 'fun' ('fun')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
grant all on salt.* to salt@'192.168.99.%' identified by "salt123";
flush privileges;
vi salt_event_to_mysql.py
#!/usr/bin/env python
#coding=utf8
import json
import salt.config
import salt.utils.event
import MySQLdb
__opts__ salt.config.client('/etc/salt/master')
conn = MySQLdb.connect(host=__opts__['mysql.host',user=__opts__['mysql.user'],passwd=__opts__['mysql.pass'],db=__opts__['mysql.db'],port=__opts__['mysql.port'])
cursor = conn.cursor()
event = salt.utils.event.iter_events(full=True):
ret = eachevent['data']
if "salt/job/" in eachevent['tag']:
if ret.has_key('id') and ret.has_key('return'):
if ret['fun'] == "saltutil.find_job":
continue
sql = '''INSERT INOT 'salt_returns' ('fun', 'jid', 'return','id','success','full_ret') VALUES (%s, %s, %s, %s, %s, %s)'''
cursor.execute(sql, (ret['fun'],ret['jid'],json.dumps(ret['return']),ret['id'],ret['success'],json.dumps(ret)))
cursor.execute("COMMIT")
else:
pass
分組:
vim /etc/salt/master
nodegroups:
group1: 'E@salt-client*'
group2: 'E@salt-pay*'
YAML規則:每個group前邊有2個空格,冒號(:)後邊1個空格
salt模塊,只是瞭解一下,需要找詳細的資料看
文件系統
修改配置文件
創建目錄
寫sls文件
vim /etc/salt/master
file_roots:
base:
- /srv/salt/
# mkdir -p /srv/salt
cd /srv/salt
mkdir /etc
cd /etc/
mkdir script
vi test.sh
#!/bin/bash
while true
do
sleep 1
echo 1 >>/tmp/log
done
salt '*' cmd.script salt://etc/script/test.sh
1種
vim /srv/salt/hosts.sls
/tmp/hosts:
file.managed:
- source: salt://etc/hosts
- user: root
- group: root
- mode: 600
salt '*' state.highstate
2種
vim /srv/salt/top.sls
base:
'*':
- hosts
salt '*' state.sls hosts
3種
cd /srv/salt
mkdir hosts
mv hosts.sls ./hosts/
salt '*' state.sls hosts.hosts
grains
在minion上進行配置grains
vi /etc/salt/minion
grains:
roles:
- webserver
- memcache
deployment: datacenter4
cabinet: 13
cab_u: 14-15
/etc/init.d/salt-minion restart
states
salt狀態系統的核心是sls,或者叫**S**alt State文件。SLS表示
系統將會是什麼樣的一種狀態,而且是以一種很簡單的格式來包含這些數據,
這經常也被叫做配置管理。
SLS文件實際上只是一些:字典dictionaries,列表lists,
字符串,and數字
yaml
縮進:yaml使用一個固定的縮進風格表示數據層結構關係。
salt需要每個縮進級別由兩個空格組成。不要使用tabs
python的字典理所當然是簡單的鍵值對。字典的keys在yaml中的
表現形式是一個以冒號結尾的字符串。values的表現形式冒號下面的每一行,用一個空格隔開
想要表示列表項,使用一個短橫槓加一個空格。多個項使用同樣
的縮進級別作爲同一列表的一部分
http://docs.saltstack.cn/topics/yaml/index.html
http://docs.saltstack.com/en/latest/ref/states/all/index.html
練習
使用sls安裝nginx,並管理nginx的配置文件,
當nginx配置文件被修改時,自動更新配置文件,
並重啓nginx
pkg
vim /srv/salt/nginx/init.sls
nginx:
pkg:
- installed
service:
- running
- enable: True
- reload: True
- watch:
- pkg: nginx
- file: /etc/nginx/nginx.conf
- file: /etc/nginx/conf.d/default.conf
/etc/nginx/nginx.conf:
file.managed:
- source: salt://etc/nginx/nginx.conf
- user: root
- group: root
- mode: 644
/etc/nginx/conf.d/default.conf:
file.managed:
- source: salt://etc/nginx/conf.d/default.conf
- user: root
- group: root
- mode: 644
mkdir /srv/salt/etc/nginx/conf.d -p
cp /etc/nginx/nginx.conf /srv/salt/etc/nginx/
cp /etc/nginx/conf.d/nginx.conf /srv/salt/etc/nginx/conf.d/
salt '*' state.sls nginx
z在minion端
salt-call state.sls nginx
syndic
syndic_master: 更高級別master的ip地址
syndic_log_file: syndic日誌文件的路徑(絕對路徑或相對路徑均可)
order_master: True
yum -y install salt-master
vi /etc/salt/master
syndic_master: 192.168.99.40
/etc/init.d/salt-syndic start
/etc/init.d/salt-master restart