我可以在单个操作系统上安装几个Ansible版本并随意切换吗? 现在我们有几个版本,比如Ubuntu的1.5.4,但最新版本是2.0.1,而1.9.4仍然存在。我很感激安装所有这些,只需切换到适合我的一个。 如果是,怎么样?
答案 0 :(得分:10)
Ansible只是一个python包,所以,如果你在主机上安装了virtualenv,只需要为你想要的每个ansible版本创建一个新的venv,然后点击安装它。
因此,如果你想要ansible v1.9.5,你可以这样做:
$ virtualenv ~/venvs/ansible_1_9_5
$ source ~/venvs/ansible_1_9_5/bin/activate
$ pip install "ansible==1.9.5"
$ ansible --version
ansible 1.9.5
configured module search path = None
答案 1 :(得分:0)
如果您只使用Ansible的版本化软件包,那么每个版本的virtualenv可以很好地工作。要进行Ansible开发,或者你只想按照上游源代码进行错误修复(以及新错误...),你可以在你的.zshrc中使用以下内容(当然bash也可以工作):
function ansible-switch {
if [ "$1" != "off" ]; then
VIRTUAL_ENV_DISABLE_PROMPT=1 source $ANSIBLE_VIRTUALENV/bin/activate
git -C "$ANSIBLE_SOURCE_DIR" checkout -q $1
source $ANSIBLE_SOURCE_DIR/hacking/env-setup -q
echo "Environment configured to run Ansible from source (branch: $1)"
else
if [[ -v ANSIBLE_HOME ]]; then
export PYTHONPATH=$(echo $PYTHONPATH | sed "s@$ANSIBLE_HOME/lib:@@")
export PATH=$(echo $PATH | sed "s@$ANSIBLE_HOME/bin:@@")
export MANPATH=$(echo $MANPATH | sed "s@$ANSIBLE_HOME/docs/man:@@")
unset ANSIBLE_HOME
deactivate
fi
echo "Environment configured to not run Ansible from source"
fi
}
if ! [[ -v ANSIBLE_HOME ]]; then
ansible-switch devel > /dev/null
fi
您需要定义ANSIBLE_SOURCE_DIR和ANSIBLE_VIRTUALENV变量。 ANSIBLE_SOURCE_DIR是Ansible源代码的git克隆,ANSIBLE_VIRTUALENV是您使用Python2设置的virtualenv以及任何必需的Ansible依赖项(有关从源代码运行的更多信息,请查看http://docs.ansible.com/ansible/intro_installation.html#running-from-source)。
然后您可以切换到任何Ansible git分支,如下所示:
ansible-switch devel
或标签:
ansible-switch v2.3.0.0-1
你可以像这样关闭来源:
ansible-switch off
作为一个踢球者,我使用以下脚本(称为' ansible-update')使用Ansible上游提交更新我自己的Ansible fork:
cd "$ANSIBLE_SOURCE_DIR"
current_branch_tag=$(git symbolic-ref --short HEAD 2>/dev/null)
if [ $? -ne 0 ]; then
current_branch=$(git describe --tags)
fi
git checkout devel -q
git fetch upstream -q
git rebase upstream/devel -q
git checkout $current_branch -q
最后一点假设你有一个分叉,并将上游设置为官方的Ansible远程。