diff options
author | spisarski <s.pisarski@cablelabs.com> | 2017-10-24 12:27:32 -0600 |
---|---|---|
committer | spisarski <s.pisarski@cablelabs.com> | 2017-10-24 12:27:32 -0600 |
commit | 65d02af9035034b504c4e3588d30fcda68182e36 (patch) | |
tree | 077c1449edb2f1b1934a5877a4604a700d7263b7 /snaps/domain | |
parent | 2f3d18fd64ce0aea7d229493130404e2bf86dab2 (diff) |
Implemented the ability to attach volumes to VM instances.
JIRA: SNAPS-198
Change-Id: I30bb92dabab64e6a8918fa5ab0de1bed359a147e
Signed-off-by: spisarski <s.pisarski@cablelabs.com>
Diffstat (limited to 'snaps/domain')
-rw-r--r-- | snaps/domain/test/vm_inst_tests.py | 16 | ||||
-rw-r--r-- | snaps/domain/test/volume_tests.py | 11 | ||||
-rw-r--r-- | snaps/domain/vm_inst.py | 7 | ||||
-rw-r--r-- | snaps/domain/volume.py | 5 |
4 files changed, 28 insertions, 11 deletions
diff --git a/snaps/domain/test/vm_inst_tests.py b/snaps/domain/test/vm_inst_tests.py index d293373..e288366 100644 --- a/snaps/domain/test/vm_inst_tests.py +++ b/snaps/domain/test/vm_inst_tests.py @@ -23,26 +23,30 @@ class VmInstDomainObjectTests(unittest.TestCase): """ def test_construction_positional(self): - vm_inst = VmInst('name', 'id', '456', '123', dict(), 'kp-name', list()) + vm_inst = VmInst('name', 'id', '456', '123', dict(), 'kp-name', + ['foo', 'bar'], ['123', '456']) self.assertEqual('name', vm_inst.name) self.assertEqual('id', vm_inst.id) self.assertEqual('456', vm_inst.image_id) self.assertEqual('123', vm_inst.flavor_id) self.assertEqual(dict(), vm_inst.networks) self.assertEqual('kp-name', vm_inst.keypair_name) - self.assertEqual(list(), vm_inst.sec_grp_names) + self.assertEqual(['foo', 'bar'], vm_inst.sec_grp_names) + self.assertEqual(['123', '456'], vm_inst.volume_ids) def test_construction_named(self): - vm_inst = VmInst(sec_grp_names=list(), networks=dict(), inst_id='id', - name='name', flavor_id='123', image_id='456', - keypair_name='kp-name') + vm_inst = VmInst( + volume_ids=['123', '456'], sec_grp_names=['foo', 'bar'], + networks=dict(), inst_id='id', name='name', flavor_id='123', + image_id='456', keypair_name='kp-name') self.assertEqual('name', vm_inst.name) self.assertEqual('id', vm_inst.id) self.assertEqual('456', vm_inst.image_id) self.assertEqual('123', vm_inst.flavor_id) self.assertEqual(dict(), vm_inst.networks) self.assertEqual('kp-name', vm_inst.keypair_name) - self.assertEqual(list(), vm_inst.sec_grp_names) + self.assertEqual(['foo', 'bar'], vm_inst.sec_grp_names) + self.assertEqual(['123', '456'], vm_inst.volume_ids) class FloatingIpDomainObjectTests(unittest.TestCase): diff --git a/snaps/domain/test/volume_tests.py b/snaps/domain/test/volume_tests.py index fa0a95a..6feadc9 100644 --- a/snaps/domain/test/volume_tests.py +++ b/snaps/domain/test/volume_tests.py @@ -25,7 +25,7 @@ class VolumeDomainObjectTests(unittest.TestCase): def test_construction_positional(self): volume = Volume('name1', 'id1', 'desc_val1', 2, 'type_val1', - 'avail_zone1', False) + 'avail_zone1', False, [{'attached_at': 'foo'}]) self.assertEqual('name1', volume.name) self.assertEqual('id1', volume.id) self.assertEqual('desc_val1', volume.description) @@ -33,9 +33,13 @@ class VolumeDomainObjectTests(unittest.TestCase): self.assertEqual('type_val1', volume.type) self.assertEqual('avail_zone1', volume.availability_zone) self.assertFalse(volume.multi_attach) + self.assertIsNotNone(volume.attachments) + self.assertTrue(isinstance(volume.attachments[0], dict)) + self.assertEqual(1, len(volume.attachments)) def test_construction_named(self): - volume = Volume(multi_attach=True, availability_zone='avail_zone2', + volume = Volume(attachments=[{'attached_at': 'foo'}], + multi_attach=True, availability_zone='avail_zone2', vol_type='type_val2', size=3, description='desc_val2', volume_id='id2', name='name2') self.assertEqual('name2', volume.name) @@ -45,6 +49,9 @@ class VolumeDomainObjectTests(unittest.TestCase): self.assertEqual('type_val2', volume.type) self.assertEqual('avail_zone2', volume.availability_zone) self.assertTrue(volume.multi_attach) + self.assertIsNotNone(volume.attachments) + self.assertTrue(isinstance(volume.attachments[0], dict)) + self.assertEqual(1, len(volume.attachments)) class VolumeTypeDomainObjectTests(unittest.TestCase): diff --git a/snaps/domain/vm_inst.py b/snaps/domain/vm_inst.py index ca38143..4c202f5 100644 --- a/snaps/domain/vm_inst.py +++ b/snaps/domain/vm_inst.py @@ -20,7 +20,7 @@ class VmInst: are shared amongst cloud providers """ def __init__(self, name, inst_id, image_id, flavor_id, networks, - keypair_name, sec_grp_names): + keypair_name, sec_grp_names, volume_ids): """ Constructor :param name: the image's name @@ -31,6 +31,7 @@ class VmInst: value is a list of associated IPs :param keypair_name: the name of the associated keypair :param sec_grp_names: list of security group names + :param volume_ids: list of attached volume IDs """ self.name = name self.id = inst_id @@ -39,6 +40,7 @@ class VmInst: self.networks = networks self.keypair_name = keypair_name self.sec_grp_names = sec_grp_names + self.volume_ids = volume_ids def __eq__(self, other): return (self.name == other.name and @@ -47,7 +49,8 @@ class VmInst: self.flavor_id == other.flavor_id and self.networks == other.networks and self.keypair_name == other.keypair_name and - self.sec_grp_names == other.sec_grp_names) + self.sec_grp_names == other.sec_grp_names and + self.volume_ids == other.volume_ids) class FloatingIp: diff --git a/snaps/domain/volume.py b/snaps/domain/volume.py index 96094a8..0042d71 100644 --- a/snaps/domain/volume.py +++ b/snaps/domain/volume.py @@ -20,7 +20,7 @@ class Volume: are shared amongst cloud providers """ def __init__(self, name, volume_id, description, size, vol_type, - availability_zone, multi_attach): + availability_zone, multi_attach, attachments=list()): """ Constructor :param name: the volume's name @@ -30,6 +30,8 @@ class Volume: :param vol_type: the volume's type :param availability_zone: the volume's availability zone :param multi_attach: When true, volume can be attached to multiple VMs + :param attachments: List of dict objects containing the info on where + this volume is attached """ self.name = name self.id = volume_id @@ -38,6 +40,7 @@ class Volume: self.type = vol_type self.availability_zone = availability_zone self.multi_attach = multi_attach + self.attachments = attachments def __eq__(self, other): return (self.name == other.name and self.id == other.id |