自从使用ansible以来,开发项项目从测试 安装部署,验证速度都得到了很快的提升,特别是实现了全部自动化的测试和部署,大幅度节省了人力物力。
但是一个苦恼的问题一直困恼着. ansible 从1.9到现在的2.8.0dev,不断的进行版本升级. 相同的代码在不同版本的ansible之间不是100%兼容的。这个就产生了一个问题: 如果确保你的代码可以在任何地方100%可靠的执行?
经常发生这样的事:几个月前的项目部署脚本测试了上百遍都正常的脚本,突然不灵了,浪费了大量的时间和精力。—因为依赖的环境发生了变化. 可能是库可能是python 版本不一样,可能是环境path 设置不一样,可能是权限问题,…等等,诸如此类,都是给项目带来了不稳定的因素.
ansible 是基于python 开发的,python 从2.x 到 3.7.x 版本也非常多.
同一台机器安装了python2.x 和python3.x 是很常见的事情。
python3.x 是未来的趋势,python2.x 即将停止开发了.
解决办法:
创建不同版本的ansible 文件夹, 然后在对应的ansible文件夹内安装对应版本的 ansible 安装相应的虚拟环境和依赖。
cd ~/tools/
mkdir ansible2.7.5
cd ansible2.7.5
easy_install pip
pip upgrade pip
pip install virtualenv
#virtualenv -p python2 venv #可以指定python版本python2
virtualenv -p python3 venv #可以指定python版本 python3
#python3 -m venv venv
source venv/bin/activate
#列出哪些ansible是可以通过pip安装的
pip install ansible==
pip install ansible==2.7.5
pip install ansible
下面写个便捷环境切换脚本:
happy:ansible2.7.5 happy$ more start.sh
#!/bin/bash
#确保shell 切换到当前shell 脚本文件夹
current_file_path=
(
c
d
"
(cd "
(cd"(dirname “$0”)"; pwd)
cd ${current_file_path}
echo "请用 source "$0
source venv/bin/activate
python --version
ansible --version
echo “请切换到你的项目目录”
#venv/bin/deactivate
举例2:
创建一个ansible2.6.10 执行环境.
cd ~/tools
mkdir ansible2.6.10
cd ansible2.6.10
virtualenv -p python2 venv #这里是为了举例,你也可以换成python3
ls
venv
source venv/bin/activate
(venv) happy:ansible2.6.10 happy$ pip install ansible2.6.10 #注意一定要在虚拟环境里安装才有效.
Collecting ansible2.6.10
Downloading …
(venv) happy:ansible2.6.10 happy$ python --version
Python 2.7.15
(venv) happy:ansible2.6.10 happy$ ansible --version
cd ~/work/ceph-cluster-offline-install/ceph-cluster-offline-install
(venv) happy:ceph-cluster-offline-install happy$ pip install -r requirements.txt
ansible-playbook -vvv main.yml
发现原来的playbook 都可以正常运行了。
因为之前是在python2.7.x 环境下,ansible2.6.x 环境下。
通过以上的演示,可以得出。 这种使用虚拟环境安装ansible 是确保项目可以正常部署的一种途径.