day57——Saltstack二次開發(一)

Saltstack簡介php

  Salt 是 一個配置管理系統,可以維護預約義狀態的遠程節點(好比,確保指定的報被安裝,指定的服務在運行) 一個分佈式遠程執行系統,用來在遠程節點(能夠是單個節點,也能夠是任意規則挑選出來的節點)上執行命令和查詢數據 開發其的目的是爲遠程執行提供最好的解決方案,並使遠程執行變得更好,更快,更簡單 Saltstack(中國用戶組 www.saltstack.cn )基於python開發,c/s架構,支持多平臺,比puppet輕量,在遠程執行命令時很是快捷,配置和使用比puppet容易,能實現puppet幾乎全部的功能。html

  Saltstack的優點: 有master端和minion端,執行的信息比較穩定,不容易丟失信息,或者出現失聯主機的狀況 有封裝好的http-api,咱們能夠直接啓動salt-api就能夠經過http協議進行調用。不須要本身進行第二次的封裝python

  基於centos6和centos7的差別,在兩個不一樣的操做系統中安裝saltstack也是不同的。 參考網址: https://docs.saltstack.com/en/latest/topics/installation/rhel.html Centos6須要先安裝擴展源,而後在進行安裝: Master端 yum install –y salt-master Yum install –y salt-api Minion端: Yum install -y salt-minion  源碼安裝:http://note.youdao.com/noteshare?id=881bbdbb6fd7bca9f74360aa052b79a4&sub=EEDE33154E13432FA9198021015C5C25nginx

Saltstack的祕鑰安裝web

Master與Minion認證 minion在第一次啓動時,會在/etc/salt/pki/minion/(該路徑在/etc/salt/minion裏面設置)下自動生成minion.pem(private key)和 minion.pub(public key),而後將 minion.pub發送給master。master在接收到minion的public key後,經過salt-key命令accept minion public key,這樣在master的/etc/salt/pki/master/minions下的將會存放以minion id命名的 public key,而後master就能對minion發送指令了。 salt-key -L 或者salt-key 顯示全部的key salt-key -D :刪除全部認證主機id證書 salt-key -d keys_values -y salt-key -A:接收全部id證書請求 salt-key -a id :接受單個id證書請求正則表達式

Saltstack遠程執行機器shell

1.-E, --pcre,經過正則表達式進行匹配: salt -E 'web(9|10)*' test.ping -t 1vim

2. -L, --list, 主機id進行過濾: salt -L "*app*" cmd.run "df -h"centos

3. -G, --grain, 根據被控主機的grains信息進行過濾 salt -G 'role:nginx' cmd.run "ls /export"api

4. -I, --pillar, 根據被控主機的pillar信息進行過濾 salt -I 'myname:xiang' test.ping -t 5

5. -S, --ipcidr, 根據minion的ip地址進行匹配 salt -S 192.168.1.1 test.ping salt -S 192.168.1.0/24 test.ping salt -S 192.168.0.0/16 test.ping salt -S 192.0.0.0/8 test.ping

6.檢查客戶端是否掛掉: salt-run manage.status |head salt-run manage.down

Saltstack配置文件詳解

Saltstack佔用兩個端口4505和4506

1. 確保master端的4505和4506端口開通

2. Minion的key確實別master接受

3. 經過test.ping 模塊,雙方均可以ping通 配置文件詳解: http://note.youdao.com/noteshare?id=ef288d8d0abb8f3e8bf6aa5b87bfabd3&sub=wcp1478526434731795

Saltstack的幾種模塊介紹

1.Runner 模塊 在master端執行的 salt-run

2.Module 模塊 經過master同步到minion端, 在minion執行 salt-call saltutil.sync_modules salt-call saltutil.sync_all:包括:beacons: clouds: engines: grains: log_handlers: modules: output: proxymodules: renderers: returners: sdb: states: utils:

3.Grins 模塊 記錄minion的屬性key:value

4.Pillar模塊 記錄全部minion通用的屬性,而後同步到minion端 salt-call saltutil.refresh_pillar salt ‘*’ saltutil.refresh_pillar

5.cmd模塊 salt ‘*’ cmd.run 「df -h」

6. ping模塊 salt ‘*’ test.ping –t 5

7. cp 模塊 file_roots: base: - /export/salt/root salt根目錄:在master中file_roots定義的路徑,salt://test.txt至關於/export/salt/root/test.txt salt 'wms5test1.app.172.17.23.176' cp.get_file salt://nscd.conf /tmp/xiang.txt

8. cron模塊: salt '*' cron.raw_cron root (查看定時任務) salt '*' cron.set_job root '*' '*' '*' '*' 1 /export/scripts/rm_log.sh salt '*' cron.rm_job root /export/scripts/rm_log.sh (寫全沒效果)

9.dnsutil模塊 salt '*' dnsutil.hosts_append /etc/hosts 127.0.0.1 xiang.com salt '*' dnsutil.hosts_remove /etc/hosts xiang.com

10. file模塊:

salt '*' file.chown /etc/passwd root root

salt '*' file.copy /path/to/src /path/to/dst

salt '*' file.file_exists /etc/hosts

salt '*' file.directory_exists /etc/

salt '*' file.get_mod /etc/passwd

salt '*' file.set_mod /etc/passwd 0644

salt '*' file.mkdir /tmp/test

salt '*' file.sed /export/servers/nginx/conf/nginx.conf 'debug' 'warn'

salt '*' file.append /tmp/test.txt "welcome xiang"

salt '*' file.remove /tmp/1.txt

