python

Ansible 实现原理(源码分析)

这篇文章 gtt 憋了非常久,一直没有时间坐下来好好整理思路,看了下草稿保存时间是2016年2月17日,尼玛都快过了一年了,这可不行,自己挖的坑含泪也要跳,争取在17日之前完工,不能留下人生遗憾。本文分析的是 ansible 1.x 版本的实现原理,2.0 中批量执行的核心逻辑是一样的,可以类推。

使用方法回顾

先回顾下 ansible 的使用场景,从使用场景出发 gtt 将剖析 ansible 里的黑魔法到底是个啥。… 查看详细

使用 epdb 远程调试 python

有很多时候不能直接使用 pdb/ipdb,比如多进程,比如后台服务。

这个时候可以用 epdb,远程调试工具

在服务端代码中加入:

import epdb; epdb.serve() #可以填一个参数 port,默认是8080

程序执行到这里会卡住,并且监听在8080端口等待连接。

另外开一个python终端

import epdb
epdb.connect()  # 两个参数 connect(host='localhost', port=8080)

之后就和本地 pdb 一样了。… 查看详细

python packaging(2015)- Distutils, Setuptools, Distribute, Distutils2 ?

python 虽然很热门,但是自 1991 年出生到现在,包管理一直十分灵活(混乱),作为开发者每过一段时间都要重新学习 python 包管理,以免追赶不上社区的变化。

为了统一 python 包管理,python 社区成立了 Python Packaging Authority 组织,专门维护 python 包相关的工具,并且维护着一份“权威”的 python 包管理用户手册

目前包管理情况

根据写文章时最新的用户手册 (2015-08-31) 反应,python 打包生态系统是这样的情况:… 查看详细

异常自动跳入 pdb

又是 OpenStack 社区发布新版本的时候,又是一次各种新包发布的季节,又是 CI 奔溃的节奏。

CI 好不容易把 devstack 安装上了,最后跑 tempest 测试时丢出这么一堆东西:

WARNING:test command found but not installed in testenv
  cmd: /bin/bash
  env: /opt/stack/new/tempest/.tox/testr-full
Maybe forgot to specify a dependency?
Traceback (most recent call last):
  File "setup.py", line 22, in <module>
    pbr=True)
  File "/usr/lib/python2.7/distutils/core.py", line 137, in setup
    ok = dist.parse_command_line()
查看详细

SQLAlchemy Auto_commit

SQLAlchemy 是 python 实现的企业级 ORM,在 OpenStack 项目中大量使用。对于SQLAlchemy入门可以参考官方0.7文档,里面有详尽的快速入门和各个模块的说明。

本文记录生产环境中遇到的 session 问题,主要解释 auto_commit 参数的意义和使用注意事项,目的是备忘以及为他人提供参考。

众所周知,SQLAlchemy 的 Engine 对象会维护一个数据库连接池,每个 Session 会从连接池中获取一个连接和数据库交互,用完后将连接放回连接池。具体地,session… 查看详细