博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用tornado模板引擎配合yaml构建nginx配置接口 [扩展saltstack]
阅读量:6859 次
发布时间:2019-06-26

本文共 1949 字,大约阅读时间需要 6 分钟。

最近同事们在搞一个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的操作块配置。


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

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


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

原文:

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

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

 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1393371,如需转载请自行联系原作者
你可能感兴趣的文章
linux的top命令参数详解
查看>>
spring常用注解
查看>>
Material Menu
查看>>
Win8 环境变量位置
查看>>
margin负值的应用总结
查看>>
分页查询
查看>>
iLBC
查看>>
Linux 本地yum源搭建和网络yum源搭建
查看>>
HDU 5781 ATM Mechine
查看>>
使用Nginx搭建Tomcat9集群,Redis实现Session共享
查看>>
Extjs4.1 序列化和反序列化
查看>>
iOS self 和 super 学习
查看>>
js的闭包的一个示例说明
查看>>
bin/sh failed with exit code 1
查看>>
《梦幻西游》打响反盗号战役:为2亿玩家提供360安全武器
查看>>
Silverlight面向客户端,HTML5面向Web
查看>>
微软拟向互联网开发商提供免费IIS 服务器
查看>>
seajs和requirejs对比;node初识
查看>>
Python笔记总结week1
查看>>
c#中使用NetCDF存储二维数据的读写操作简单应用
查看>>