11.network模塊:

salt '*' network.dig www.qq.com

salt '*' network.ping www.qq.com

salt '*' network.ip_addrs

12.pkg包管理模塊:

管理yum, apt-get等

salt '*' pkg.install php

salt '*' pkg.remove php

salt '*' pkg.upgrade (升級全部的軟件包)

13.service模塊

salt '*' service.enable nginx

salt '*' service.disable nginx

salt '*' service.restart nginx

Grains

自定義grians(在minion上定義的)

grains是在minion啓動時蒐集一些信息,如操做系統類型,網卡,內核版本,cpu架構等

salt "*" grains.ls 列出全部grains項目名字

salt "*app.*" grains.items 列出全部grains項目以及值

grains的信息並非動態的,並不會實時變化,它只是在minion啓動時收集到的 咱們能夠根據grains收集到的一些信息,作一些配置管理工做

在minion上:vim /etc/salt/grains

role: nginx

env: test

重啓service salt-minion restart

獲取grians:

salt "*" grains.item role env

或者:

salt -G "*" role:nginx cmd.run "hostname「

salt ‘*’grains.items

Pillar

pillar(在master上定義)(yaml語法)

在配置文件中找pillar的文件路勁:

找到之後,mkdir /export/salt/pillar

vim top.sls

base:

"*":

- test

vim test.sls

conf: xiang

而後刷新pillar: salt '*' saltutil.refresh_pillar

驗證:salt '*' pillar.items conf

或者: salt -I 'conf:xiang' test.ping

Saltstack的api

Salt-api有兩種方式,一種是函數的形式,有人家定義好的函數,咱們能夠直接調用,直接寫python代碼調用函數或者類就能夠了。

第二種形式是salt-api有封裝好的http協議的,咱們須要啓動一個服務端。

安裝:

yum install –y salt-api  

1.加載master的配置文件

import salt.config

master_opts = salt.config.client_config(‘/etc/salt/master’) print(‘master_opts’)

2. 加載minion的配置文件

import salt.config

Minion_opts = salt.config.minion_config(‘/etc/salt/minion’)

3. 在master上執行各類模塊:

>>> import salt.client

>>> local = salt.client.LocalClient(‘/etc/salt/minion’)#不加也能夠,加上最好

>>> local.cmd('*', "test.ping") {'192.168.48.129': True}

>> local.cmd('*', "cmd.run", "w") {'192.168.48.129': ' 12:17:38 up 5:58, 1 user, load average: 0.00, 0.01, 0.05\nUSER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT\nroot pts/0 192.168.48.1 11:14 2:50 0.89s 0.89s python'}

若是一次要執行多個模塊 local.cmd('*', ['test.ping', 'cmd.run'], [[], ['whoami']]) {'192.168.48.129': {'test.ping': True, 'cmd.run': 'root'}}

自定義的模塊:

>>> local.cmd('*', "jd.meminfo", "") {'192.168.48.129': {'meminfo': '0.31'}}

4. 若是對於執行時間過長,無法直接返回的,咱們就能夠經過異步執行的形式進行返回 cmd_async和get_cache_returns(jid) 一下代碼只能只能在master上執行,並且是隻能在master上纔可使用

__opts__ = salt.config.minion_config('/etc/salt/minion')

conf_file = __opts__['conf_file']

client = salt.client.LocalClient(conf_file)

jid = client.cmd_async(minion, function, params)

wait_time = 0

sleep_interval = 1

while wait_time < timeout:

    print('wait {0} seconds'.format(sleep_interval))

    time.sleep(sleep_interval)

    returns = client.get_cache_returns(jid)

    if returns:

        return returns

    wait_time += sleep_interval

5. 客戶端執行salt命令:

>>> import salt.config

>>> import salt.client

>>> caller = salt.client.Caller(‘/etc/salt/minion’)

>>> caller.cmd("test.ping")

True

相似shell命令的salt-call,能夠在minion端執行salt的命令,測試連通性什麼的

6. Master端執行salt-run

>>> import salt.config

>>> import salt.runner

>>> __opts__ = salt.config.client_config('/etc/salt/master')

>>> runermaster = salt.runner.RunnerClient(__opts__)

>>> runnerMaster.cmd('jobs.list_jobs', []) 查看全部的

>>>runnerMaster.cmd('manage.status')

down:

up:

    - 192.168.48.129

{'down': [], 'up': ['192.168.48.129']}

7. Grains

>>> import salt.config

>>> import salt.loader

>>> __opts__ = salt.config.minion_config("/etc/salt/minion")

>>> __grains__ = salt.loader.grains(__opts__)

>>> __grains__['id'] '192.168.48.129‘

其餘的一些變量

import salt.config

import salt.loader

__opts__ = salt.config.minion_config('/etc/salt/minion')

__grains__ = salt.loader.grains(__opts__)

__opts__['grains'] = __grains__

__utils__ = salt.loader.utils(__opts__)

__salt__ = salt.loader.minion_mods(__opts__, utils=__utils__)

__salt__['test.ping']()

8. Salt的內置環境變量:

在python的交互環境中,這些變量是不生效的,只有在自定義的模塊,活着salt執行時才生效

__opts__   配置文件,類型

__salt__   執行modules 

            __salt__['cmd.run']('fdisk -l')

            __salt__['network.ip_addrs']()

__pillar__     pillar

__grains__   grains

__context__

if not 'cp.fileclient' in __context__:

        __context__['cp.fileclient'] = salt.fileclient.get_file_client(__opts__)

相關文章
相關標籤/搜索