加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ansible二次开发(完善版)源码分享

(2018-08-01 18:02:30)

前言:

       为解决ansible的接口灵活性差,密码使用安全问题,进行ansible二次开发。

 

使用技术:

       linuxcentos7.4

       软件:ansible 2.6

       语言:python2.7

       框架:webpycelery

       服务:redisrabbitmq

       数据库:postgresql9.6

 

 

概览:

http://s7/mw690/006IC8q4zy7mux3FVvUe6&690

 

说明:

1、         用户登录

       获取token

        {

            "type": "login",

            "data": {

                "user": "wangml",

                "passwd":"oommg",

                "remote_user":"not_root_user"

            }

        }

 

登录过程分为认证、token获取。

登录信息存储在postgresql数据库中,分别为创建的登录用户,密码(密码通过md5加密);服务器远程登录用户密码通过base64编码格式进行浅加密,登录成功后,返回用户token并将真实服务器remote_user密码存储至session中,供用户接下来的操作使用。最终实现不需要root密码且不暴露远程连接的用户密码。

 

远程登录用户必须设置好sudo,不然权限将限定为普通用户。

 

2ansible操作

 

shell:
{
    "type": "shell",
    "data": {
        "host": "ip1,ip2 || groupname",
        "user": "wangml",
        "sudo": "yes || no",
        "sudo_user": "root",
        "remote_user": "not_root_user ",
        "token": "",
        "values": ["whoami", "uptime"]
    }
}

setup:
{
  "type": "setup",
  "data": {
    "host": "ip1,ip2 || groupname",
    "user": "wangml",
    "sudo": "yes || no",
    "sudo_user": "root",
    "remote_user": "not_root_user ",
    "token": "",
    "values":["ansible_nodename","ansible_mounts"]
    }
}

playbooks:
{
  "type": "playbook",
  "data": {
    "user": "wangml",
    "sudo": "yes || no",
    "sudo_user": "root",
    "remote_user": "not_root_user ",
    " token": "",
    "values":["tt.yml","/etc/ansible/test.yml"]
    }
}

 

二次开发中,分别对shell模块,setup模块,playbook模块进行封装,发送不同json信息,进行不同操作。

 

3producer

采用webpy框架封装ansible-api,提供http/https接口,并且以producer注册至rabbitmq中,将每次用户对ansible进行的操作以任务方式发布至rabbitmq中(请勿在producer中使用.get(timeout=10)获取执行结果,不然就变成同步任务,采用celeryrabbitmq进行解耦的目的就无效了)

 

4consumer

ansible操作记录,以文本方式(根据需要选择存储方式)存储至磁盘,通过celery框架注册至rabbitmq中,来处理producer发布的任务。然后将执行结果存储至redis中(存储是string类型,keycelery-task-meta-加任务id

 

此记录是为了完善跳板机机制。

一般跳板机会记录所有用户的操作,通过此模块,可以将用户通过ansible对各服务器的操作也记录到远程的跳板机服务器中,达到统一管理操作记录目的。

 

如果并不在意用户对服务器做了哪些操作或者就将操作记录写在本地,那么可以不用此模块。也就不需要rabbitmqrediscelery了。

 

 

采用postman模拟使用(redis,数据库,rabbitmq都设置好,启动):

1、         启动consumercelery -A ansible_log worker --loglevel=info(用supervisord后台启动)

2、         启动webpypython AnsibleApi.py 8080

3、         登录:

http://s12/mw690/006IC8q4zy7mux5iVsveb&690

登录获取token

 

4、         shell模块

http://s2/mw690/006IC8q4zy7mux6x3CV31&690

时间请无视,测试环境没做时间同步

 

5、         日志记录:

http://s16/mw690/006IC8q4zy7mux8CF1d9f&690

wangml 用户对172.16.22.232172.16.22.252服务器的操作已经记录到对应文件

 

 

代码:

https://github.com/1182640071/AnsibleEx2.git

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有