Ansible用来做配置管理是极好的, 但是有时配置完成后会需要基于环境做一些验证工作, 用好pip, script这些模块, 其实我们还是可以很方便的做到上面的事情的.
本文是作者在实践时遇到的一些坑以及对应的解决办法, 记录以供参考.
为了顺利的让我们的python脚本在远程环境上运行起来, 我们需要大致做下面几件事:
配置一个虚拟环境并且安装依赖的第三方package;
pip
模组本身已经支持
virtualenv
啦, 所以只要参照下面的写法指定一下
virtualenv
的路径即可, 比如:
- name: install python packages
name:
- xmltodict
- pytest
virtualenv: ~/venv/cd_project
基于虚拟环境执行我们的脚本, script
模组支持指定executable的路径, 所以这里只要指定一下对应的executor的路径即可, 比如我想用pytest跑某个脚本, 那么就可以写成下面这种:
- name: run validation script
script: scripts/test_server.py
args:
executable: ~/venv/cd_project/bin/pytest
register: pytest_result
environment:
MY_MONGODB_URI: "{{ MY_MONGODB_URI }}"
Note:
line2: 如果你的script是基于role写作的, 可以在对应的role目录下建一个scripts的目录, 将你的脚本放在对应文件夹, 指定script路径是用相对路径就好
line6~7: 如果想在执行脚本时传入某些环境变量(比如邮箱, 密码等), 可以通过environment关键字
如果希望从controller主机上获取某些环境变量, 可以用 {{ lookup('env','variable_name') }}
的方式获取, 例如:
vars:
MY_MONGODB_URI: "{{ lookup('env','MY_MONGODB_URI') }}"