File 0001-Enable-usage-of-config-drive-for-file-injection.patch of Package openstack-trove

From 3ae176624cf2bcacff234acfceefc0b641a2aa9a Mon Sep 17 00:00:00 2001
From: Vipul Sabhaya <vipuls@gmail.com>
Date: Thu, 12 Jun 2014 16:22:54 -0700
Subject: [PATCH] Enable usage of config-drive for file injection

* Some nova deployments allow the use of config-drive to do file
  injection.  Trove, when booting an instance, needs to send this
  to Nova when config-drive is to be used.

Closes-Bug: #1329535

Change-Id: I950b93a32f6c7224f30cf930e5f95710c07cbc26
---
 etc/trove/trove-taskmanager.conf.sample          | 5 +++++
 trove/common/cfg.py                              | 3 +++
 trove/taskmanager/models.py                      | 9 ++++++---
 trove/tests/fakes/nova.py                        | 2 +-
 trove/tests/unittests/taskmanager/test_models.py | 2 +-
 5 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/etc/trove/trove-taskmanager.conf.sample b/etc/trove/trove-taskmanager.conf.sample
index 2bd93f2..d3d4c1e 100644
--- a/etc/trove/trove-taskmanager.conf.sample
+++ b/etc/trove/trove-taskmanager.conf.sample
@@ -43,6 +43,11 @@ mount_point = /var/lib/mysql
 volume_time_out=30
 server_delete_time_out=480
 
+# Nova server boot options
+# sets the --config-drive argument when doing a nova boot
+# (controls how file injection is handled by nova)
+use_nova_server_config_drive = False
+
 # Configuration options for talking to nova via the novaclient.
 # These options are for an admin user in your keystone config.
 # It proxy's the token received from the user to send to nova via this admin users creds,
diff --git a/trove/common/cfg.py b/trove/common/cfg.py
index b5fb2f1..428069d 100644
--- a/trove/common/cfg.py
+++ b/trove/common/cfg.py
@@ -113,6 +113,9 @@ common_opts = [
     cfg.StrOpt('taskmanager_queue', default='taskmanager'),
     cfg.StrOpt('conductor_queue', default='trove-conductor'),
     cfg.IntOpt('trove_conductor_workers', default=1),
+    cfg.BoolOpt('use_nova_server_config_drive', default=False,
+                help="Use config drive for file injection when booting "
+                "instance."),
     cfg.BoolOpt('use_nova_server_volume', default=False),
     cfg.BoolOpt('use_heat', default=False),
     cfg.StrOpt('device_path', default='/dev/vdb'),
diff --git a/trove/taskmanager/models.py b/trove/taskmanager/models.py
index e9bf332..44af50c 100644
--- a/trove/taskmanager/models.py
+++ b/trove/taskmanager/models.py
@@ -568,12 +568,15 @@ class FreshInstanceTasks(FreshInstance, NotifyMixin, ConfigurationMixin):
                 userdata = f.read()
         name = self.hostname or self.name
         bdmap = block_device_mapping
+        config_drive = CONF.use_nova_server_config_drive
+
         server = self.nova_client.servers.create(
             name, image_id, flavor_id, files=files, userdata=userdata,
             security_groups=security_groups, block_device_mapping=bdmap,
-            availability_zone=availability_zone, nics=nics)
-        LOG.debug(_("Created new compute instance %(server_id)s "
-                    "for id: %(id)s") %
+            availability_zone=availability_zone, nics=nics,
+            config_drive=config_drive)
+        LOG.debug("Created new compute instance %(server_id)s "
+                  "for id: %(id)s" %
                   {'server_id': server.id, 'id': self.id})
         return server
 
diff --git a/trove/tests/fakes/nova.py b/trove/tests/fakes/nova.py
index 9f41d3c..fc2a5f2 100644
--- a/trove/tests/fakes/nova.py
+++ b/trove/tests/fakes/nova.py
@@ -259,7 +259,7 @@ class FakeServers(object):
 
     def create(self, name, image_id, flavor_ref, files=None, userdata=None,
                block_device_mapping=None, volume=None, security_groups=None,
-               availability_zone=None, nics=None):
+               availability_zone=None, nics=None, config_drive=False):
         id = "FAKE_%s" % uuid.uuid4()
         if volume:
             volume = self.volumes.create(volume['size'], volume['name'],
diff --git a/trove/tests/unittests/taskmanager/test_models.py b/trove/tests/unittests/taskmanager/test_models.py
index 8a6bbd1..99e604a 100644
--- a/trove/tests/unittests/taskmanager/test_models.py
+++ b/trove/tests/unittests/taskmanager/test_models.py
@@ -75,7 +75,7 @@ class fake_Server:
 class fake_ServerManager:
     def create(self, name, image_id, flavor_id, files, userdata,
                security_groups, block_device_mapping, availability_zone=None,
-               nics=None):
+               nics=None, config_drive=False):
         server = fake_Server()
         server.id = "server_id"
         server.name = name
-- 
1.8.3.2

openSUSE Build Service is sponsored by