2016-09-23 7 views
1

Я попытался создать виртуальную среду в vagrant VM, используя ansible-local, но не смог.Можно ли создать виртуальную среду python с помощью загружаемой книги?

Это мой Vagrant файл:

Vagrant.configure(2) do |config| 
    config.vm.provider "virtualbox" do |v| 
    v.memory = 4096 
    v.cpus = 2 
    end 

    config.vm.define "shortener" do |shortener| 
    shortener.vm.box = "ubuntu/trusty64" 
    # database 
    shortener.vm.network :forwarded_port, host: 3307, guest: 3306 
    # browser 
    shortener.vm.network :forwarded_port, host: 4568, guest: 4568 
    shortener.vm.provision :ansible_local do |ansible| 
     ansible.playbook = "playbook.yml" 
    end 
    end 

    config.ssh.forward_agent = true 

end 

Это "playbook.yml":

- name: Deploy shortener 
    hosts: all 
    become: true 
    become_method: sudo 

    tasks: 
    - name: Install packages 
     apt: update_cache=yes name={{ item }} state=present 
     with_items: 
    - git 
    - python-pip 
    - nginx-full 
    - vim 
    - python-virtualenv 
    - virtualenvwrapper 
    - python3.4 
    - python3.4-doc 
    - python3.4-dev 
    - software-properties-common 
    - python-software-properties 
    - postgresql 
    - postgresql-client 

- name: Load virtualenvwrapper 
    shell: source /etc/bash_completion.d/virtualenvwrapper 

- name: Create virtual environment    
    shell: mkvirtualenv shortener --python=/usr/bin/python3 

- name: Install requirements 
    pip: requirements='/vagrant/configs/requirements.txt' 

И это выход 'бродяга вверх':

[email protected]:~/url_shortener$ vagrant provision 
==> shortener: Running provisioner: ansible_local... 
    shortener: Running ansible-playbook... 

PLAY [Deploy shortener]  
************************** 

TASK [setup] 
************************** 
ok: [shortener] 
************************** 
TASK [Install packages] 
ok: [shortener] => (item=[u'git', u'python-pip', u'nginx-full', u'vim', u'python-virtualenv', u'virtualenvwrapper', u'python3.4', u'python3.4-doc', u'python3.4-dev', u'software-properties-common', u'python-software-properties', u'postgresql', u'postgresql-client']) 

TASK [Load virtualenvwrapper] 
************************** 
fatal: [shortener]: FAILED! => {"changed": true, "cmd": "source /etc/bash_completion.d/virtualenvwrapper", "delta": "0:00:00.003591", "end": "2016-09-23 16:06:43.169513", "failed": true, "rc": 127, "start": "2016-09-23 16:06:43.165922", "stderr": "/bin/sh: 1: source: not found", "stdout": "", "stdout_lines": [], "warnings": []} 

NO MORE HOSTS LEFT 
************************** 
[WARNING]: Could not create retry file 'playbook.retry'. [Errno 2] No such file or directory: '' 


PLAY RECAP 
************************** 
shortener     : ok=2 changed=0 unreachable=0 failed=1 

Ansible failed to complete successfully. Any error output should be visible above. Please fix these errors and try again. 

Также я попытался использовать 'command' вместо 'shell' с тем же результатом.

Я думаю, что я мог бы использовать сценарий оболочки, который создает виртуальную среду, но можно ли исправить эту ошибку с помощью доступных средств?

+1

Модуль 'pip' поддерживает параметр' virutalenv', поэтому вам не нужно делать это в отдельной задаче ([docs] (https://docs.ansible.com/ansible/pip_module.html)) , – jonafato

+1

Я думаю, что источником ваших проблем может быть, когда вы создаете свой виртуальный виртуальный питон :). Вместо поиска virtualenv я обычно использую полный путь двоичного кода '' python'' от виртуального файла в моих книжках. Возможно, если вы используете полный путь к '' mkvirtualenv'', он будет работать. –

+0

@ notorious.no Я не уверен, что вы имели в виду с «полным путем к mkvirtualenv», потому что это просто функция в «virtualenvwrapper.sh». –

ответ

0

Я нашел решение. Это мой файл «playbook.yml»:

- name: Deploy shortener 
    hosts: all 
    remote_user: vagrant 

tasks: 
    - name: Install packages 
     become: true 
     become_method: sudo   
     apt: update_cache=yes name={{ item }} state=present 
     with_items: 
     - git 
     - python-pip 
     - nginx-full 
     - vim 
     - python-virtualenv 
     - virtualenvwrapper 
     - python3.4 
     - python3.4-doc 
     - python3.4-dev 
     - software-properties-common 
     - python-software-properties 
     - postgresql 
     - postgresql-client 

    - name: Install requirements 
     become: true 
     become_method: sudo   
     pip: 
     requirements: /vagrant/configs/requirements.txt 
     virtualenv: /home/vagrant/.virtualenvs/shortener 
     virtualenv_python: python3.4 

Я использовал стандартный модуль для этого модуля. Спасибо за полезные комментарии!

+0

Рад, что я мог помочь. – jonafato

Смежные вопросы