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