Некоторые задачи в ansible не выполняются

#deployment #web-deployment #ansible #ansible-playbook

#развертывание #веб-развертывание #ansible

Вопрос:

Я использую ansible для некоторых проблем с развертыванием.

Я хочу сделать следующее:

  1. Установите virtualenv
  2. Активируйте установленную виртуальную среду
  3. Проверьте, нахожусь ли я в виртуальной среде

Для этого у меня есть следующий сборник задач:

 ---
- 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 .