2013-12-13 7 views
7

Czy istnieje lepszy sposób uruchamiania ansibli wewnątrz virtualenv na zdalnych komputerach?Najlepszy sposób na zawsze uruchomić ansible wewnątrz virtualenv na zdalnych maszynach?

Do tej pory sposobem, w jaki widzę, jest zmodyfikowanie pliku .bashrc, ręcznie lub przy pomocy ansibli.

Na przykład:

tasks: 
    - name: "Enable virtualenv in .bashrc" 
     lineinfile: dest=.bashrc 
        line="source {{ PROJECT_HOME }}/venv/bin/activate" 

    # 
    # Put tasks that rely on this precondition here (?) 
    # 

    # Optionally, disable this later on 
    - name: "Disable virtualenv in .bashrc" 
     lineinfile: dest=.bashrc 
        line="source {{ PROJECT_HOME }}/venv/bin/activate" 
        state=absent 

TODO: Sprawdzić, czy sposobów można to zrobić za pomocą ssh upoważniony klawiszy: http://binblog.info/2008/10/20/openssh-going-flexible-with-forced-commands/

Odpowiedz

3

Oto sposób, aby umożliwić virtualenv dla całej gry; ten przykład buduje virtualenv w jednej grze, a następnie zaczyna używać go w następnym.

Nie jestem pewien, jaki jest czysty, ale działa. Po prostu buduję coś na temat tego, o czym wspomniałem mikepurvis.

--- 
# Build virtualenv 
- hosts: all 
vars: 
    PROJECT_HOME: "/tmp/my_test_home" 
    ansible_python_interpreter: "/usr/local/bin/python" 
tasks: 
    - name: "Create virtualenv" 
    shell: virtualenv "{{ PROJECT_HOME }}/venv" 
      creates="{{ PROJECT_HOME }}/venv/bin/activate" 

    - name: "Copy virtualenv wrapper file" 
    synchronize: src=pyvenv 
       dest="{{ PROJECT_HOME }}/venv/bin/pyvenv" 

# Use virtualenv 
- hosts: all 
vars: 
    PROJECT_HOME: "/tmp/my_test_home" 
    ansible_python_interpreter: "/tmp/my_test_home/venv/bin/pyvenv" 
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 == "" 

pyenv plik wrapper:

#!/bin/bash 
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/activate" 
python [email protected] 
+0

Nicea rozwiązanie - przypuszczalnie "prawdziwe" zadania iść po zadań kodu zabezpieczającego. Myślę, że część "plik opakowania pyenv" na końcu ma literówkę z nazwy - powinno być 'pyvenv', aby dopasować zadania Ansaly. Również wycięta z gniazda shell cytuje w tym skrypcie trochę dziwne, ale tak długo jak działa ... – RichVel

Powiązane problemy