diff --git a/config.yaml b/config.yaml index 497a259e..fcbaa6da 100644 --- a/config.yaml +++ b/config.yaml @@ -56,6 +56,12 @@ options: default: "yes" type: string description: Whether to run nova-api and nova-network on the compute nodes. + disk-cachemodes: + default: + type: string + description: | + Specific cachemodes to use for different disk types e.g: + file=directsync,block=none enable-resize: default: False type: boolean diff --git a/hooks/nova_compute_context.py b/hooks/nova_compute_context.py index c8b0b7fe..7957c896 100644 --- a/hooks/nova_compute_context.py +++ b/hooks/nova_compute_context.py @@ -103,6 +103,9 @@ class NovaComputeLibvirtContext(context.OSContextGenerator): if config('instances-path') is not None: ctxt['instances_path'] = config('instances-path') + if config('disk-cachemodes'): + ctxt['disk_cachemodes'] = config('disk-cachemodes') + return ctxt diff --git a/templates/havana/nova.conf b/templates/havana/nova.conf index c2e461f6..4908f5b7 100644 --- a/templates/havana/nova.conf +++ b/templates/havana/nova.conf @@ -114,3 +114,8 @@ keymap = {{ console_keymap }} server_listen = 0.0.0.0 server_proxyclient_address = {{ console_listen_addr }} {% endif -%} + +{% if disk_cachemodes -%} +[libvirt] +disk_cachemodes = {{ disk_cachemodes }} +{% endif -%} diff --git a/templates/juno/nova.conf b/templates/juno/nova.conf index 7e51a503..7843b5d3 100644 --- a/templates/juno/nova.conf +++ b/templates/juno/nova.conf @@ -114,4 +114,6 @@ rbd_secret_uuid = {{ rbd_secret_uuid }} {% if live_migration_uri -%} live_migration_uri = {{ live_migration_uri }} {% endif -%} - +{% if disk_cachemodes -%} +disk_cachemodes = {{ disk_cachemodes }} +{% endif -%} diff --git a/unit_tests/test_nova_compute_contexts.py b/unit_tests/test_nova_compute_contexts.py index aaa85c0e..e13e483b 100644 --- a/unit_tests/test_nova_compute_contexts.py +++ b/unit_tests/test_nova_compute_contexts.py @@ -181,6 +181,13 @@ class NovaComputeContextTests(CharmTestCase): self.assertEquals( {'libvirtd_opts': '-d -l', 'listen_tls': 0}, libvirt()) + def test_libvirt_disk_cachemodes(self): + self.test_config.set('disk-cachemodes', 'file=unsafe,block=none') + libvirt = context.NovaComputeLibvirtContext() + self.assertEquals( + {'libvirtd_opts': '-d', 'listen_tls': 0, + 'disk_cachemodes': 'file=unsafe,block=none'}, libvirt()) + @patch.object(context.NeutronComputeContext, 'network_manager') @patch.object(context.NeutronComputeContext, 'plugin') def test_disable_security_groups_true(self, plugin, nm):