summaryrefslogtreecommitdiffstats
path: root/snaps/openstack/utils/deploy_utils.py
blob: c936c1fcf2a7e2c87448ff055bee2874bbe5cc45 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#
# Copyright (c) 2016 Cable Television Laboratories, Inc. ("CableLabs")
#                    and others.  All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# This utility makes it easy to create OpenStack objects
import logging

from snaps.openstack.create_project import OpenStackProject
from snaps.openstack.create_user import OpenStackUser
from snaps.openstack.create_image import OpenStackImage
from snaps.openstack.create_network import OpenStackNetwork
from snaps.openstack.create_router import OpenStackRouter
from snaps.openstack.create_keypairs import OpenStackKeypair
from snaps.openstack.create_instance import OpenStackVmInstance
from snaps.openstack.create_security_group import OpenStackSecurityGroup

logger = logging.getLogger('deploy_utils')


def create_image(os_creds, image_settings, cleanup=False):
    """
    Creates an image in OpenStack if necessary
    :param os_creds: The OpenStack credentials object
    :param image_settings: The image settings object
    :param cleanup: Denotes whether or not this is being called for cleanup
    :return: A reference to the image creator object from which the image
             object can be accessed
    """
    image_creator = OpenStackImage(os_creds, image_settings)

    if cleanup:
        image_creator.initialize()
    else:
        image_creator.create()
    return image_creator


def create_network(os_creds, network_settings, cleanup=False):
    """
    Creates a network on which the CMTSs can attach
    :param os_creds: The OpenStack credentials object
    :param network_settings: The network settings object
    :param cleanup: Denotes whether or not this is being called for cleanup
    :return: A reference to the network creator objects for each network from
             which network elements such as the subnet, router, interface
             router, and network objects can be accessed.
    """
    # Check for OS for network existence
    # If exists return network instance data
    # Else, create network and return instance data

    logger.info('Attempting to create network with name - %s',
                network_settings.name)

    network_creator = OpenStackNetwork(os_creds, network_settings)

    if cleanup:
        network_creator.initialize()
    else:
        network_creator.create()
    logger.info('Created network ')
    return network_creator


def create_router(os_creds, router_settings, cleanup=False):
    """
    Creates a network on which the CMTSs can attach
    :param os_creds: The OpenStack credentials object
    :param router_settings: The RouterSettings instance
    :param cleanup: Denotes whether or not this is being called for cleanup
    :return: A reference to the network creator objects for each network from
             which network elements such as the subnet, router, interface
             router, and network objects can be accessed.
    """
    # Check for OS for network existence
    # If exists return network instance data
    # Else, create network and return instance data
    logger.info('Attempting to create router with name - %s',
                router_settings.name)
    router_creator = OpenStackRouter(os_creds, router_settings)

    if cleanup:
        router_creator.initialize()
    else:
        router_creator.create()
    logger.info('Created router ')
    return router_creator


def create_keypair(os_creds, keypair_settings, cleanup=False):
    """
    Creates a keypair that can be applied to an instance
    :param os_creds: The OpenStack credentials object
    :param keypair_settings: The KeypairSettings object
    :param cleanup: Denotes whether or not this is being called for cleanup
    :return: A reference to the keypair creator object
    """
    keypair_creator = OpenStackKeypair(os_creds, keypair_settings)

    if cleanup:
        keypair_creator.initialize()
    else:
        keypair_creator.create()
    return keypair_creator


def create_vm_instance(os_creds, instance_settings, image_settings,
                       keypair_creator=None, init_only=False):
    """
    Creates a VM instance
    :param os_creds: The OpenStack credentials
    :param instance_settings: Instance of VmInstanceSettings
    :param image_settings: The object containing image settings
    :param keypair_creator: The object responsible for creating the keypair
                            associated with this VM instance. (optional)
    :param init_only: Denotes whether or not this is being called for
                      initialization (T) or creation (F) (default False)
    :return: A reference to the VM instance object
    """
    kp_settings = None
    if keypair_creator:
        kp_settings = keypair_creator.keypair_settings
    vm_creator = OpenStackVmInstance(os_creds, instance_settings,
                                     image_settings, kp_settings)
    if init_only:
        vm_creator.initialize()
    else:
        vm_creator.create()
    return vm_creator


def create_user(os_creds, user_settings):
    """
    Creates an OpenStack user
    :param os_creds: The OpenStack credentials
    :param user_settings: The user configuration settings
    :return: A reference to the user instance object
    """
    user_creator = OpenStackUser(os_creds, user_settings)
    user_creator.create()
    return user_creator


def create_project(os_creds, project_settings):
    """
    Creates an OpenStack user
    :param os_creds: The OpenStack credentials
    :param project_settings: The user project configuration settings
    :return: A reference to the project instance object
    """
    project_creator = OpenStackProject(os_creds, project_settings)
    project_creator.create()
    return project_creator


def create_security_group(os_creds, sec_grp_settings):
    """
    Creates an OpenStack Security Group
    :param os_creds: The OpenStack credentials
    :param sec_grp_settings: The security group settings
    :return: A reference to the project instance object
    """
    sg_creator = OpenStackSecurityGroup(os_creds, sec_grp_settings)
    sg_creator.create()
    return sg_creator