Puppet - VirtualEnv nur einmal initialisieren

Puppet - VirtualEnv nur einmal initialisieren

Hier ist ein Ausschnitt aus meinem Manifest (basierend auf diesem Modul:https://github.com/stankevich/puppet-python):

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

Das funktioniert gut, wenn ich Puppet Apply zum ersten Mal ausführe. Beim zweiten Mal schlägt es jedoch fehl:

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'

Dies liegt wahrscheinlich daran, dass ich eine Reihe von Hintergrundprozessen laufen habe, die die Python-Binärdatei von virtualenv verwenden (Celery-Worker, uwsgi-Worker usw.).

Gibt es eine Möglichkeit, die virtuelle Umgebung nur beim ersten Mal zu initialisieren? Es ist nicht nötig, den Befehl virtualenv auszuführen, sobald das Verzeichnis erstellt wurde, oder?

Antwort1

Die folgende Klasse erstellt eine virtuelle Umgebung. „creates“ beschränkt den Befehl so, dass er nur ausgeführt wird, wenn die virtuelle Umgebung nicht existiert.

class virtualenv ( $virtualenv_dir ) {
  package{'python-virtualenv':
    ensure => installed,
  }

  exec{'create_virtualenv':
    creates => $virtualenv_dir,
    command => "virtualenv $virtualen_dir",
    require => Package['python-virtualenv'],
  } 
}

Rufen Sie die Klasse wie folgt auf:

class {'virtualenv':
  virtualenv_dir => '/path/to/virtualenv',
}

verwandte Informationen