开发者社区> 技术小胖子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

使用tornado模板引擎配合yaml构建nginx配置接口 [扩展saltstack]

简介:
+关注继续查看

最近同事们在搞一个nginx的配置下发接口,项目用tornado redis yaml来实现,我这里就簡單分享下关于nginx配置api实现。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#coding:utf-8
#xiaorui.cc
import tornado.httpserver
import yaml
import tornado.gredis
import tornado.ioloop
import tornado.web
import redis
import gevent
from gevent.queue import Queue, Empty
from gevent.pool import Group
from gevent import getcurrent
from gevent.coros import BoundedSemaphore
# define one "add" 在模板传递两个数,他会自己做运算,这个和jinja2的filter很像
def add(x, y):
    return (x+y)
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        print self.get_argument('nginxid')
        f=open('%s.yaml'%self.get_argument('nginxid'))
        ldata=yaml.load(f)
        f.close()
        print ldata
        items = ["item1","item2","item3"]
        # 可以直接传递list和字典                                              
        self.render("templates/nginx.upstream", items=items, add=add,ldata=ldata)
application = tornado.web.Application([
    (r"/nginxupstream", MainHandler),
])
if __name__ == "__main__":
     http_server = tornado.httpserver.HTTPServer(application)
     http_server.listen(8889)
     tornado.ioloop.IOLoop.instance().start()


后端的模板程序:

1
2
3
4
5
6
7
8
9
upstream {{ ldata['upstream_name'] }} {                                        
    {{ ldata['upstream_mode'] }};
    {% for in ldata['upstream_rs'] %}
    {% if i['server_info']['kp'] %}keepalive {{ i['server_info']['kp'] }};{% end %}
    {% for in i['server_info']['rs'] %}
    server {{ a['real_server']['ip'] }} {{ a['real_server']['port'] }};
    {% end %}
    {% end %}
}



通过tornado的api 去做get请求,返回的不同主机的 nginx upstream的操作块配置。


wKioL1NGCluzKqofAADTHgA0_OI044.jpg



wKiom1NGCq-Rv1X3AAFY2Phmyug187.jpg


这里是服务器端的日志打印情况。可以看到yaml loads之后,他就是一个很大的json串 。





wKiom1NGCsHjAjlXAAdtnBJuOOY594.jpg


已经把很多服务器nginx的upstream集群池配置导入到了yaml配置里面。python提供了好用的模块,可以舒服的针对yaml增删改查。

wKioL1NGCrKhtMq1AASc4RjEbg8031.jpg


咱们来看看nginx的yaml的格式,配置。 你自己可以做更多的扩展,比如在upstream里面的backup,max_fails,fail_timeout等参数。

wKioL1NGC9uCbWqWAANjBswesOc789.jpg

原文:http://rfyiamcool.blog.51cto.com/1030776/1393371


这样的方式下发配置,还是很靠谱的,最少我已经把lvs、nginx的配置应用进去了。

其他的想法,这个方法可以用在saltstack上面的,看到我写的关于salt lvs的文章,大家会有思路的。不想用yaml的话,可以换成mongodb做。对于平台来说,mongodb更方便的。





 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1393371,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python全栈 Web(基于Flask框架的完整项目、项目搭建)
Flask、Python、Django、框架、服务器、客户端、浏览器、交互、WEB、Python前端、CSS、JAVA、HTML、H5、PHP、JavaScript、JQuery、分布式开发、项目、flask项目、项目实战、flask框架、Python项目、Python的Flask框架、Python...
57508 0
使用Python-Flask框架开发Web网站系列课程(二)注册功能
版权声明:如需转载,请注明转载地址。 https://blog.csdn.net/oJohnny123/article/details/81938381 前言 使用IDE:PyCharm 操作系统: Mac Python版本:3.6 我的邮箱:51263921@qq.com 交流群: 372430835 说明: 本次课程github代码在最下面。
1602 0
Python全栈 Web(Flask框架、变量、模板)
Flask、Python、Django、框架、服务器、客户端、浏览器、交互、WEB、Python前端、CSS、JAVA、HTML、H5、PHP、JavaScript、JQuery、分布式开发
14768 0
Python全栈 Web(Flask框架、安装、应用)
Flask、Python、Django、框架、服务器、客户端、浏览器、交互、WEB、Python前端、CSS、JAVA、HTML、H5、PHP、JavaScript、JQuery、分布式开发
18322 0
【D3.js - v5.x】(4)绘制饼图 | 附完整代码
【D3.js - v5.x】(4)绘制饼图 | 附完整代码
18 0
Python全栈 Web(Flask框架、多表关联)
Flask、Python、Django、框架、服务器、客户端、浏览器、交互、WEB、Python前端、CSS、JAVA、HTML、H5、PHP、JavaScript、JQuery、分布式开发
1482 0
基于Proteus,Arduino,Flask搭建的智能大棚管理系统
基于Proteus,Arduino,Flask搭建的智能大棚管理系统
23 0
21114
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载