1. 程式人生 > >saltstack api部署,使用.

saltstack api部署,使用.

from:  http://jiechao2012.blog.51cto.com/3251753/1594077?utm_source=tuicool&utm_medium=referral

#這幾天一直在研究saltstack api,自己也走了很多坑,把部署,使用的過程記錄下來分享給大家,歡迎大家一起交流,探討。 #系統環境:Centos6.5 X86_64 #python版本:2.6.6 #安裝salt服務和依賴: cat /etc/redhat-release        cd /etc/yum.repos.d/ && wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm yum -y install kernel-firmware kernel-headers perf e2fsprogs rpm -ivh libyaml-0.1.3-1.4.el6.x86_64.rpm  rpm -ivh PyYAML-3.10-3.1.el6.x86_64.rpm  yum -y install salt-master salt-api  #安裝pip: wget https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#md5=01026f87978932060cc86c1dc527903e --no-check-certificate
tar xvfz pip-1.5.6.tar.gz cd pip-1.5.6 python setup.py build && python setup.py install && pip freeze #使用pip安裝cherrypy: pip install cherrypy==3.2.3 #配置openssl證書: cd /etc/pki/tls/certs [[email protected] certs]# make testcert umask 77 ; \ /usr/bin/openssl genrsa -aes128 2048 > /etc/pki/tls/
private/localhost.key Generating RSA private key, 2048 bit long modulus ......................................+++ .....................+++ is 65537 (0x10001) Enter pass phrase: Verifying - Enter pass phrase: umask 77 ; \ /usr/bin/openssl req -utf8 -new -key /etc/pki/tls/private/localhost.key -x509 -days 365 -out /etc/pki/tls/certs/localhost.crt -set_serial 0 Enter pass phrase for /etc/pki/tls/private/localhost.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:beijing Locality Name (eg, city) [Default City]:beijing Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []: Email Address []:[email protected] cd ../private/ [[email protected] private]# openssl rsa -in localhost.key -out localhost_nopass.key Enter pass phrase for localhost.key: writing RSA key [[email protected] private]# useradd -M -s /sbin/nologin jc [[email protected] private]# passwd jc Changing password for user jc. New password:  BAD PASSWORD: it is too simplistic/systematic BAD PASSWORD: is too simple Retype new password:  passwd: all authentication tokens updated successfully. #salt master配置檔案:/etc/salt/master  #取消註釋 default_include: master.d/*.conf mkdir -p /etc/salt/master.d #saltstack服務端配置: [[email protected] ~]# cat /etc/salt/master.d/api.conf  rest_cherrypy: port: 8000 ssl_crt: /etc/pki/tls/certs/localhost.crt ssl_key: /etc/pki/tls/private/localhost_nopass.key [[email protected] ~]# cat /etc/salt/master.d/eauth.conf  external_auth: pam: jc: - .* '@wheel' '@runner' #重啟salt-master和salt-api服務:  [[email protected] ~]# /etc/init.d/salt-master restart Stopping salt-master daemon:                               [FAILED] Starting salt-master daemon:                               [  OK  ] [[email protected] ~]# /etc/init.d/salt-api restart Stopping salt-api daemon:                                  [FAILED] Starting salt-api daemon:                                  [  OK  ] [[email protected] ~]# netstat -lntp|grep 8000 tcp        0      0 0.0.0.0:8000                0.0.0.0:*                   LISTEN      14695/python   #curl使用api: [[email protected] ~]# curl -k https://192.168.1.10:8000/login -H "Accept: application/x-yaml"  -d username='jc' -d password='123456' -d eauth='pam' return: - eauth: pam expire: 1419373087.9501131 perms: - .* '@wheel' '@runner' start: 1419329887.9501131 token: e214657dba43b46c482501349123jkpo user: jc #saltstack安裝客戶端測試: yum -y install salt-minion #更改配置:/etc/salt/minion  master: 192.168.1.10 id: localhost /etc/init.d/salt-minion restart #API測試test.ping: [[email protected] ~]# curl -k https://192.168.1.10:8000/ -H "Accept: application/x-yaml" -H "X-Auth-Token: e214657dba43b46c482501349123jkpo" -d client='local' -d tgt='*' -d fun='test.ping' return: - localhost: true #Api測試檢視系統記憶體: [[email protected] ~]# curl -k https://192.168.1.10:8000/ -H "Accept: application/x-yaml" -H "X-Auth-Token: e214657dba43b46c482501349123jkpo" -d client='local' -d tgt='*' -d fun='cmd.run' -d arg="free -m" return: - localhost: '             total       used       free     shared    buffers     cached Mem:         13830      3375      10523          0        253        467 -/+ buffers/cache:        655      11243 Swap:         9000          0       9000' #指令碼: [[email protected] ~]# cat saltapi.py  #!/usr/bin/env python import urllib2,urllib import time try: import json except ImportError: import simplejson as json class SaltAPI(object): __token_id = '' def __init__(self,url,username,password): self.__url = url.rstrip('/') self.__user = username self.__password = password def token_id(self): ''' user login and get token id ''' params = {'eauth''pam''username': self.__user, 'password': self.__password} encode = urllib.urlencode(params) obj = urllib.unquote(encode) content = self.postRequest(obj,prefix='/login') try: self.__token_id = content['return'][0]['token'] except KeyError: raise KeyError def postRequest(self,obj,prefix='/'): url = self.__url + prefix headers = {'X-Auth-Token'   : self.__token_id} req = urllib2.Request(url, obj, headers) opener = urllib2.urlopen(req) content = json.loads(opener.read()) return content def list_all_key(self): params = {'client''wheel''fun''key.list_all'} obj = urllib.urlencode(params) self.token_id() content = self.postRequest(obj) minions = content['return'][0]['data']['return']['minions'] minions_pre = content['return'][0]['data']['return']['minions_pre'] return minions,minions_pre def delete_key(self,node_name): params = {'client''wheel''fun''key.delete''match': node_name} obj = urllib.urlencode(params) self.token_id() content = self.postRequest(obj) ret = content['return'][0]['data']['success'] return ret def accept_key(self,node_name): params = {'client''wheel''fun''key.accept''match': node_name} obj = urllib.urlencode(params) self.token_id() content = self.postRequest(obj) ret = content['return'][0]['data']['success'] return ret def remote_noarg_execution(self,tgt,fun): ''' Execute commands without parameters ''' params = {'client''local''tgt': tgt, 'fun': fun} obj = urllib.urlencode(params) self.token_id() content = self.postRequest(obj) ret = content['return'][0][tgt] return ret def remote_execution(self,tgt,fun,arg): ''' Command execution with parameters '''         params = {'client''local''tgt': tgt, 'fun': fun, 'arg': arg} obj = urllib.urlencode(params) self.token_id() content = self.postRequest(obj) ret = content['return'][0][tgt] return ret def target_remote_execution(self,tgt,fun,arg): ''' Use targeting for remote execution ''' params = {'client''local''tgt': tgt, 'fun': fun, 'arg': arg, 'expr_form''nodegroup'} obj = urllib.urlencode(params) self.token_id() content = self.postRequest(obj) jid = content['return'][0]['jid'] return jid def deploy(self,tgt,arg): ''' Module deployment ''' params = {'client''local''tgt': tgt, 'fun''state.sls''arg': arg} obj = urllib.urlencode(params) self.token_id() content = self.postRequest(obj) return content def async_deploy(self,tgt,arg): ''' Asynchronously send a command to connected minions ''' params = {'client''local_async''tgt': tgt, 'fun''state.sls''arg': arg} obj = urllib.urlencode(params) self.token_id() content = self.postRequest(obj) jid = content['return'][0]['jid'] return jid def target_deploy(self,tgt,arg): ''' Based on the node group forms deployment ''' params = {'client''local_async''tgt': tgt, 'fun''state.sls''arg': arg, 'expr_form''nodegroup'} obj = urllib.urlencode(params) self.token_id() content = self.postRequest(obj) jid = content['return'][0]['jid'] return jid def main(): sapi = SaltAPI(url='https://192.168.1.10:8000',username='jc',password='123456') print sapi.list_all_key() #    sapi.token_id() #sapi.delete_key('test-01') print sapi.accept_key('localhost') #sapi.deploy('test-01','nginx') #print sapi.remote_noarg_execution('test-01','grains.items') if __name__ == '__main__': main() #執行指令碼: [[email protected] ~]# python saltapi.py  ([u'localhost'], []) True

