zoukankan      html  css  js  c++  java
  • saltstack 动态pillar实现

    简介

      pillar支持的数据存储方式有很多,mysql, mogo,json等。本篇介绍关于http存储方式。

      首先简要说明整个流程:salt-master会去一个指定http发送get请求获取一个json串,然后将json存储为pillar。获取json时是根据salt-minon的minion_id 去获取,也就说每个minion_id获取到的json是不同的,这样http页面就应该是一个动态页面。例如http:/test.com/pillar/minion_id;不同的minion_id获取不同的json串。

    实现过程

    (1)HTTP

      首先要建立HTTP服务,方法很多,这里的关键是提供一个动态url,salt通过不同的minion_id获取对应要存储的pillar值。

    # 动态url获取内容,需要达到下面的效果, node1和node2是不同的minion_id
    访问 http://192.168.1.12:8088/pillar/node1
    获取: ' {"serverid":"1001","mysql_port":"3306"}'
    访问 http://192.168.1.12:8088/pillar/node2
    获取: ' {"serverid":"1002","mysql_port":"3306"}'

    (2)salt 源码修改

      写了个高大上的名字,其实就是添加一个Python脚本。。。脚本目录是在salt安装在python的site-packages目录里。找不到就find / -name salt ;

    # cd /usr/local/lib/python3.6/site-packages/salt/pillar/  # 这个目录下是pillar的各种ext_pillar方法
    # vim ops.py      # 创建一个python脚本,名字随意取,但一定要唯一,名字之后会用到
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # author : wangyongcun
    
    import logging
    import requests
    import json
    
    log = logging.getLogger(__name__)
    
    def ext_pillar(minion_id, pillar, api):
        pillar_url = api + "/" + minion_id   # 不同minion将访问不同的url
        log.warning("Querying SOPS system Pillar of %s" % (minion_id, ))  # 自己加的一条日志,可忽略
        try:
            ret = requests.get(url=pillar_url)  # 向url发送get请求,这个方法需要requests模块,若没有需要安装,在master安装就可以
            r = ret.text   # get获取到的结果
            if r:
                result = json.loads(r)  # 将获取的json字符串转化为字典类型
            else:  # 如果获取的json为空
                result = {}  
        except Exception as e:  # 这个异常处理,一般情况都是无法连接url获取到内容,记录个日志
            log.exception(
                "Query SOPS system failed! Error: [%s] :%s" % (minion_id,e, )
            )
            return {}
        return result # 返回字典格式的数据

    (3)修改salt-master 配置文件

    # vim /etc/salt/master    
    # 注意格式空格
    ext_pillar:
      - sops:  # 这个是上面添加的py文件名称
          api: http://192.168.1.12:8088/pillar/

    (4)重启master

    # 重启
    systemctl stop salt-master
    systemctl start salt-master
    # 刷新pillar
    salt '*' saltutil.refresh_pillar
    # 查看一下
    [root@aliyuntest ~]# salt '*' pillar.items
    node1:
        ----------
        mysql_port:
            3306
        serverid:
            1001
    node2:
        ----------
        mysql_port:
            3306
        serverid:
            1002
  • 相关阅读:
    华为预测服务新版本上线!自定义预测轻松满足您的个性化需求
    HMS Core华为分析丨受众细分,多场景促进精益运营
    关注推送数据报告、消息回执功能,提高推送效率
    快应用tabs和video组件滑动事件优先级问题
    视频播放如何更安全流畅?看南非影音娱乐DStv Now App集成系统完整性检测&应用安全检测功能!
    华为联运游戏或应用审核驳回:HMS Core升级提示语言类型错误
    路径偏移定位不准确?华为定位SuperGNSS技术帮您解决这一难题!
    如何在Flutter中集成华为认证服务
    Oracle定时存储过程
    国家气象局提供的天气预报接口
  • 原文地址:https://www.cnblogs.com/wang-yc/p/8436630.html
Copyright © 2011-2022 走看看