2013-12-22 4 views
2

Я использую этот класс в моем манифесте:Кукольный только создать virtualenv раз

python::virtualenv { $virtualenv_dir: 
ensure => present, 
version => 'system', 
systempkgs => false, 
distribute => false, 
owner => $user, 
group => $group, 
} 

Он отлично работает в первый раз.

Проблема: у меня появилось несколько демонаризованных работников сельдерея, которые используют файл venv/bin/python.

Когда я применяю манифест во второй раз, я получаю:

Already using interpreter /usr/bin/python 
Traceback (most recent call last): 
File "/usr/bin/virtualenv", line 3, in 
virtualenv.main() 
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 938, in main 
never_download=options.never_download) 
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 1039, in create_environment 
site_packages=site_packages, clear=clear)) 
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 1274, in install_python 
shutil.copyfile(executable, py_executable) 
File "/usr/lib/python2.7/shutil.py", line 83, in copyfile 
with open(dst, 'wb') as fdst: 
IOError: [Errno 26] Text file busy: '/usr/local/myapp/venv/bin/python' 

ли это как-то можно только запустить virtualenv команды, если каталог venv не был создан еще?

Или что вы предложите? Я не хочу останавливать своих работников сельдерея, применяя марионетку.

ответ

1

можно запустить командование exec ресурс только тогда, когда конкретный файл еще не создан, используя creates параметр:

exec { 'mycommand': 
    command => '/usr/bin/something a b c', 
    creates => '/var/lib/xxx'; 
} 

Это будет запускать команду только тогда, когда /var/lib/xxx не существовать.

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