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

本文介绍了一个使用Tornado和Redis实现的Nginx配置下发接口项目。通过GET请求返回不同主机的Nginx upstream配置块,利用YAML进行配置管理,实现了高效灵活的配置更新。

最近同事们在搞一个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,如需转载请自行联系原作者



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值