2 # Copyright (c) 2016 Cable Television Laboratories, Inc. ("CableLabs")
3 # and others. All rights reserved.
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:
9 # http://www.apache.org/licenses/LICENSE-2.0
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.
17 # This utility makes it easy to create OpenStack objects
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
29 logger = logging.getLogger('deploy_utils')
32 def create_image(os_creds, image_settings, cleanup=False):
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
41 image_creator = OpenStackImage(os_creds, image_settings)
44 image_creator.initialize()
46 image_creator.create()
50 def create_network(os_creds, network_settings, cleanup=False):
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.
60 # Check for OS for network existence
61 # If exists return network instance data
62 # Else, create network and return instance data
64 logger.info('Attempting to create network with name - %s',
65 network_settings.name)
67 network_creator = OpenStackNetwork(os_creds, network_settings)
70 network_creator.initialize()
72 network_creator.create()
73 logger.info('Created network ')
74 return network_creator
77 def create_router(os_creds, router_settings, cleanup=False):
79 Creates a network on which the CMTSs can attach
80 :param os_creds: The OpenStack credentials object
81 :param router_settings: The RouterSettings 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.
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',
92 router_creator = OpenStackRouter(os_creds, router_settings)
95 router_creator.initialize()
97 router_creator.create()
98 logger.info('Created router ')
102 def create_keypair(os_creds, keypair_settings, cleanup=False):
104 Creates a keypair that can be applied to an instance
105 :param os_creds: The OpenStack credentials object
106 :param keypair_settings: The KeypairSettings object
107 :param cleanup: Denotes whether or not this is being called for cleanup
108 :return: A reference to the keypair creator object
110 keypair_creator = OpenStackKeypair(os_creds, keypair_settings)
113 keypair_creator.initialize()
115 keypair_creator.create()
116 return keypair_creator
119 def create_vm_instance(os_creds, instance_settings, image_settings,
120 keypair_creator=None, init_only=False):
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
134 kp_settings = keypair_creator.keypair_settings
135 vm_creator = OpenStackVmInstance(os_creds, instance_settings,
136 image_settings, kp_settings)
138 vm_creator.initialize()
144 def create_user(os_creds, user_settings):
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
151 user_creator = OpenStackUser(os_creds, user_settings)
152 user_creator.create()
156 def create_project(os_creds, project_settings):
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
163 project_creator = OpenStackProject(os_creds, project_settings)
164 project_creator.create()
165 return project_creator
168 def create_security_group(os_creds, sec_grp_settings):
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
175 sg_creator = OpenStackSecurityGroup(os_creds, sec_grp_settings)