2018年7月3日筆記
阿新 • • 發佈:2018-07-05
ken print app util highstate unless 存在 names ast
- state
1)state介紹
state是saltstack最核心的功能,通過預先指定好的sls文件對minion進行狀態管理,支持pkg, file, network, service, user等。
2)配置管理 nginx
vim /etc/salt/master 找到:file_roots: 在file_roots目錄下,vim top.sls base: ‘*‘: - nginx vim nginx.sls nginx-service: pkg: - installed service: - running - require: - pkg: nginx - enable: True nginx-service:是id名字,自定義。pkg: 函數 installed:代表沒有安裝的通過yum或者apt-get安裝,running:啟動,enable:開機啟動:require:確保只有在安裝成功後才會啟動。 執行state: salt ‘*‘ state.highstate 3)配置管理文件 file_test: file.managed: - name: /tmp/aminglinux.com - source: salt://test/123/1.txt - user: root - group: root - mode: 644 說明:第一行的file_test為自定的名字,表示該配置段的名字,可以在別的配置段中引用它,source指定文件從哪裏拷貝,這裏的test相當於是/srv/salt/test 4)配置管理目錄 file_dir: file.recurse: - name: /tmp/testdir - source: salt://test/123 - user: root - file_mode: 644 - dir_mode: 755 - mkdir: True - clean: True //加上它之後,源刪除文件或目錄,目標也會跟著刪除,否則不會刪除 5)配置管理遠程命令 cmd_test: cmd.run: - onlyif: test -f /tmp/111.txt - names: - touch /tmp/111.txt - mkdir /tmp/1233 - user: root 還可以加unless,和onlyif正好相反 6)配置管理遠程腳本 shell_test: cmd.script: - source: salt://test/1.sh - user: root cat /srv/salt/test/1.sh #!/bin/bash touch /tmp/111.txt if [ -d /tmp/1233 ] then rm -rf /tmp/1233 fi 7)配置管理計劃任務 cron_test: cron.present: - name: /bin/touch /tmp/111.txt - user: root - minute: ‘*‘ - hour: 20 - daymonth: ‘*‘ - month: ‘*‘ - dayweek: ‘*‘ 註意,*需要用單引號引起來。當然我們還可以使用file.managed模塊來管理cron,因為系統的cron都是以配置文件的形式存在的。想要刪除該cron,需要增加: cron.absent: - name: /bin/touch /tmp/111.txt 兩者不能共存,要想刪除一個cron,那之前的present就得去掉。- saltstack常用模塊和API調用
1)API:(Application Programming Interface,應用程序編程接口)是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。
api的使用原理是通過調用master client模塊,實例化一個LocalClient對象,在調用cmd()方法來實現。 以下是API實現test.ping的示例: yum install -y salt-api service salt-api restart import salt.client client = salt.client.LocalClient() ret = client.cmd(‘*‘, ‘test.ping‘) print ret 返回形式是一個字典的形式返回 2)cmd模塊 salt ‘*‘ cmd.run "free -m" API:client.cmd(‘wms5test1.app.*‘, ‘cmd.run‘, [‘free -m‘]) 3)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 salt ‘*‘ cp.get_dir salt://test /tmp/ (目錄) API:client.cmd(‘*‘, ‘cp.get_file‘, [‘salt://test.txt‘, ‘/tmp/1.txt‘]) 4)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 (寫全沒效果) API:client.cmd(‘*‘, ‘cron.set_job‘, [‘root‘, ‘*‘, ‘*‘, ‘*‘, ‘*‘, 1 /export/scripts/rm_log.sh])
5)dnsutil模塊
salt ‘*‘ dnsutil.hosts_append /etc/hosts 127.0.0.1 xiang.com salt ‘*‘ dnsutil.hosts_remove /etc/hosts xiang.com API:client.cmd(‘*‘, ‘dnsutil.hosts_append‘, [‘/etc/hosts‘, ‘127.0.0.1‘, ‘xiang.com‘]) 6)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 API:client.cmd(‘*‘, ‘file.remove‘, [‘/tmp/1.txt‘]) 7)network模塊 salt ‘*‘ network.dig www.qq.com salt ‘*‘ network.ping www.qq.com salt ‘*‘ network.ip_addrs API:client.cmd(‘*‘, ‘network.ip_addrs‘) 8)pkg包管理模塊 管理yum, apt-get等 salt ‘*‘ pkg.install php salt ‘*‘ pkg.remove php salt ‘*‘ pkg.upgrade (升級所有的軟件包) API:client.cmd(‘*‘, ‘pkg.remove, [‘php‘]‘) 9)service模塊 salt ‘*‘ service.enable nginx salt ‘*‘ service.disable nginx salt ‘*‘ service.restart nginx API:client.cmd(‘*‘, ‘service.stop‘, [‘nginx‘])- 練習
1)installApp.py
1 def nginx(): 2 resultBean = dict() 3 __salt__[‘cp.get_file‘]("salt:_shell/app/nginx.sh /usr/local/src/installnginx.sh") 4 jid = __salt__[‘cmd.async‘] 5 cmd = "sh /usr/local/src/installnginx.sh" 6 status, output = commands.getstatusoutput(cmd) 7 if status == 0: 8 resultBean[‘code‘] = 0 9 resultBean[‘message‘] = ‘success‘ 10 resultBean[‘data‘] = output 11 else: 12 resultBean[‘code‘] = -1 13 resultBean[‘message‘] = ‘install nginx error‘ 14 resultBean[‘data‘] = output 15 return resultBean 16 17 def tomcat(): 18 pass 19 20 def keepalived(): 21 pass 22 23 def lvs(): 24 pass 25 26 def jdk(): 27 pass 28 29 def mysql(): 30 pass 31 32 def zookeeper(): 33 pass 34 35 def redis(): 36 pass
2)saltapi.py
1 import json 2 import requests 3 4 5 class SaltServer(object): 6 def __init__(self): 7 self.session = requests.session() 8 self.token = self.getToken() 9 10 11 def getToken(self): 12 url = "http://192.168.48.135:8000/login" 13 headers = {"Accept": "application/json"} 14 data = { 15 "username": "saltapi", 16 "password": "saltapi", 17 "eauth": "pam" 18 } 19 res = self.session.post(url=url, headers=headers, data=data) 20 text = res.text 21 result = json.loads(text) 22 token = result.get("return")[0].get("token") 23 return token 24 25 def runModules(self, minionid, fun, arg=None): 26 url = "http://192.168.48.135:8000" 27 data = { 28 "client": "local", 29 "tgt": minionid, 30 "fun": fun, 31 "arg": arg 32 } 33 resultBean = dict() 34 try: 35 res = self.session.post(url=url, data=data) 36 text = res.text 37 data = json.loads(text).get("return") 38 resultBean[‘code‘] = 0 39 resultBean[‘message‘] = "success" 40 resultBean[‘data‘] = data 41 except Exception as e: 42 resultBean[‘code‘] = 0 43 resultBean[‘message‘] = "success" 44 resultBean[‘data‘] = e 45 finally: 46 return resultBean 47 48 49 def runRunner(self, fun, arg=None): 50 url = "http://192.168.48.135:8000" 51 data = { 52 "client": "runner", 53 "fun": fun, 54 "arg": arg 55 } 56 resultBean = dict() 57 try: 58 res = self.session.post(url=url, data=data) 59 text = res.text 60 data = json.loads(text).get("return") 61 resultBean[‘code‘] = 0 62 resultBean[‘message‘] = "success" 63 resultBean[‘data‘] = data 64 except Exception as e: 65 resultBean[‘code‘] = 0 66 resultBean[‘message‘] = "success" 67 resultBean[‘data‘] = e 68 finally: 69 return resultBean
3)test.py
1 from lesson31.util.saltapi import SaltServer 2 3 saltServer = SaltServer() 4 5 result1 = saltServer.runModules(‘192.168.48.129‘, ‘cp.get_file‘, [‘salt://_shell/app/nginx.sh‘, ‘/usr/local/src/installnginx.sh‘]) 6 print(result1) 7 result2 = saltServer.runModules(‘192.168.48.129‘, ‘installApp.nginx‘) 8 print(result2) 9 # result2 = saltServer.runRunner(‘manage.status‘) 10 # print(result2)
2018年7月3日筆記