← Back to team overview

cloud-init-dev team mailing list archive

[Merge] lp:~harlowja/cloud-init/setup-virtualenv-installable into lp:cloud-init

 

Joshua Harlow has proposed merging lp:~harlowja/cloud-init/setup-virtualenv-installable into lp:cloud-init.

Requested reviews:
  cloud init development team (cloud-init-dev)

For more details, see:
https://code.launchpad.net/~harlowja/cloud-init/setup-virtualenv-installable/+merge/240069

Only use datafiles and initsys addon outside virtualenvs

To make it so that cloud-init is installable in a virtualenv
where it can be tested in an isolated scenario we need to avoid
using and including datafiles (which won't be written into the
virtualenv) and also avoid using our initsys helper class which
also adds on its own files when we are being ran from a virtualenv.

-- 
https://code.launchpad.net/~harlowja/cloud-init/setup-virtualenv-installable/+merge/240069
Your team cloud init development team is requested to review the proposed merge of lp:~harlowja/cloud-init/setup-virtualenv-installable into lp:cloud-init.
=== modified file 'setup.py'
--- setup.py	2014-09-02 16:18:21 +0000
+++ setup.py	2014-10-30 00:24:52 +0000
@@ -23,6 +23,7 @@
 from glob import glob
 
 import os
+import sys
 
 import setuptools
 from setuptools.command.install import install
@@ -86,6 +87,17 @@
     ETC = "/usr/local/etc"
 
 
+# Avoid having datafiles installed in a virtualenv...
+def in_virtualenv():
+    try:
+        if sys.real_prefix == sys.prefix:
+            return False
+        else:
+            return True
+    except AttributeError:
+        return False
+
+
 def get_version():
     cmd = ['tools/read-version']
     (ver, _e) = tiny_p(cmd)
@@ -135,6 +147,29 @@
         self.distribution.reinitialize_command('install_data', True)
 
 
+if in_virtualenv():
+    data_files = []
+    cmdclass = {}
+else:
+    data_files = [
+        (ETC + '/cloud', glob('config/*.cfg')),
+        (ETC + '/cloud/cloud.cfg.d', glob('config/cloud.cfg.d/*')),
+        (ETC + '/cloud/templates', glob('templates/*')),
+        (USR + '/lib/cloud-init', ['tools/uncloud-init',
+                                   'tools/write-ssh-key-fingerprints']),
+        (USR + '/share/doc/cloud-init', [f for f in glob('doc/*') if is_f(f)]),
+        (USR + '/share/doc/cloud-init/examples',
+            [f for f in glob('doc/examples/*') if is_f(f)]),
+        (USR + '/share/doc/cloud-init/examples/seed', 
+            [f for f in glob('doc/examples/seed/*') if is_f(f)]),
+    ]
+    # Use a subclass for install that handles
+    # adding on the right init system configuration files
+    cmdclass = {
+        'install': InitsysInstallData,
+    }
+
+
 setuptools.setup(name='cloud-init',
       version=get_version(),
       description='EC2 initialisation magic',
@@ -146,23 +181,7 @@
                'tools/cloud-init-per',
                ],
       license='GPLv3',
-      data_files=[(ETC + '/cloud', glob('config/*.cfg')),
-                  (ETC + '/cloud/cloud.cfg.d', glob('config/cloud.cfg.d/*')),
-                  (ETC + '/cloud/templates', glob('templates/*')),
-                  (USR + '/lib/cloud-init',
-                    ['tools/uncloud-init',
-                     'tools/write-ssh-key-fingerprints']),
-                  (USR + '/share/doc/cloud-init',
-                   [f for f in glob('doc/*') if is_f(f)]),
-                  (USR + '/share/doc/cloud-init/examples',
-                   [f for f in glob('doc/examples/*') if is_f(f)]),
-                  (USR + '/share/doc/cloud-init/examples/seed',
-                   [f for f in glob('doc/examples/seed/*') if is_f(f)]),
-                 ],
+      data_files=data_files,
       install_requires=read_requires(),
-      cmdclass={
-          # Use a subclass for install that handles
-          # adding on the right init system configuration files
-          'install': InitsysInstallData,
-      },
+      cmdclass=cmdclass,
       )


Follow ups