1. 程式人生 > >2018年7月3日筆記

2018年7月3日筆記

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日筆記