Merge ~newell-jensen/maas:lp1761584 into maas:master

Proposed by Newell Jensen
Status: Merged
Approved by: Newell Jensen
Approved revision: 4e40628eb9ed6d55628716c212d6e63f636b6421
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~newell-jensen/maas:lp1761584
Merge into: maas:master
Diff against target: 94 lines (+49/-2)
2 files modified
src/provisioningserver/drivers/pod/tests/test_virsh.py (+30/-2)
src/provisioningserver/drivers/pod/virsh.py (+19/-0)
Reviewer Review Type Date Requested Status
Blake Rouse (community) Approve
MAAS Lander Approve
Andres Rodriguez Pending
Review via email: mp+342908@code.launchpad.net

Commit message

LP: #1761584 -- Create default storage pool 'maas' for virsh pods if no default storage pool is present.

To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b lp1761584 lp:~newell-jensen/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 4e40628eb9ed6d55628716c212d6e63f636b6421

review: Approve
Revision history for this message
Blake Rouse (blake-rouse) wrote :

Looks good.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/src/provisioningserver/drivers/pod/tests/test_virsh.py b/src/provisioningserver/drivers/pod/tests/test_virsh.py
index 467574a..e7925a0 100644
--- a/src/provisioningserver/drivers/pod/tests/test_virsh.py
+++ b/src/provisioningserver/drivers/pod/tests/test_virsh.py
@@ -431,6 +431,31 @@ class TestVirshSSH(MAASTestCase):
431 value = conn.get_key_value(SAMPLE_NODEINFO, key)431 value = conn.get_key_value(SAMPLE_NODEINFO, key)
432 self.assertEquals(value, expected)432 self.assertEquals(value, expected)
433433
434 def test_create_storage_pool(self):
435 mock_run = self.patch(virsh.VirshSSH, 'run')
436 mock_run.return_value = ''
437 conn = virsh.VirshSSH()
438 conn.create_storage_pool()
439 self.assertThat(mock_run, MockCallsMatch(
440 call(['pool-define-as', 'maas', 'dir',
441 '- - - -', '/var/lib/libvirt/maas-images']),
442 call(['pool-build', 'maas']),
443 call(['pool-start', 'maas']),
444 call(['pool-autostart', 'maas'])))
445
446 def test_create_storage_pool_writes_maaslog_on_error(self):
447 mock_maaslog = self.patch(virsh, 'maaslog')
448 mock_run = self.patch(virsh.VirshSSH, 'run')
449 error_msg = 'error: error message here'
450 mock_run.return_value = error_msg
451 conn = virsh.VirshSSH()
452 conn.create_storage_pool()
453 self.assertThat(mock_run, MockCalledOnceWith(
454 ['pool-define-as', 'maas', 'dir',
455 '- - - -', '/var/lib/libvirt/maas-images']))
456 self.assertThat(mock_maaslog.error, MockCalledOnceWith(
457 "Failed to create Pod storage pool: %s", error_msg))
458
434 def test_list_machines(self):459 def test_list_machines(self):
435 names = [factory.make_name('machine') for _ in range(3)]460 names = [factory.make_name('machine') for _ in range(3)]
436 conn = self.configure_virshssh('\n'.join(names))461 conn = self.configure_virshssh('\n'.join(names))
@@ -1472,8 +1497,10 @@ class TestVirshPodDriver(MAASTestCase):
1472 ]1497 ]
1473 mock_login = self.patch(virsh.VirshSSH, 'login')1498 mock_login = self.patch(virsh.VirshSSH, 'login')
1474 mock_login.return_value = True1499 mock_login.return_value = True
1475 mock_run = self.patch(virsh.VirshSSH, 'run')1500 mock_list_pools = self.patch(virsh.VirshSSH, 'list_pools')
1476 mock_run.return_value = SAMPLE_POOLLIST1501 mock_list_pools.side_effect = ([], ['default'], ['default'])
1502 mock_create_storage_pool = self.patch(
1503 virsh.VirshSSH, 'create_storage_pool')
1477 mock_get_pod_resources = self.patch(1504 mock_get_pod_resources = self.patch(
1478 virsh.VirshSSH, 'get_pod_resources')1505 virsh.VirshSSH, 'get_pod_resources')
1479 mock_get_pod_hints = self.patch(1506 mock_get_pod_hints = self.patch(
@@ -1484,6 +1511,7 @@ class TestVirshPodDriver(MAASTestCase):
1484 mock_list_machines.return_value = machines1511 mock_list_machines.return_value = machines
14851512
1486 discovered_pod = yield driver.discover(system_id, context)1513 discovered_pod = yield driver.discover(system_id, context)
1514 self.expectThat(mock_create_storage_pool, MockCalledOnceWith())
1487 self.expectThat(1515 self.expectThat(
1488 mock_get_pod_resources, MockCalledOnceWith())1516 mock_get_pod_resources, MockCalledOnceWith())
1489 self.expectThat(1517 self.expectThat(
diff --git a/src/provisioningserver/drivers/pod/virsh.py b/src/provisioningserver/drivers/pod/virsh.py
index 30a4955..537de91 100644
--- a/src/provisioningserver/drivers/pod/virsh.py
+++ b/src/provisioningserver/drivers/pod/virsh.py
@@ -289,6 +289,20 @@ class VirshSSH(pexpect.spawn):
289 if value:289 if value:
290 return value.split()[0]290 return value.split()[0]
291291
292 def create_storage_pool(self):
293 """Create a storage pool named `maas`."""
294 commands = [
295 ['pool-define-as', 'maas', 'dir',
296 '- - - -', '/var/lib/libvirt/maas-images'],
297 ['pool-build', 'maas'],
298 ['pool-start', 'maas'],
299 ['pool-autostart', 'maas']]
300 for command in commands:
301 output = self.run(command)
302 if output.startswith('error:'):
303 maaslog.error("Failed to create Pod storage pool: %s", output)
304 return None
305
292 def list_machines(self):306 def list_machines(self):
293 """Lists all VMs by name."""307 """Lists all VMs by name."""
294 machines = self.run(['list', '--all', '--name'])308 machines = self.run(['list', '--all', '--name'])
@@ -928,6 +942,11 @@ class VirshPodDriver(PodDriver):
928 """942 """
929 conn = yield self.get_virsh_connection(context)943 conn = yield self.get_virsh_connection(context)
930944
945 # Check that we have at least one storage pool. If not, create it.
946 pools = yield deferToThread(conn.list_pools)
947 if not len(pools):
948 yield deferToThread(conn.create_storage_pool)
949
931 # Check and set default storage pool.950 # Check and set default storage pool.
932 self.default_storage_pool = context.get('default_storage_pool')951 self.default_storage_pool = context.get('default_storage_pool')
933 if self.default_storage_pool:952 if self.default_storage_pool:

Subscribers

People subscribed via source and target branches