saltstack 自動化運維

salt介紹
saltstack是由thomas Hatch於2011年建立的一個開源項目,設計初衷是爲了實現一個快速的遠程執行系統。
salt強大嗎
系統管理員平常會進行大量的重複性操做,例如安裝軟件,修改配置文件,建立用戶,批量執行命令等等。若是主機數量龐大,單靠人工維護實在讓人難以忍受。
  早期運維人員會根據本身的生產環境來寫特定腳本完成大量重複性工做,這些腳本複雜且難以維護。系統管理員面臨的問題主要是一、系統配置管理,二、遠程執行命令,所以誕生了不少開源軟件,系統維護方面有fabric、puppet、chef、ansible、saltstack等,這些軟件擅長維護系統狀態或方便的對大量主機進行批量的命令執行。
  salt靈活性強大,能夠進行大規模部署,也能進行小規模的系統部署。salt的設計架構適用於任意數量的服務器,從少許本地網絡系統到跨越數個數據中心,拓撲架構都是c/s模型,配置簡單。
  不論是幾臺、幾百臺、幾千臺服務器,均可以使用salt在一箇中心節點上進行管控,靈活定位任意服務器子集來運行命令。 
  Salt是python編寫的,支持用戶經過python自定義功能模塊,也提供了大量的python API接口,用戶能夠根據須要進行簡單快速的擴展。
saltstack的運行方式
Local 本地運行,交付管理
Master/Minion <<< 經常使用方式
Salt SSH 不須要客戶端
salt部署基本架構
在安裝salt以前,先理解salt架構中各個角色,主要區分是salt-master和salt-minion,顧名思義master是中心控制系統,minion是被管理的客戶端。
salt架構中的一種就是master > minion。node

在遠程執行系統中,salt用python經過函數調用完成任務。
運行salt依賴包python

python
zeromq
pyzmp
pycrypto
msgpack-python
yaml
jinja2linux

解決依賴包最簡單的辦法就是用安裝包管理器,yum工具
服務器環境準備
服務器環境
centos7(master)
centos7(master)
ip地址
10.0.0.5
10.0.0.6
身份
master
slave
軟件包
salt-master
salt-minion
修改虛擬機ip地址爲靜態地址,而且確保可上網
1.確保機器通訊
2.修改兩臺機器的/etc/hosts強制解析(公司會搭建一個私有dns服務器)
3.關閉兩臺機器的防火牆策略
master網卡配置
slave網卡配置
dns配置文件
/etc/hosts
關閉服務器安全策略ios

關閉firewalld

systemctl disable firewalld
systemctl stop firewalldnginx

關閉iptables

iptables -F正則表達式

關閉selinux

setenforce 0shell

安裝saltstack
salt軟件包須要epel源的支持,那麼下載
EPEL的全稱叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社區打造,爲 RHEL 及衍生髮行版如 CentOS、Scientific Linux 等提供高質量軟件包的項目。裝上了 EPEL以後,就至關於添加了一個第三方源。
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all # 清空緩存
yum makecache # 生成yum緩存
安裝好epel源就能夠開始安裝salt了
查看salt包
yum list salt數據庫

安裝salt-master
yum install salt-master -y
安裝salt-minion
yum install salt-minion -y
salt端口
安裝好salt以後開始配置,salt-master默認監聽兩個端口:
4505 publish_port 提供遠程命令發送功能
4506 ret_port 提供認證,文件服務,結果收集等功能
確保客戶端能夠通訊服務器的此2個端口,保證防火牆容許端口經過。所以在測試環境直接關閉防火牆。
配置文件
準備master和minion的配置文件
salt-master的配置文件是/etc/salt/master
salt-minion的配置文件是/etc/salt/minion
配置文件中包含了大量可調整的參數,這些參數控制master和minion各個方面
配置salt-master
經常使用配置解析
salt-master文件json

[root@master ~]# grep -v ^# /etc/salt/master|grep -v ^$
interface: 0.0.0.0 #綁定到本地的0.0.0.0地址
publish_port: 4505  #管理端口,命令發送
user: root      #運行salt進程的用戶
worker_threads: 5  #salt運行線程數,線程越多處理速度越快,不要超過cpu個數
ret_port: 4506  #執行結果返回端口
pidfile: /var/run/salt-master.pid #pid文件位置
log_file: /var/log/salt/master  #日誌文件地址vim

