Added MTU network config and updated flavor_metadata test support
[snaps.git] / snaps / openstack / openstack_creator.py
1 # Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs")
2 #                    and others.  All rights reserved.
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at:
7 #
8 #     http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 from snaps.domain.creator import CloudObject
16 from snaps.openstack.utils import (
17     nova_utils, neutron_utils, keystone_utils, cinder_utils, magnum_utils)
18
19 __author__ = 'spisarski'
20
21
22 class OpenStackCloudObject(CloudObject):
23     """
24     Abstract class for all OpenStack object creators
25     """
26
27     def __init__(self, os_creds):
28         """
29         Constructor
30         :param os_creds: the OpenStack credentials object
31         """
32         self._os_creds = os_creds
33         self._os_session = None
34         self._keystone = None
35
36     def initialize(self):
37         self._os_session = keystone_utils.keystone_session(self._os_creds)
38         self._keystone = keystone_utils.keystone_client(
39             self._os_creds, session=self._os_session)
40
41     def get_os_creds(self):
42         return self._os_creds
43
44     def create(self):
45         raise NotImplementedError('Do not override abstract method')
46
47     def clean(self):
48         if self._os_session:
49             keystone_utils.close_session(self._os_session)
50
51
52 class OpenStackComputeObject(OpenStackCloudObject):
53     """
54     Abstract class for all OpenStack compute creators
55     """
56
57     def __init__(self, os_creds):
58         """
59         Constructor
60         :param os_creds: the OpenStack credentials object
61         """
62         super(OpenStackComputeObject, self).__init__(os_creds)
63         self._nova = None
64
65     def initialize(self):
66         super(OpenStackComputeObject, self).initialize()
67         self._nova = nova_utils.nova_client(self._os_creds, self._os_session)
68
69     def create(self):
70         raise NotImplementedError('Do not override abstract method')
71
72
73 class OpenStackNetworkObject(OpenStackCloudObject):
74     """
75     Abstract class for all OpenStack compute creators
76     """
77
78     def __init__(self, os_creds):
79         """
80         Constructor
81         :param os_creds: the OpenStack credentials object
82         """
83         super(OpenStackNetworkObject, self).__init__(os_creds)
84         self._neutron = None
85
86     def initialize(self):
87         super(OpenStackNetworkObject, self).initialize()
88         self._neutron = neutron_utils.neutron_client(
89             self._os_creds, self._os_session)
90
91     def create(self):
92         raise NotImplementedError('Do not override abstract method')
93
94
95 class OpenStackIdentityObject(OpenStackCloudObject):
96     """
97     Abstract class for all OpenStack compute creators
98     """
99
100     def __init__(self, os_creds):
101         """
102         Constructor
103         :param os_creds: the OpenStack credentials object
104         """
105         super(OpenStackIdentityObject, self).__init__(os_creds)
106
107     def initialize(self):
108         super(OpenStackIdentityObject, self).initialize()
109
110     def create(self):
111         raise NotImplementedError('Do not override abstract method')
112
113
114 class OpenStackVolumeObject(OpenStackCloudObject):
115     """
116     Abstract class for all OpenStack compute creators
117     """
118
119     def __init__(self, os_creds):
120         """
121         Constructor
122         :param os_creds: the OpenStack credentials object
123         """
124         super(OpenStackVolumeObject, self).__init__(os_creds)
125         self._cinder = None
126
127     def initialize(self):
128         super(OpenStackVolumeObject, self).initialize()
129         self._cinder = cinder_utils.cinder_client(
130             self._os_creds, self._os_session)
131
132     def create(self):
133         raise NotImplementedError('Do not override abstract method')
134
135
136 class OpenStackMagnumObject(OpenStackCloudObject):
137     """
138     Abstract class for all OpenStack compute creators
139     """
140
141     def __init__(self, os_creds):
142         """
143         Constructor
144         :param os_creds: the OpenStack credentials object
145         """
146         super(OpenStackMagnumObject, self).__init__(os_creds)
147         self._magnum = None
148
149     def initialize(self):
150         super(OpenStackMagnumObject, self).initialize()
151         self._magnum = magnum_utils.magnum_client(
152             self._os_creds, self._os_session)
153
154     def create(self):
155         raise NotImplementedError('Do not override abstract method')