summaryrefslogtreecommitdiffstats
path: root/snaps/domain
diff options
context:
space:
mode:
authorspisarski <s.pisarski@cablelabs.com>2017-10-24 12:27:32 -0600
committerspisarski <s.pisarski@cablelabs.com>2017-10-24 12:27:32 -0600
commit65d02af9035034b504c4e3588d30fcda68182e36 (patch)
tree077c1449edb2f1b1934a5877a4604a700d7263b7 /snaps/domain
parent2f3d18fd64ce0aea7d229493130404e2bf86dab2 (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.py16
-rw-r--r--snaps/domain/test/volume_tests.py11
-rw-r--r--snaps/domain/vm_inst.py7
-rw-r--r--snaps/domain/volume.py5
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