#deployment #web-deployment #ansible #ansible-playbook
#развертывание #веб-развертывание #ansible
Вопрос:
Я использую ansible для некоторых проблем с развертыванием.
Я хочу сделать следующее:
- Установите virtualenv
- Активируйте установленную виртуальную среду
- Проверьте, нахожусь ли я в виртуальной среде
Для этого у меня есть следующий сборник задач:
---
- hosts: servers
tasks:
- name: update repository
apt: update_cache=yes
sudo: true
tasks:
- name: install git
apt: name=git state=latest
sudo: true
tasks:
- name: install pip
apt: name=python-pip state=latest
sudo: true
tasks:
- name: installing postgres
sudo: true
apt: name=postgresql state=latest
tasks:
- name: installing libpd-dev
sudo: true
apt: name=libpq-dev state=latest
tasks:
- name: installing psycopg
sudo: true
apt: name=python-psycopg2 state=latest
tasks:
- name: configuration of virtual env
sudo: true
pip: name=virtualenvwrapper state=latest
tasks:
- name: create virtualenv
command: virtualenv venv
tasks:
- name: virtualenv activate
shell: . ~/venv/bin/activate
tasks:
- name: "Guard code, so we are more certain we are in a virtualenv"
shell: echo $VIRTUAL_ENV
register: command_result
failed_when: command_result.stdout == ""
Проблема в том, что иногда некоторые задачи не выполняются, но они должны выполняться… Например, в моем случае задача:
tasks:
- name: create virtualenv
command: virtualenv venv
Не выполняется.
Но если я прокомментирую 2 последние задачи:
tasks:
- name: virtualenv activate
shell: . ~/venv/bin/activate
tasks:
- name: "Guard code, so we are more certain we are in a virtualenv"
shell: echo $VIRTUAL_ENV
register: command_result
failed_when: command_result.stdout == ""
Предыдущая работает…
Не могу понять, что я делаю неправильно. Может кто-нибудь мне намекнуть?
Комментарии:
1. Вы повторяете ключ «задачи:», но это нужно только один раз.
2. @Ramon de la Fuente спасибо )
Ответ №1:
предполагая hosts: servers
, что они охватывают правильные серверы, у вас должна быть только одна tasks
запись. Вот оптимизированный и упрощенный план действий.
---
- hosts: servers
sudo: yes
tasks:
- name: update repository daily
apt: update_cache=yes cache_valid_time=86400
- name: install development dependencies
apt: name={{item}} state=latest
with_items:
- git
- python-pip
- postgresql
- libpq-dev
- python-psycopg2
- name: configuration of virtual env
pip: name=virtualenvwrapper state=present
- name: create virtualenv
command: virtualenv venv
- name: virtualenv activate
shell: . ~/venv/bin/activate
- name: "Guard code, so we are more certain we are in a virtualenv"
shell: echo $VIRTUAL_ENV
register: command_result
failed_when: command_result.stdout == ""
Обратите внимание, что я кэшировал apt
вызов, и я также изменил state
на present
. Вероятно, вы захотите установить определенные версии, а не перепроверять при каждом запуске ansible
.