自動接收minion的key

auto_accept: False

salt-master簡潔配置
salt-minion經常使用配置
satl-minion文件

[root@slave ~]# grep -v ^# /etc/salt/minion|grep -v ^$
master: master
master_port: 4506
user: root
id: slave # id能夠自定義
acceptance_wait_time: 10
log_file: /var/log/salt/minion

啓動salt-master和salt-minion

systemctl start salt-minion
systemctl start salt-master

檢查salt狀態

systemctl status salt-minion
systemctl status salt-master

在master上接收minion祕鑰
在minion啓動後鏈接master會請求master爲其簽發證書,等待證書籤發完成後,master能夠信任minion,而且minion和master之間的通訊是加密的。
在salt-master執行
salt-key命令用於管理mionion祕鑰

[root@master ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
slave    # 此時已經出現slave
Rejected Keys:

此時slave已經出如今unaccepted keys中,說明minion已經和master聯繫,而且master已經獲取了minion的公鑰,等待下一步指令。
檢查master和minion的祕鑰匹配
在master上執行
[root@master ~]# salt-key -f slave
Unaccepted Keys:
slave: 0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea
而後能夠在minion上獲取minion的祕鑰
[root@slave ~]# salt-call --local key.finger
local:
0a:b9:97:b5:9a:65:b8:49:a1:50:a5:6a:66:ce:33:ea
所以可確認祕鑰匹配,在master上接收祕鑰

[root@master ~]# salt-key -a slave
The following keys are going to be accepted:
Unaccepted Keys:
slave
Proceed? [n/Y] y
Key for minion slave accepted.

確認接收祕鑰後,檢驗minion祕鑰是否被接收

[root@master ~]# salt-key -L
Accepted Keys:
slave
Denied Keys:
Unaccepted Keys:
Rejected Keys:

祕鑰接收完成後,就能夠執行第一條salt啦
salt-key
只有Master接受了Minion Key後,才能進行管理。具體的認證命令爲salt-key經常使用的有以下命令。

[root@linux-node1 ~]# salt-key -L
Accepted Keys: #已經接受的key
Denied Keys: #拒絕的key
Unaccepted Keys:#未加入的key
Rejected Keys:#吊銷的key

經常使用參數

-L #查看KEY狀態
-A #容許全部key
-D #刪除全部key
-a #認證指定的key
-d #刪除指定的key
-r #註銷掉指定key(該狀態爲未被認證)

在master端/etc/salt/master配置

auto_accept: True #若是對Minion信任,能夠配置master自動接受請求

salt-key的使用

列出當前全部的key

[root@salt0-master ~]# salt-key
Accepted Keys:
salt1-minion.example.com
salt2-minion.example.com
salt3-minion.example.com
salt4-minion.example.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:

添加指定minion的key

[root@salt0-master ~]# salt-key -a salt1-minion.example.com -y

添加全部minion的key

[root@salt0-master ~]# salt-key -A -y

刪除指定的key

[root@salt0-master ~]# salt-key -d salt1-minion.example.com -y

刪除全部的key

[root@salt0-master ~]# salt-key -D -y

平常命令參數
首先知道master和minion都安裝了什麼文件,而後才知道怎麼操做
master端
rpm -ql salt-master

/etc/salt/master # salt master主配置文件
/usr/bin/salt #salt master 核心操做命令
/usr/bin/salt-cp #salt 文件傳輸命令
/usr/bin/salt-key #salt證書管理
/usr/bin/salt-master #salt master 服務命令
/usr/bin/salt-run #salt master runner命令

slave端
rpm -ql salt-minion
/etc/salt/minion #minion配置文件
/usr/bin/salt-call #拉取命令
/usr/bin/salt-minion #minion服務命令
/usr/lib/systemd/system/salt-minion.service #minion啓動腳本
第一條salt命令

[root@master ~]#salt '*' test.ping
slave:
True

salt 是一個命令

* 表示目標主機, 在這裏表明全部目標主機

test.ping是salt遠程執行的一個模塊下面的方法。

這是條很簡單的探測minion主機存活命令,也是遠程執行命令,咱們經過master發送消息給""全部的minion,而且告訴他們運行salt內置的命令(也是python模塊中的一個函數),返回true表示slave機器監控存活。
test模塊實際上還有許多其餘的函數
test其餘函數
測試下test.echo
[root@master 10.0.0.5 ~]$salt '
' test.echo '你好~'
slave:
你好~
小結
此前在機器上安裝了salt minion和salt master,進行了最簡單的鏈接,而後master接受了minion的祕鑰,運行了第一條test.ping命令
salt命令組成結構
在命令行輸入的命令都是     執行模塊
等到命令寫入到文件中, 就叫作狀態模塊
salt --help #便可查看salt幫助
[root@master 10.0.0.5 ~]$salt --help
Usage: salt [options] ' ' [arguments]
salt命令 參數 目標 salt模塊的函數 遠程執行的參數
完整的五部分命令

--summary參數顯示salt命令的概要

[root@master 10.0.0.5 ~]$salt --summary '*' cmd.run 'hostname'
slave:
slave


Summary

of Minions Targeted: 1

of Minions Returned: 1

of Minions Did Not Return: 0


列出全部salt的sys模塊

與系統交互的sys模塊

[root@master 10.0.0.5 ~]$salt 'slave' sys.list_modules
遠程執行命令模塊
cmd是超級模塊,全部shell命令都能執行

[root@master 10.0.0.5 ~]$salt 'slave' cmd.run 'ps -ef|grep python'
slave:
root 905 1 0 07:31 ? 00:00:02 /usr/bin/python -Es /usr/sbin/tuned -l -P
root 3843 1 0 11:05 ? 00:00:00 /usr/bin/python /usr/bin/salt-minion
root 3846 3843 0 11:05 ? 00:00:01 /usr/bin/python /usr/bin/salt-minion
root 4031 1 0 11:31 ? 00:00:00 /usr/bin/python /usr/bin/salt-minion
root 4032 4031 0 11:31 ? 00:00:00 /bin/sh -c ps -ef|grep python
root 4034 4032 0 11:31 ? 00:00:00 grep python

遠程安裝nginx

在minion上安裝nginx

[root@master 10.0.0.5 ~]$salt 'slave' pkg.install "nginx"

卸載minion上的nginx

[root@master 10.0.0.5 ~]$salt 'slave' pkg.remove "nginx"

檢查pkg包的版本

[root@master 10.0.0.5 ~]$salt 'slave' pkg.version "nginx"

遠程拷貝文件
遠程發送文件
salt-cp "slave" /etc/yum.repos.d/* /etc/yum.repos.d/
遠程管理服務模塊
管理服務是系統管理員的重要任務,經過salt管理minion服務會很簡單,使用service模塊

[root@master 10.0.0.5 ~]$salt 'slave' service.start "nginx"
slave:
True
[root@master 10.0.0.5 ~]$salt 'slave' service.status "nginx"
slave:
True
[root@master 10.0.0.5 ~]$salt 'slave' service.stop "nginx"
slave:
True

與標準的Linux命令同樣,salt的命令同樣用法
--out控制salt命令結果輸出的格式
JSON

[root@master 10.0.0.5 ~]$salt --out=json '*' cmd.run_all 'hostname'
{
"slave": {
"pid": 2268,
"retcode": 0,
"stderr": "",
"stdout": "slave"
}
}

YAML

[root@master 10.0.0.5 ~]$salt --out=yaml '*' cmd.run_all 'hostname'
slave:
pid: 2289
retcode: 0
stderr: ''
stdout: slave

YAML講解

在學習saltstack過程當中,第一要點就是States編寫技巧,簡稱SLS文件。這個文件遵循YAML語法。初學者看這玩意很容易懵逼,我來帶你學習YAML語法
json xml yaml 數據序列化格式
yaml容易被解析,應用於配置文件

salt的配置文件是yaml配置文件,不能用tab
saltstack,k8s,ansible都用的yaml格式配置文件

語法規則
大小寫敏感
使用縮進表示層級關係
縮進時禁止tab鍵,只能空格
縮進的空格數不重要,相同層級的元素左側對其便可
# 表示註釋行
yaml支持的數據結構
對象: 鍵值對,也稱做映射 mapping 哈希hashes 字典 dict 冒號表示 key: value key冒號後必須有
數組: 一組按次序排列的值,又稱爲序列sequence 列表list 短橫線 - list1
純量: 單個不可再分的值

對象:鍵值對
yaml
first_key:
second_key:second_value

python
{
'first_key':{
'second_key':'second_value',
}
}

YAML是YAML Ain't Markup Language的首字母縮寫,YAML的語法簡單,
結構體經過空格展現
項目使用 '-' 表明
鍵值對經過 ':' 分割
YAML語法遵循固定的縮進風格,表示數據層級結構關係,saltstack須要每一個縮進級別由2個空格組成,禁止用tabs!!!

Python中的字典是簡單的鍵值對,go語言中稱做哈希表map
字典的key經過冒號分割

key在YAML中表現形式是一個冒號結果的字符串
my_key: my_value
轉化到python語法中,上述命令爲
{'my_key':'my_value'}

value還能夠經過縮進和key關聯,四個空格!!
my_key:
my_value
轉化爲python語法一樣的
{'my_key':'my_value'}

YAML語法中字典是能夠嵌套的
one_dict_key:
two_dict_key:value_dict
轉化爲python語法
{
  'one_dict_key':{
    'two_dict_key':'value_dict'
  }
}

短橫槓
YAML語法表示列表,使用一個橫槓加一個空格
多個項使用一樣的縮進級別做爲同一個列表的部分

  • list_value_one
  • list_value_two
  • list_value_three
    列表能夠做爲一個鍵值對的value,例如一次性要安裝多個軟件
    my_dict:
    • l1
    • l2
    • l3
      轉化爲python代碼理解就是
      {
        'my_dict':['l1','l2',;l3]
      }

目標定位字符串
  以前的salt命令咱們都是使用 salt '*'控制全部minion,而且咱們只有一個「slave」,可是生產環境的服務器極可能是成千上百的minion,所以須要靈活地定位所需的服務器而且執行遠程命令。

1.全局匹配
[root@master 10.0.0.5 ~]$salt '*' test.ping
slave:
True

Linux通配符

  • 表明任意字符,或空字符串

? 表明一個字符,不能夠爲空
[a-z] [0-9] 表明任何一個小寫字母

[root@master 10.0.0.5 ~]$salt 'slav?' test.ping
slave:
True

[root@master 10.0.0.5 ~]$salt '[a-z]lave' test.ping
slave:
True
salt海支持python的re正則表達式

state模塊定義主機狀態
以前執行的遠程命令,都是一個過程式的,相似一段shell或者python腳本執行,執行一次觸發一次相同的功能。
那麼大量的minion上運行遠程命令就必須使用salt提供的「狀態管理」了,狀態是對minion的一種描述和定義,運維不須要關心部署是如何完成的,只須要描述minion須要達到什麼狀態。
接下來經過state模塊部署nginx
master端

vim /etc/salt/master

打開註釋,寫入如下,必須嚴格遵循語法,空格

file_roots:
base:
- /srv/salt/base
dev:

  • /srv/salt/dev
    test:
  • /srv/salt/test
    prod:
  • / srv/salt/prod

此步驟在master和minion都須要執行,都須要文件夾,和nginx.sls文件

[root@master ~]$mkdir -p /srv/salt/{base,dev,test,prod}
[root@slave ~]$mkdir -p /srv/salt/{base,dev,test,prod}

這個nginx.sls狀態文件,在master和minion上都得有

[root@master /srv/salt/base]$cat nginx.sls
nginx-install:
pkg.installed:
- name: nginx

nginx-service:
service.running:
- name: nginx
- enable: True

解釋下nginx.sls描述文件
sls配置文件都遵循YAML語言描述
第一條命令使用了pkg.install安裝命令,相對於運行了yum install,而此時state模塊會判斷nginx是否安裝了,若是沒有安裝就進行安裝,安裝了就什麼都不作。
狀態描述都會遵循這個原則,只有檢測到真實狀態和所需狀態不一就會執行此功能,這種性質叫作冪等性。
此時用state模塊部署nginx軟件,經過咱們編寫的nginx.sls描述性配置文件,命令行調用state模塊的sls函數。

啓動命令,此時slave已經安裝且存活了nginx,進行狀態管理

[root@master /srv/salt/base]$salt 'slave' state.sls nginx
能夠去slave測試關閉nginx,刪除nginx,從新執行命令,同樣能夠安裝啓動nginx
經過master檢查slave的nginx狀態

[root@master 10.0.0.5 /srv/salt/base]$salt 'slave' cmd.run 'ps -ef|grep nginx'
slave:
root 8543 1 0 Sep14 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 8544 8543 0 Sep14 ? 00:00:00 nginx: worker process
root 8592 8591 0 00:03 ? 00:00:00 /bin/sh -c ps -ef|grep nginx
root 8594 8592 0 00:03 ? 00:00:00 /bin/sh -c ps -ef|grep nginx

Salt採集靜態信息之Grains
若是你入職了,你的老闆讓你收集公司300臺服務器的相關硬件信息,你是一臺臺登陸呢?仍是選擇用salt收集呢?又或者用python的salt-api寫腳本呢

Grains 是saltstack組件中很是重要之一,在配置部署時候回常用,Grains記錄minion的靜態信息,好比經常使用屬性,CPU、內存、磁盤、網絡信息等。
Minions的Grains信息是Minion啓動時採集彙報給Master的
Grains是以 key value形式存儲的數據庫,能夠看作Host的元數據(metadata)
Grains保存着收集到的客戶端的詳細信息
若是slave機器數據變化,grains就過時了
在生產環境中須要自定義Grains,能夠經過
Minion配置文件
Grains相關模塊定義
Python腳本定義

salt 'slave' sys.doc grains # 查看grains的命令用法

Grains

Grains人爲是描述minion自己固有的靜態屬性數據,列出主機全部Grains數據

[root@master 10.0.0.5 ~]$salt 'slave' grains.items
slave:

SSDs:
biosreleasedate:
05/19/2017
biosversion:
6.00  
信息過長,已經省略
salt 'slave' grains.ls #列出全部grains方法

檢索某些數據

[root@master 10.0.0.5 ~]$salt 'slave' grains.item os id host
slave:
----------
host:
slave
id:
slave
os:
CentOS

利用Grains靜態信息定位主機
公司有100+的redhat操做系統,80+的centos,在不知道salt以前非常懵逼。。
除了系統的不一樣,還有不一樣的系統版本,redhat6.x centos6.x..

兩種寫法:
salt '' grains.item key1 key2 key3
salt '
' -G

定位Cenots的機器

[root@master 10.0.0.5 ~]$salt -G 'os:CentOS' test.ping
slave:
True

定位操做系統系統是7系列的機器

[root@master 10.0.0.5 ~]$salt -G 'osrelease:7*' test.ping
slave:
True

找出ip地址

salt '*' grains.item fqdn_ip4

所以用grains.items列出全部的數據匹配主機,以及根據單一信息定位數據,Grains還能夠自定義來知足不一樣的需求。
自定義設置Grains數據

設置數據

[root@master 10.0.0.5 ~]$salt 'slave' grains.setval cpu_num 8
slave:
----------
cpu_num:
8

查詢數據

[root@master 10.0.0.5 ~]$salt 'slave' grains.item cpu_num
slave:
----------
cpu_num:
8

在master端設置Grains靜態數據,原理會將此數據添加到minion服務器的配置文件的/etc/salt/grains
[root@slave 10.0.0.6 ~]$cat /etc/salt/grains
cpu_num: 8
對於複雜的數據結構,能夠添加靈活的JSON語法

[root@master 10.0.0.5 ~]$salt 'slave' grains.setval cpu_info '["Intel","Xeon","10"]'
slave:
----------
cpu_info:
- Intel
- Xeon
- 10
[root@master 10.0.0.5 ~]$salt 'slave' grains.item cpu_info
slave:
----------
cpu_info:
- Intel
- Xeon
- 10

此時能夠檢查minion服務器上的grains文件

[root@slave 10.0.0.6 ~]$cat /etc/salt/grains
cpu_info:

  • Intel
  • Xeon
  • '10'
    cpu_num: 8

所以Grains數據寫入配置文件後,重啓salt-minion服務,數據也不會丟失
想要刪除能夠經過grains.delval命令刪除,或者去minion的配置文件刪除配置同樣完成操做(或者刪除文件)

1.方法一,清空值
[root@master 10.0.0.5 ~]$salt 'slave' grains.delval cpu_info
slave:
None
[root@master 10.0.0.5 ~]$salt 'slave' grains.delval cpu_num
slave:
None

2.方法二 刪除minion的grains配置文件,重啓服務
[root@slave 10.0.0.6 ~]$rm -rf /etc/salt/grains
[root@slave 10.0.0.6 ~]$!sys
systemctl restart salt-minion
檢查結果刪除成功

數據管理中心之Pillar組件
Pillar也是saltstack組件中很是重要的組件之一,稱做數據管理中心,常常配合states在大規模的配置管理中使用。
Pillar是動態的,存儲在master端,提供和給minion端
Pillar在SaltStack中主要的做用是存儲和定義配置管理中須要的一些數據,好比軟件版本號,用戶帳號密碼等,保證敏感數據不被其餘minion看到
存儲格式與Grains相似,都是YAML格式

在master配置文件中有一段Pillar settings選項專門定義Pillar的參數

cat /etc/salt/master

此配置表明pillar的工做根目錄,在/srv/pillar下,而後能夠新建sls文件

pillar_roots:

base:

- /srv/pillar

默認pillar的工做目錄在/srv/pillar目錄下,執行以下代碼

mkdir -p /srv/pillar

指定環境,標記,引用packages.sls和services.sls

vim /srv/pillar/top.sls
base:
'*':
- packages
- services

vim /srv/pillar/packages.sls
nginx:
packages-name: nginx
version: 1.12.2
port: 80
user: root

檢查咱們設置的pillar值

[root@master 10.0.0.5 /srv/pillar]$salt '*' pillar.item nginx
slave:
----------
nginx:
----------
packages-name:
nginx
port:
80
user:
root
version:
1.12.2

Pillar與Grains對比
pillar與Grains對比

類型 數據採集方式 應用場景 定義位置
Grains 靜態 minion啓動時收集 數據查詢 目標選擇 配置管理 minion
Pillar 動態 master進行自定義 目標選擇 配置管理 敏感數據 master
Python API調用SaltStack
SaltStack自己提供salt(usr/bin/salt)來交互管理,可是去服務器上敲命令確定不是一個長遠之計,這時候python就體現了nb的功能。
Python API就是給Python提供的API使用,須要在SaltStack master上運行
實例代碼

[root@master ~]$python
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

import salt.client
local = salt.client.LocalClient() # <salt.client.LocalClient object at 0x7f886dbdd850>
local.cmd('*','cmd.run',['hostname']) # 向全部minion發送命令
{'slave': 'slave'}

所以python API就是提供了向saltstack發送命令的入口。
經過API獲取saltstack的配置文件
獲取master配置文件

import salt.config #導入salt配置模塊
m_opts=salt.config.client_config('/etc/salt/master') #讀取salt配置文件,獲得一個字典數據
m_opts
獲取minion配置文件
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

import salt.client
salt.config.minion_config('/etc/salt/minion') #讀取minion配置文件,獲得字典數據,經過字典方法能夠查看信息
Python API介紹

/usr/bin/salt默認使用的接口是LocalClient,該接口只能在salt master上使用
[root@master ~]$python
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

import salt.client
local = salt.client.LocalClient() # <salt.client.LocalClient object at 0x7f886dbdd850>
local.cmd('*','cmd.run',['hostname']) # 向全部minion發送命令
{'slave': 'slave'}

逐條返回結果,local.cmd_iter()

ret=local.cmd_iter('*','test.ping')
ret
<generator object cmd_iter at 0x7f886d455c80>

for i in ret:
... print i
...
{'slave': {'retcode': 0, 'ret': True}}

菲波那切數列

local.cmd('*','test.fib',[10])
{'slave': [[0, 1, 1, 2, 3, 5, 8], 2.1457672119140625e-06]}
檢查minion服務器信息

local.cmd('*','cmd.run',['hostname'])
{'slave': 'slave'}

local.cmd('','cmd.run',['ifconfig'])
local.cmd('
','cmd.run',['crontab -l'])
local.cmd('*','cmd.run',['df -h'])
啓停minion的服務,如nginx

local.cmd('*','service.stop',['nginx'])
{'slave': True}

local.cmd('*','service.status',['nginx'])
{'slave': False}

local.cmd('*','service.start',['nginx']) {'slave': True}

相關文章
相關標籤/搜索