最近同事们在搞一个nginx的配置下发接口,项目用tornado redis yaml来实现,我这里就簡單分享下关于nginx配置api实现。
#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()
后端的模板程序:
upstream {{ ldata['upstream_name'] }} { {{ ldata['upstream_mode'] }};
{% for i in ldata['upstream_rs'] %}
{% if i['server_info']['kp'] %}keepalive {{ i['server_info']['kp'] }};{% end %}
{% for a 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等参数。
原文:http://rfyiamcool.blog.51cto.com/1030776/1393371
这样的方式下发配置,还是很靠谱的,最少我已经把lvs、nginx的配置应用进去了。
其他的想法,这个方法可以用在saltstack上面的,看到我写的关于salt lvs的文章,大家会有思路的。不想用yaml的话,可以换成mongodb做。对于平台来说,mongodb更方便的。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com