相關推薦

saltstack api部署使用.

from:  http://jiechao2012.blog.51cto.com/3251753/1594077?utm_source=tuicool&utm_medium=referral #這幾天一直在研究saltstack api,自己也走了很多坑,把部

對文件存儲的輕量封裝屏蔽不同雲環境api差異方便開發和部署時隨意切換存儲環境

clas -c iyu public baseurl config 開發 wpc autoload 文件存儲 安裝 composer require pfinal/storage 本地存儲 Local 阿裏雲 AliOss 請先 composer requir

大資料之hbase(一) --- HBase介紹特性安裝部署shell命令client端與hbase的互動過程程式設計API訪問hbase實現百萬寫入

一、HBase介紹 ---------------------------------------------- 1.基於hadoop的資料庫,具有分散式,可伸縮的大型資料儲存 2.用於對資料的隨機訪問,實時讀寫 3.巨大的表,十億行*百萬列

基於win10GPU的Tensorflow Object Detection API部署及USB攝像頭目標檢測

1.TensorFlow安裝 安裝教程在CSDN上有很多文章,但最好依據官方教程,因為TensorFlow不斷更新,需要的CUDA、cudnn等版本也在變化。官方地址在GITHUB裡TensorFlow專案下可以找到安裝指南,https://www.

zookeeper開始三步驟:部署擴充套件c的API生成

