本文介绍了如果某些文件更改,我如何运行ansible命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用ansible部署我的django App

使用

- name: Upgrade the virtualenv.
  pip: requirements={{project_root}}/www/requirements.txt virtualenv={{project_root}}/www/virtualenv

但是我只想在自上次运行以来对requirements.txt进行更改的情况下运行

But i only want to run that if requirements.txt changed since last run

推荐答案

我们需要确定需求文件的任何是否已更改.步骤如下:

We need to determine if any of the requirement files have changed. The steps are as follows:

  1. 触摸临时需求文件. (如果它们不存在,则新空白文件的md5会有所不同)
  2. 计算先前需求文件的md5哈希值
  3. 计算当前需求文件(刚从GIT中拉出的文件)的md5哈希值
  4. 逐步遍历这些stat命令的结果,比较md5哈希,注册比较的输出
  5. 仅当#4中的任何结果发生更改时,我们才会安装pip软件包
  6. 将当前需求文件复制到tmp位置.

这是我的剧本,{{virtualenv.requirements}}是需求文件的列表,例如:['/work/project/requirements.txt', '/work/project/requirements-prod.txt']:

Here's my playbook, {{virtualenv.requirements}} is a list of requirement files, eg: ['/work/project/requirements.txt', '/work/project/requirements-prod.txt']:

- name: Assures temp requirements directory exists
  file: path="/tmp{{ virtualenv.path }}" state=directory
  sudo: yes
  when: install_pip_packages

- name: Assures temp requirements files exists
  file: path="/tmp{{ item }}" state=touch
  sudo: yes
  with_items: virtualenv.requirements_files
  when: install_pip_packages

- name: Calculate md5 of temp requirements
  stat: path="/tmp{{ item }}"
  with_items: virtualenv.requirements_files
  register: temp_requirements_stat
  when: install_pip_packages

- name: Calculate md5 of current requirements
  stat: path="{{ item }}"
  with_items: virtualenv.requirements_files
  register: current_requirements_stat
  when: install_pip_packages

- name: Check requirement files for changes
  command: test {{ temp_requirements_stat.results[item.0].stat.md5 }} = {{ current_requirements_stat.results[item.0].stat.md5 }}
  changed_when: "requirements_check.rc != 0"
  failed_when: requirements_check.stderr
  with_indexed_items: virtualenv.requirements_files
  register: requirements_check
  when: install_pip_packages

- name: Install packages required by the Django app inside virtualenv
  pip: virtualenv={{ virtualenv.path }} extra_args='-U' requirements="{{ virtualenv.requirements_files | join(' -r ') }}"
  when: install_pip_packages and requirements_check.changed

- name: Copy requirements to /tmp
  command: cp "{{ item }}" "/tmp{{ item }}"
  sudo: yes
  with_items: virtualenv.requirements_files
  when: install_pip_packages

这篇关于如果某些文件更改,我如何运行ansible命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-22 18:55