1 # Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs")
2 # and others. All rights reserved.
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:
8 # http://www.apache.org/licenses/LICENSE-2.0
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 neutronclient.common.utils import str2bool
17 from snaps import file_utils
18 from snaps.openstack.utils import glance_utils, keystone_utils
20 __author__ = 'spisarski'
25 Represents the credentials required to connect with OpenStack servers
28 def __init__(self, **kwargs):
31 :param username: The user (required)
32 :param password: The user's password (required)
33 :param auth_url: The OpenStack cloud's authorization URL (required)
34 :param project_name: The project/tenant name
35 :param identity_api_version: The OpenStack's API version to use for
37 :param image_api_version: The OpenStack's API version to use for Glance
39 :param network_api_version: The OpenStack's API version to use for
41 :param compute_api_version: The OpenStack's API version to use for Nova
43 :param heat_api_version: The OpenStack's API version to use for Heat
45 :param user_domain_id: Used for v3 APIs (default='default')
46 :param user_domain_name: Used for v3 APIs (default='Default')
47 :param project_domain_id: Used for v3 APIs (default='default')
48 :param project_domain_name: Used for v3 APIs (default='Default')
49 :param interface: Used to specify the endpoint type for keystone as
50 public, admin, internal
51 :param proxy_settings: instance of os_credentials.ProxySettings class
52 :param cacert: Default to be True for http, or the certification file
53 is specified for https verification, or set to be False
54 to disable server certificate verification without cert
56 :param region_name: the region (optional default = None)
58 self.username = kwargs.get('username')
59 self.password = kwargs.get('password')
60 self.auth_url = kwargs.get('auth_url')
61 self.project_name = kwargs.get('project_name')
63 if kwargs.get('identity_api_version') is None:
64 self.identity_api_version = keystone_utils.V2_VERSION_NUM
66 self.identity_api_version = float(kwargs['identity_api_version'])
68 if kwargs.get('image_api_version') is None:
69 self.image_api_version = glance_utils.VERSION_2
71 self.image_api_version = float(kwargs['image_api_version'])
73 if kwargs.get('network_api_version') is None:
74 self.network_api_version = 2
76 self.network_api_version = float(kwargs['network_api_version'])
78 if kwargs.get('compute_api_version') is None:
79 self.compute_api_version = 2
81 self.compute_api_version = float(kwargs['compute_api_version'])
83 if kwargs.get('heat_api_version') is None:
84 self.heat_api_version = 1
86 self.heat_api_version = float(kwargs['heat_api_version'])
88 self.user_domain_id = kwargs.get('user_domain_id', 'default')
90 if kwargs.get('user_domain_name') is None:
91 self.user_domain_name = 'Default'
93 self.user_domain_name = kwargs['user_domain_name']
95 self.project_domain_id = kwargs.get('project_domain_id', 'default')
97 if kwargs.get('project_domain_name') is None:
98 self.project_domain_name = 'Default'
100 self.project_domain_name = kwargs['project_domain_name']
102 if kwargs.get('interface') is None:
103 self.interface = 'admin'
105 self.interface = kwargs['interface']
107 self.region_name = kwargs.get('region_name', None)
110 if kwargs.get('cacert') is not None:
111 if isinstance(kwargs.get('cacert'), str):
112 if file_utils.file_exists(kwargs['cacert']):
113 self.cacert = kwargs['cacert']
115 self.cacert = str2bool(kwargs['cacert'])
117 self.cacert = kwargs['cacert']
119 if isinstance(kwargs.get('proxy_settings'), ProxySettings):
120 self.proxy_settings = kwargs.get('proxy_settings')
121 elif isinstance(kwargs.get('proxy_settings'), dict):
122 self.proxy_settings = ProxySettings(**kwargs.get('proxy_settings'))
124 self.proxy_settings = None
126 if (not self.username or not self.password or not self.auth_url
127 or not self.project_name):
128 raise OSCredsError('username, password, auth_url, and project_name'
131 auth_url_tokens = self.auth_url.split('/')
132 last_token = auth_url_tokens[len(auth_url_tokens) - 1]
133 if len(last_token) == 0:
134 last_token = auth_url_tokens[len(auth_url_tokens) - 2]
136 if not last_token.startswith('v'):
137 raise OSCredsError('auth_url last toke must start with \'v\'')
141 """Converts object to a string"""
142 return ('OSCreds - username=' + str(self.username) +
143 ', password=' + str(self.password) +
144 ', auth_url=' + str(self.auth_url) +
145 ', project_name=' + str(self.project_name) +
146 ', identity_api_version=' + str(self.identity_api_version) +
147 ', image_api_version=' + str(self.image_api_version) +
148 ', network_api_version=' + str(self.network_api_version) +
149 ', compute_api_version=' + str(self.compute_api_version) +
150 ', heat_api_version=' + str(self.heat_api_version) +
151 ', user_domain_id=' + str(self.user_domain_id) +
152 ', user_domain_name=' + str(self.user_domain_name) +
153 ', project_domain_id=' + str(self.project_domain_id) +
154 ', project_domain_name=' + str(self.project_domain_name) +
155 ', interface=' + str(self.interface) +
156 ', region_name=' + str(self.region_name) +
157 ', proxy_settings=' + str(self.proxy_settings) +
158 ', cacert=' + str(self.cacert))
163 Represents the information required for sending traffic (HTTP & SSH)
167 def __init__(self, **kwargs):
170 :param host: the HTTP proxy host
171 :param port: the HTTP proxy port
172 :param https_host: the HTTPS proxy host (defaults to host)
173 :param https_port: the HTTPS proxy port (defaults to port)
174 :param port: the HTTP proxy port
175 :param ssh_proxy_cmd: the SSH proxy command string (optional)
177 self.host = kwargs.get('host')
178 self.port = kwargs.get('port')
179 if self.port and isinstance(self.port, numbers.Number):
180 self.port = str(self.port)
182 self.https_host = kwargs.get('https_host', self.host)
183 self.https_port = kwargs.get('https_port', self.port)
184 if self.https_port and isinstance(self.https_port, numbers.Number):
185 self.https_port = str(self.https_port)
187 self.ssh_proxy_cmd = kwargs.get('ssh_proxy_cmd')
189 if not self.host or not self.port:
190 raise ProxySettingsError('host & port are required')
193 """Converts object to a string"""
194 return 'ProxySettings - host=' + str(self.host) + \
195 ', port=' + str(self.port) + \
196 ', ssh_proxy_cmd=' + str(self.ssh_proxy_cmd)
199 class ProxySettingsError(Exception):
201 Exception to be thrown when an OSCred are invalid
205 class OSCredsError(Exception):
207 Exception to be thrown when an OSCred are invalid