diff --git a/etc/trove/trove-taskmanager.conf.sample b/etc/trove/trove-taskmanager.conf.sample index 8709334bba..dece4c319f 100644 --- a/etc/trove/trove-taskmanager.conf.sample +++ b/etc/trove/trove-taskmanager.conf.sample @@ -84,6 +84,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 23a00ac218..5d37cdb307 100644 --- a/trove/common/cfg.py +++ b/trove/common/cfg.py @@ -124,6 +124,9 @@ common_opts = [ cfg.IntOpt('trove_conductor_workers', help="Number of workers for the Conductor service. The default " "will be the number of CPUs available."), + 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 0a13b7757b..32cee8c001 100644 --- a/trove/taskmanager/models.py +++ b/trove/taskmanager/models.py @@ -584,10 +584,13 @@ 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) + 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}) diff --git a/trove/tests/fakes/nova.py b/trove/tests/fakes/nova.py index c2af4f3ab4..bf39a7066d 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 25a134574f..5def6b1235 100644 --- a/trove/tests/unittests/taskmanager/test_models.py +++ b/trove/tests/unittests/taskmanager/test_models.py @@ -76,7 +76,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