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 or not
38 :return: A reference to the image creator object from which the image object can be accessed
40 image_creator = OpenStackImage(os_creds, image_settings)
41 image_creator.create(cleanup)
45 def create_network(os_creds, network_settings, cleanup=False):
47 Creates a network on which the CMTSs can attach
48 :param os_creds: The OpenStack credentials object
49 :param network_settings: The network settings object
50 :param cleanup: Denotes whether or not this is being called for cleanup or not
51 :return: A reference to the network creator objects for each network from which network elements such as the
52 subnet, router, interface router, and network objects can be accessed.
54 # Check for OS for network existence
55 # If exists return network instance data
56 # Else, create network and return instance data
58 logger.info('Attempting to create network with name - ' + network_settings.name)
60 network_creator = OpenStackNetwork(os_creds, network_settings)
61 network_creator.create(cleanup)
62 logger.info('Created network ')
63 return network_creator
66 def create_router(os_creds, router_settings, cleanup=False):
68 Creates a network on which the CMTSs can attach
69 :param os_creds: The OpenStack credentials object
70 :param router_settings: The RouterSettings instance
71 :param cleanup: Denotes whether or not this is being called for cleanup or not
72 :return: A reference to the network creator objects for each network from which network elements such as the
73 subnet, router, interface router, and network objects can be accessed.
75 # Check for OS for network existence
76 # If exists return network instance data
77 # Else, create network and return instance data
78 logger.info('Attempting to create router with name - ' + router_settings.name)
79 router_creator = OpenStackRouter(os_creds, router_settings)
80 router_creator.create(cleanup)
81 logger.info('Created router ')
85 def create_keypair(os_creds, keypair_settings, cleanup=False):
87 Creates a keypair that can be applied to an instance
88 :param os_creds: The OpenStack credentials object
89 :param keypair_settings: The KeypairSettings object
90 :param cleanup: Denotes whether or not this is being called for cleanup or not
91 :return: A reference to the keypair creator object
93 keypair_creator = OpenStackKeypair(os_creds, keypair_settings)
94 keypair_creator.create(cleanup)
95 return keypair_creator
98 def create_vm_instance(os_creds, instance_settings, image_settings, keypair_creator=None, cleanup=False):
100 Creates a VM instance
101 :param os_creds: The OpenStack credentials
102 :param instance_settings: Instance of VmInstanceSettings
103 :param image_settings: The object containing image settings
104 :param keypair_creator: The object responsible for creating the keypair associated with this VM instance. (optional)
105 :param sg_names: The names of the security groups to apply to VM. (optional)
106 :param cleanup: Denotes whether or not this is being called for cleanup or not (default False)
107 :return: A reference to the VM instance object
111 kp_settings = keypair_creator.keypair_settings
112 vm_creator = OpenStackVmInstance(os_creds, instance_settings, image_settings, kp_settings)
113 vm_creator.create(cleanup=cleanup)
117 def create_user(os_creds, user_settings):
119 Creates an OpenStack user
120 :param os_creds: The OpenStack credentials
121 :param user_settings: The user configuration settings
122 :return: A reference to the user instance object
124 user_creator = OpenStackUser(os_creds, user_settings)
125 user_creator.create()
129 def create_project(os_creds, project_settings):
131 Creates an OpenStack user
132 :param os_creds: The OpenStack credentials
133 :param project_settings: The user project configuration settings
134 :return: A reference to the project instance object
136 project_creator = OpenStackProject(os_creds, project_settings)
137 project_creator.create()
138 return project_creator
141 def create_security_group(os_creds, sec_grp_settings):
143 Creates an OpenStack Security Group
144 :param os_creds: The OpenStack credentials
145 :param sec_grp_settings: The security group settings
146 :return: A reference to the project instance object
148 sg_creator = OpenStackSecurityGroup(os_creds, sec_grp_settings)