在Ansible中设置软件包版本

时间:2019-09-07 01:56:35

标签: ansible

我使用Ansible来配置一个系统,其中包括安装许多软件包。

我必须为软件包设置版本号吗?我的理解是,如果我不将版本设置为单个软件包,那么下次我重新运行Ansible时,它将安装软件包的最新版本,那么恐怕某些软件包的最新版本将与最新版本不兼容。其他软件包的版本,我正确吗?

以下是当前我如何设置版本的示例:

- name: install apache-airflow[postgres, s3, ...]
  become_user: root
  pip:
    name: "{{ item.name }}"
    version: "{{ item.version }}"
  with_items:
     - { name: apache-airflow, version: 1.10.3}
     - { name: postgres, version: 2.2.2} 
     - { name: s3, version: 3.0.0 } 
     ...

1 个答案:

答案 0 :(得分:1)

我假设您使用的是比with_items does not appear in the documentation更高的ansible 2.8。

最好的建议是直接从一个简单的剧本中调用您喜欢的python包管理器(例如pip)。这种方法可以让每个工具尽其所能:)

使用pip之类的包管理器,将(包)依赖项存储在requirements file中。

例如,

您可以有一个command来调用pip。像这样:

tasks:
  - name: install python dependencies
    command: pip install -r requirement.txt

还可以让您随时使用virtualenv,这会为您的python项目创建一个python环境,从而避免包冲突。

virtualenv应该在安装其他软件包依赖项之前安装。

假设您使用的是python版本3,它将看起来像这样:

$ pip3 install virtualenv
$ virtualenv --python=`which python3` venv
$ source venv/bin/activate
$ pip install -r requirements.txt

您还可以将以上代码片段放置在Shell脚本中,然后使用ansible command调用Shell脚本。这将安装virtualenv,将其激活,最后安装python软件包。