我使用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 }
...
答案 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软件包。