saltstack隨筆

記得很亂,需再整理


在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類型,其中包含關鍵事件的信息。


  1. 安裝mysql

  2. 創建數據庫,授權

  3. 修改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模塊,只是瞭解一下,需要找詳細的資料看


文件系統

  1. 修改配置文件

  2. 創建目錄

  3. 寫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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章