zoukankan      html  css  js  c++  java
  • 2018年7月3日笔记

    • 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)
     
  • 相关阅读:
    关于在Websphere下程序找不到jar包内.properties文件的问题
    MysqL的root用户不允许远程连接
    ajax提交表单数据到controller
    js表单验证
    jq删除标签中的元素
    点击超链接触发js事件
    spring的特点
    mysql每个jar包的作用
    抽象工厂举例
    简单的省市联动
  • 原文地址:https://www.cnblogs.com/karl-python/p/9265915.html
Copyright © 2011-2022 走看看