devops实践中的python库¶
说明¶
运维脚本写的多。工程方面有些不足。因此用这个项目,了解一下一个好的工程应该有代码之外的东西
- 比如:
使用文档
测试用例
自动化部署
不同环境的配置的管理
敏感信息的安全存储
另外,写完上面这些,其实可以帮助理清思路,代码的目的是什么,不能只限于无头绪的自娱自乐。
安装¶
pip install opsas-pylib
模块¶
config client¶
应用场景¶
在接手运维一些遗留项目时,发现一个配置地狱。项目时间长或者经手人多了之后。
由于:
可能会同时从环境变量,配置文件,配置中心客户端等同时获取配置
然后配置之间有优先级覆盖关系
导致在多个环境或者线上trouble shooting时,实际生效的配置项及配置项来源不够可视化。 因此借照springboot application.yaml的形式。将一个项目使用到的所有配置放在jinja2渲染的yaml文件中。 这样部署维护就非常清晰了
使用说明¶
-
class
opsas.utils.
ConfigClient
(config_path, logger=None)[source]¶ render a key-value pair from config file. config file was yaml format with jinja2 support.
- Parameters
config_path (str) – Template config file path
logger (logging.logger, optional) – Python logger object
Note
os environment can be used in yaml via context os_env
Example
>>> import os >>> os.environ.setdefault('env','test') >>> configClient = ConfigClient("config.yaml") ## config.yaml env: {{ os_env.get("env") | default("local",True) }} >>> configClient.get('env') 'test'
SlackLogHandler¶
python log handler,用于将日志打到slack
应用场景¶
运维系统的一些消息时希望通知到开发的。一般是整个发布完成后再抓去处理日志再用邮件等通知开发。 但这样不利于异常处理。希望把发布的一些信息实时的发布出来供开发订阅。
使用说明¶
-
class
opsas.utils.
SlackLogHandler
(token, channel, logger=None)[source]¶ SlackLogHandler for python logging.logger object
- Parameters
token (str) – slack app oauth token
channel (str) – slack channel name
logger (logging.logger,optional) – logger object for logging logs when slackloghandler,
Note
This slacklog handler used slack app to sendmessage.
Create a slack app and follower guides to allow it to connect and chat in channel https://api.slack.com/apps?new_app=1.
Examples
>>> import logging >>> logger = logging.getLogger('slack') >>> logging.basicConfig() >>> slackLogHandler = SlackLogHandler(channel='test',token='xxx') >>> logger.addHandler(slackLogHandler) >>> logger.info("info") >>> logger.warning("warnning")
>>> import logging >>> logging.basicConfig() >>> logger = logging.getLogger("slack") >>> slackLogHandler = SlackLogHandler(channel='test',token='xxx') >>> slackLogHandler.create_session('testDialog') >>> logger.addHandler(slackLogHandler) >>> logger.warning('warining')