zookeeper部署,擴充套件,c的API生成 201,229 1. 依賴:安裝JDK1.6或者以上版本並設定環境變數。 2. 安裝:解壓到指定目錄,即安裝完成:tar -xvf zookeeper-3.3.6.tar.gz  必須的 配置 3. cp conf/zoo

saltstack api wheel模塊報錯HTTP/1.1 401 Unauthorized

saltstack api saltapi salt-api報錯 當使用saltstack api調用wheel模塊的時候會出現沒有權限的報錯[[email protected]/* */ ~]# curl -k -v https://localhost:8000 -H "Ac

django項目的生產環境部署利用nginx+uwsgi

python linux下 light location 準備 class thunder 連接 thread 1.壞境準備 centos6.5 django項目 python壞境(python3.6,) 所需的各種模塊(django,uwsgi,sqlite3

自動化運維工具SaltStack詳細部署【轉】

lib64 time 兩個 功能 .so odi 組件 部分 srv ==========================================================================================一、基礎介紹======

WebStorm 開發react熱部署文件保存後頁面未更新

com system 熱部署 dev 刷新 使用 修改文件 保存 logs 使用腳手架創建的react項目,理論上使用npm run dev後,如果文件發生變化,網頁會自動發生更新,但在使用WebStorm開發時,發現修改文件後網頁內容為自動刷新,按如下方式修改即可。 F

HBase的完全分布式的搭建與部署以及多master

servers image ast 每一個 設置 url 觀察 pos www. HBase的完全分布式的搭建與部署,以及多master 一:前提準備 1.設置時間同步    2.清空logs,datas    3.格式化集群   bin/hdfs namenode

saltstack安裝部署與入門使用

部署 centos6x saltstack 一、saltstack簡介 SaltStack 一種基於 C/S 架構的服務器基礎架構集中化管理平臺,管理端稱為 Master,客戶端稱為 Minion。SaltStack 具備配置管理、遠程執行、監控等功能,一般可以理解為是簡化版的 Puppe

Saltstack批量部署tomcat(多實例)

自動化運維 saltstack 批量安裝部署 上一篇講解了如何批量部署nginx,這篇說一說如何批量部署tomcat,其實方式上都差不多,tomcat多了個java必須配置,以及需要多個實例一起部署。方式方法上可能不是最優方案,功能上是都可以實現基本需求的。環境介紹:Centos 6.5t

SpringBoot多環境部署在啟動時動態設置相應的配置文件

img nbsp rod boot 技術分享 ava 運行 不同的 span 項目中,往往在測試環境和正式環境擁有不同的配置,例如數據庫連接,第三方庫的appkey等。這時候,我們就要在不同的環境啟用不同的配置 下面新建三個文件,分別表示開發環境,生產環境和測試環境的配置文

Gradle Maven部署轉化

修改 gradle posit art doc cred del schema nap 參考:(易百教程)http://www.yiibai.com/gradle/gradle_deployment.html 目錄: Gradle部署 Maven轉化為Gradle Gr

Centos 7 Saltstack自動化部署Haproxy+Keepalived

centos 7 saltstack haproxy keepalivedmaster node 10.10.10.1 minion node 10.10.10.2# cat /etc/salt/master |grep -v "#" |grep -v "^ *$"interface:

Centos 7 Saltstack自動化部署weblogic 12c

centos7 saltstack weblogic12c 自動化部署域 集群 受管。 # pwd/etc/salt/base# tree cluster/cluster/├── files│ ├── creat.rsp -------------1│ ├──

saltstack API(一)

pass strong master yam accept size style urn 測試 一)、安裝配置api [root@k8s_master ~]# pip install pyopenssl      #安裝依賴包 [root@k8s_master

Redis Sentinel安裝與部署實現redis的高可用

config pom else turn int 修改 align 表示 boot.s 前言   對於生產環境,高可用是避免不了要面對的問題,無論什麽環境、服務,只要用於生產,就需要滿足高可用;此文針對的是redis的高可用。   接下來會有系列文章,該系列是對spring

Https系列之二:https的SSL證書在服務器端的部署基於tomcat,spring boot

onf 基於 分享 height 轉化 自簽名 size class ont 一:本文的主要內容介紹 CA證書的下載及相應文件的介紹 CA證書在tomcat的部署 CA證書在spring boot的部署 自簽名證書的部署 二:一些內容的回顧 在Https系列之一中已介

緬甸老百勝開戶咨詢13208831115無知還是帶節奏?蘇57領先殲20進行實戰部署中國應買蘇57

武器裝備緬甸老百勝開戶咨詢13208831115網址www.lbs818.com前不久俄空軍已經前後派遣了2批4架家蘇-57戰鬥機趕赴敘利亞應對未來的局勢沖突升級,值得我們註意的是俄軍的蘇-57戰機還是一款未成熟的戰鬥機,然而卻被派遣上了戰場參加實戰訓練。消息一出就讓很多人不顧實際情況而盲目的大加贊賞,甚至有