• day57——Saltstack二次开发(一)


    Saltstack简介

      Salt 是 一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行) 一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据 开发其的目的是为远程执行提供最好的解决方案,并使远程执行变得更好,更快,更简单 Saltstack(中国用户组 www.saltstack.cn )基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。

      Saltstack的优势: 有master端和minion端,执行的信息比较稳定,不容易丢失信息,或者出现失联主机的情况 有封装好的http-api,我们可以直接启动salt-api就可以通过http协议进行调用。不需要自己进行第二次的封装

      基于centos6和centos7的差异,在两个不同的操作系统中安装saltstack也是不一样的。 参考网址: https://docs.saltstack.com/en/latest/topics/installation/rhel.html Centos6需要先安装扩展源,然后在进行安装: Master端 yum install –y salt-master Yum install –y salt-api Minion端: Yum install -y salt-minion  源码安装:http://note.youdao.com/noteshare?id=881bbdbb6fd7bca9f74360aa052b79a4&sub=EEDE33154E13432FA9198021015C5C25

    Saltstack的秘钥安装

    Master与Minion认证 minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。 salt-key -L 或者salt-key 显示所有的key salt-key -D :删除所有认证主机id证书 salt-key -d keys_values -y salt-key -A:接收所有id证书请求 salt-key -a id :接受单个id证书请求

    Saltstack远程执行机器

    1.-E, --pcre,通过正则表达式进行匹配: salt -E 'web(9|10)*' test.ping -t 1

    2. -L, --list, 主机id进行过滤: salt -L "*app*" cmd.run "df -h"

    3. -G, --grain, 根据被控主机的grains信息进行过滤 salt -G 'role:nginx' cmd.run "ls /export"

    4. -I, --pillar, 根据被控主机的pillar信息进行过滤 salt -I 'myname:xiang' test.ping -t 5

    5. -S, --ipcidr, 根据minion的ip地址进行匹配 salt -S 192.168.1.1 test.ping salt -S 192.168.1.0/24 test.ping salt -S 192.168.0.0/16 test.ping salt -S 192.0.0.0/8 test.ping

    6.检查客户端是否挂掉: salt-run manage.status |head salt-run manage.down

    Saltstack配置文件详解

    Saltstack占用两个端口4505和4506

    1. 确保master端的4505和4506端口开通

    2. Minion的key确实别master接受

    3. 通过test.ping 模块,双方都可以ping通 配置文件详解: http://note.youdao.com/noteshare?id=ef288d8d0abb8f3e8bf6aa5b87bfabd3&sub=wcp1478526434731795

    Saltstack的几种模块介绍

    1.Runner 模块 在master端执行的 salt-run

    2.Module 模块 通过master同步到minion端, 在minion执行 salt-call saltutil.sync_modules salt-call saltutil.sync_all:包括:beacons: clouds: engines: grains: log_handlers: modules: output: proxymodules: renderers: returners: sdb: states: utils:

    3.Grins 模块 记录minion的属性key:value

    4.Pillar模块 记录所有minion通用的属性,然后同步到minion端 salt-call saltutil.refresh_pillar salt ‘*’ saltutil.refresh_pillar

    5.cmd模块 salt ‘*’ cmd.run “df -h”

    6. ping模块 salt ‘*’ test.ping –t 5

    7. 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

    8. 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 (写全没效果)

    9.dnsutil模块 salt '*' dnsutil.hosts_append /etc/hosts 127.0.0.1 xiang.com salt '*' dnsutil.hosts_remove /etc/hosts xiang.com

    10. 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

    11.network模块:

    salt '*' network.dig www.qq.com

    salt '*' network.ping www.qq.com

    salt '*' network.ip_addrs

    12.pkg包管理模块:

    管理yum, apt-get等

    salt '*' pkg.install php

    salt '*' pkg.remove php

    salt '*' pkg.upgrade (升级所有的软件包)

    13.service模块

    salt '*' service.enable nginx

    salt '*' service.disable nginx

    salt '*' service.restart nginx

    Grains

    自定义grians(在minion上定义的)

    grains是在minion启动时搜集一些信息,如操作系统类型,网卡,内核版本,cpu架构等

    salt "*" grains.ls 列出所有grains项目名字

    salt "*app.*" grains.items 列出所有grains项目以及值

    grains的信息并不是动态的,并不会实时变化,它只是在minion启动时收集到的 我们可以根据grains收集到的一些信息,做一些配置管理工作

    在minion上:vim /etc/salt/grains

    role: nginx

    env: test

    重启service salt-minion restart

    获取grians:

    salt "*" grains.item role env

    或者:

    salt -G "*" role:nginx cmd.run "hostname“

    salt ‘*’grains.items

    Pillar

    pillar(在master上定义)(yaml语法)

    在配置文件中找pillar的文件路劲:

    找到以后,mkdir /export/salt/pillar

    vim top.sls

    base:

    "*":

    - test

    vim test.sls

    conf: xiang

    然后刷新pillar: salt '*' saltutil.refresh_pillar

    验证:salt '*' pillar.items conf

    或者: salt -I 'conf:xiang' test.ping

    Saltstack的api

    Salt-api有两种方式,一种是函数的形式,有人家定义好的函数,我们可以直接调用,直接写python代码调用函数或者类就可以了。

    第二种形式是salt-api有封装好的http协议的,我们需要启动一个服务端。

    安装:

    yum install –y salt-api  

    1.加载master的配置文件

    import salt.config

    master_opts = salt.config.client_config(‘/etc/salt/master’) print(‘master_opts’)

    2. 加载minion的配置文件

    import salt.config

    Minion_opts = salt.config.minion_config(‘/etc/salt/minion’)

    3. 在master上执行各种模块:

    >>> import salt.client

    >>> local = salt.client.LocalClient(‘/etc/salt/minion’)#不加也可以,加上最好

    >>> local.cmd('*', "test.ping") {'192.168.48.129': True}

    >> local.cmd('*', "cmd.run", "w") {'192.168.48.129': ' 12:17:38 up 5:58, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.48.1 11:14 2:50 0.89s 0.89s python'}

    如果一次要执行多个模块 local.cmd('*', ['test.ping', 'cmd.run'], [[], ['whoami']]) {'192.168.48.129': {'test.ping': True, 'cmd.run': 'root'}}

    自定义的模块:

    >>> local.cmd('*', "jd.meminfo", "") {'192.168.48.129': {'meminfo': '0.31'}}

    4. 如果对于执行时间过长,没法直接返回的,我们就可以通过异步执行的形式进行返回 cmd_async和get_cache_returns(jid) 一下代码只能只能在master上执行,而且是只能在master上才可以使用

    __opts__ = salt.config.minion_config('/etc/salt/minion')

    conf_file = __opts__['conf_file']

    client = salt.client.LocalClient(conf_file)

    jid = client.cmd_async(minion, function, params)

    wait_time = 0

    sleep_interval = 1

    while wait_time < timeout:

        print('wait {0} seconds'.format(sleep_interval))

        time.sleep(sleep_interval)

        returns = client.get_cache_returns(jid)

        if returns:

            return returns

        wait_time += sleep_interval

    5. 客户端执行salt命令:

    >>> import salt.config

    >>> import salt.client

    >>> caller = salt.client.Caller(‘/etc/salt/minion’)

    >>> caller.cmd("test.ping")

    True

    类似shell命令的salt-call,可以在minion端执行salt的命令,测试连通性什么的

    6. Master端执行salt-run

    >>> import salt.config

    >>> import salt.runner

    >>> __opts__ = salt.config.client_config('/etc/salt/master')

    >>> runermaster = salt.runner.RunnerClient(__opts__)

    >>> runnerMaster.cmd('jobs.list_jobs', []) 查看所有的

    >>>runnerMaster.cmd('manage.status')

    down:

    up:

        - 192.168.48.129

    {'down': [], 'up': ['192.168.48.129']}

    7. Grains

    >>> import salt.config

    >>> import salt.loader

    >>> __opts__ = salt.config.minion_config("/etc/salt/minion")

    >>> __grains__ = salt.loader.grains(__opts__)

    >>> __grains__['id'] '192.168.48.129‘

    其他的一些变量

    import salt.config

    import salt.loader

    __opts__ = salt.config.minion_config('/etc/salt/minion')

    __grains__ = salt.loader.grains(__opts__)

    __opts__['grains'] = __grains__

    __utils__ = salt.loader.utils(__opts__)

    __salt__ = salt.loader.minion_mods(__opts__, utils=__utils__)

    __salt__['test.ping']()

    8. Salt的内置环境变量:

    在python的交互环境中,这些变量是不生效的,只有在自定义的模块,活着salt执行时才生效

    __opts__   配置文件,类型

    __salt__   执行modules 

                __salt__['cmd.run']('fdisk -l')

                __salt__['network.ip_addrs']()

    __pillar__     pillar

    __grains__   grains

    __context__

    if not 'cp.fileclient' in __context__:

            __context__['cp.fileclient'] = salt.fileclient.get_file_client(__opts__)

     

  • 相关阅读:
    Android属性动画
    android 保存配置文档
    android 不自动弹出虚拟键盘
    android 常用代码
    android imageswitcher gallery 根据数据库内图片名字进行查看/删除
    android 文件内容和 textview 操作
    用 java 语言获取 1N 的不重复随机数
    android 数据库 备份还原
    解决Ubuntu 输入法不显示
    android 添加文本内容到sqlite表中
  • 原文地址:https://www.cnblogs.com/yangjinbiao/p/8391520.html
Copyright © 2020-2023  润新知