我怎么能在Ansible版本之间切换?

时间:2016-04-06 14:22:10

标签: ansible versions

我可以在单个操作系统上安装几个Ansible版本并随意切换吗? 现在我们有几个版本,比如Ubuntu的1.5.4,但最新版本是2.0.1,而1.9.4仍然存在。我很感激安装所有这些,只需切换到适合我的一个。 如果是,怎么样?

2 个答案:

答案 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远程。