8c8431dc3bf20ceec1260656e65081683c49999a
[snaps.git] / snaps / openstack / utils / deploy_utils.py
1 #
2 # Copyright (c) 2016 Cable Television Laboratories, Inc. ("CableLabs")
3 #                    and others.  All rights reserved.
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at:
8 #
9 #     http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16 #
17 # This utility makes it easy to create OpenStack objects
18 import logging
19
20 from snaps.openstack.create_project import OpenStackProject
21 from snaps.openstack.create_user import OpenStackUser
22 from snaps.openstack.create_image import OpenStackImage
23 from snaps.openstack.create_network import OpenStackNetwork
24 from snaps.openstack.create_router import OpenStackRouter
25 from snaps.openstack.create_keypairs import OpenStackKeypair
26 from snaps.openstack.create_instance import OpenStackVmInstance
27 from snaps.openstack.create_security_group import OpenStackSecurityGroup
28
29 logger = logging.getLogger('deploy_utils')
30
31
32 def create_image(os_creds, image_settings, cleanup=False):
33     """
34     Creates an image in OpenStack if necessary
35     :param os_creds: The OpenStack credentials object
36     :param image_settings: The image settings object
37     :param cleanup: Denotes whether or not this is being called for cleanup
38     :return: A reference to the image creator object from which the image
39              object can be accessed
40     """
41     image_creator = OpenStackImage(os_creds, image_settings)
42
43     if cleanup:
44         image_creator.initialize()
45     else:
46         image_creator.create()
47     return image_creator
48
49
50 def create_network(os_creds, network_settings, cleanup=False):
51     """
52     Creates a network on which the CMTSs can attach
53     :param os_creds: The OpenStack credentials object
54     :param network_settings: The network settings object
55     :param cleanup: Denotes whether or not this is being called for cleanup
56     :return: A reference to the network creator objects for each network from
57              which network elements such as the subnet, router, interface
58              router, and network objects can be accessed.
59     """
60     # Check for OS for network existence
61     # If exists return network instance data
62     # Else, create network and return instance data
63
64     logger.info('Attempting to create network with name - %s',
65                 network_settings.name)
66
67     network_creator = OpenStackNetwork(os_creds, network_settings)
68
69     if cleanup:
70         network_creator.initialize()
71     else:
72         network_creator.create()
73     logger.info('Created network ')
74     return network_creator
75
76
77 def create_router(os_creds, router_settings, cleanup=False):
78     """
79     Creates a network on which the CMTSs can attach
80     :param os_creds: The OpenStack credentials object
81     :param router_settings: The RouterConfig instance
82     :param cleanup: Denotes whether or not this is being called for cleanup
83     :return: A reference to the network creator objects for each network from
84              which network elements such as the subnet, router, interface
85              router, and network objects can be accessed.
86     """
87     # Check for OS for network existence
88     # If exists return network instance data
89     # Else, create network and return instance data
90     logger.info('Attempting to create router with name - %s',
91                 router_settings.name)
92     router_creator = OpenStackRouter(os_creds, router_settings)
93
94     if cleanup:
95         router_creator.initialize()
96     else:
97         router_creator.create()
98     logger.info('Created router ')
99     return router_creator
100
101
102 def create_keypair(os_creds, keypair_settings, cleanup=False):
103     """
104     Creates a keypair that can be applied to an instance
105     :param os_creds: The OpenStack credentials object
106     :param keypair_settings: The KeypairConfig object
107     :param cleanup: Denotes whether or not this is being called for cleanup
108     :return: A reference to the keypair creator object
109     """
110     keypair_creator = OpenStackKeypair(os_creds, keypair_settings)
111
112     if cleanup:
113         keypair_creator.initialize()
114     else:
115         keypair_creator.create()
116     return keypair_creator
117
118
119 def create_vm_instance(os_creds, instance_settings, image_settings,
120                        keypair_creator=None, init_only=False):
121     """
122     Creates a VM instance
123     :param os_creds: The OpenStack credentials
124     :param instance_settings: Instance of VmInstanceSettings
125     :param image_settings: The object containing image settings
126     :param keypair_creator: The object responsible for creating the keypair
127                             associated with this VM instance. (optional)
128     :param init_only: Denotes whether or not this is being called for
129                       initialization (T) or creation (F) (default False)
130     :return: A reference to the VM instance object
131     """
132     kp_settings = None
133     if keypair_creator:
134         kp_settings = keypair_creator.keypair_settings
135     vm_creator = OpenStackVmInstance(os_creds, instance_settings,
136                                      image_settings, kp_settings)
137     if init_only:
138         vm_creator.initialize()
139     else:
140         vm_creator.create()
141     return vm_creator
142
143
144 def create_user(os_creds, user_settings):
145     """
146     Creates an OpenStack user
147     :param os_creds: The OpenStack credentials
148     :param user_settings: The user configuration settings
149     :return: A reference to the user instance object
150     """
151     user_creator = OpenStackUser(os_creds, user_settings)
152     user_creator.create()
153     return user_creator
154
155
156 def create_project(os_creds, project_settings):
157     """
158     Creates an OpenStack user
159     :param os_creds: The OpenStack credentials
160     :param project_settings: The user project configuration settings
161     :return: A reference to the project instance object
162     """
163     project_creator = OpenStackProject(os_creds, project_settings)
164     project_creator.create()
165     return project_creator
166
167
168 def create_security_group(os_creds, sec_grp_settings):
169     """
170     Creates an OpenStack Security Group
171     :param os_creds: The OpenStack credentials
172     :param sec_grp_settings: The security group settings
173     :return: A reference to the project instance object
174     """
175     sg_creator = OpenStackSecurityGroup(os_creds, sec_grp_settings)
176     sg_creator.create()
177     return sg_creator