4e38b28344
Define the default API versions for the Image and Volume services in overcloudrc. The default Image API version (2) is the latest major version supported by Glance, and matches the version Glance implements when the version is unspecified. The default Volume API version (3) is the latest major version supported by Cinder. Cinder supports higher microversions, but the Cinder project recommends a lower default value in order prevent breaking legacy applications (e.g. scripts). Change-Id: I306fc90b0adcc001aae5bfbe83685b27371c80c8
131 lines
4.3 KiB
Python
131 lines
4.3 KiB
Python
# Copyright 2015 Red Hat, Inc.
|
|
#
|
|
# 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.
|
|
|
|
import socket
|
|
|
|
from six.moves import urllib
|
|
|
|
from tripleo_common import constants
|
|
|
|
|
|
def get_service_ips(stack):
|
|
service_ips = {}
|
|
for output in stack.to_dict().get('outputs', {}):
|
|
service_ips[output['output_key']] = output['output_value']
|
|
return service_ips
|
|
|
|
|
|
def get_endpoint_map(stack):
|
|
endpoint_map = {}
|
|
for output in stack.to_dict().get('outputs', {}):
|
|
if output['output_key'] == 'EndpointMap':
|
|
endpoint_map = output['output_value']
|
|
break
|
|
return endpoint_map
|
|
|
|
|
|
def get_endpoint(key, stack):
|
|
endpoint_map = get_endpoint_map(stack)
|
|
if endpoint_map:
|
|
return endpoint_map[key]['host']
|
|
else:
|
|
return get_service_ips(stack).get(key + 'Vip')
|
|
|
|
|
|
def get_overcloud_endpoint(stack):
|
|
for output in stack.to_dict().get('outputs', {}):
|
|
if output['output_key'] == 'KeystoneURL':
|
|
return output['output_value']
|
|
|
|
|
|
def bracket_ipv6(address):
|
|
"""Put a bracket around address if it is valid IPv6
|
|
|
|
Return it unchanged if it is a hostname or IPv4 address.
|
|
"""
|
|
try:
|
|
socket.inet_pton(socket.AF_INET6, address)
|
|
return "[%s]" % address
|
|
except socket.error:
|
|
return address
|
|
|
|
CLEAR_ENV = """# Clear any old environment that may conflict.
|
|
for key in $( set | awk '{FS=\"=\"} /^OS_/ {print $1}' ); do unset $key ; done
|
|
"""
|
|
CLOUDPROMPT = """
|
|
# Add OS_CLOUDNAME to PS1
|
|
if [ -z "${CLOUDPROMPT_ENABLED:-}" ]; then
|
|
export PS1=${PS1:-""}
|
|
export PS1=\${OS_CLOUDNAME:+"(\$OS_CLOUDNAME)"}\ $PS1
|
|
export CLOUDPROMPT_ENABLED=1
|
|
fi
|
|
"""
|
|
|
|
|
|
def create_overcloudrc(stack, no_proxy, admin_password):
|
|
"""Given the stack and proxy settings, create the overcloudrc
|
|
|
|
stack: Heat stack containing the deployed overcloud
|
|
no_proxy: a comma-separated string of hosts that shouldn't be proxied
|
|
"""
|
|
overcloud_endpoint = get_overcloud_endpoint(stack)
|
|
overcloud_host = urllib.parse.urlparse(overcloud_endpoint).hostname
|
|
overcloud_admin_vip = get_endpoint('KeystoneAdmin', stack)
|
|
|
|
no_proxy_list = map(bracket_ipv6,
|
|
[no_proxy, overcloud_host, overcloud_admin_vip])
|
|
|
|
rc_params = {
|
|
'NOVA_VERSION': '1.1',
|
|
'COMPUTE_API_VERSION': '1.1',
|
|
'OS_USERNAME': 'admin',
|
|
'OS_PROJECT_NAME': 'admin',
|
|
'OS_NO_CACHE': 'True',
|
|
'OS_CLOUDNAME': stack.stack_name,
|
|
'no_proxy': ','.join(no_proxy_list),
|
|
'PYTHONWARNINGS': ('"ignore:Certificate has no, ignore:A true '
|
|
'SSLContext object is not available"'),
|
|
'OS_AUTH_TYPE': 'password',
|
|
'OS_PASSWORD': admin_password,
|
|
'OS_AUTH_URL': overcloud_endpoint,
|
|
'OS_BAREMETAL_API_VERSION': constants.DEFAULT_BAREMETAL_API_VERSION,
|
|
'IRONIC_API_VERSION': constants.DEFAULT_BAREMETAL_API_VERSION,
|
|
'OS_IMAGE_API_VERSION': constants.DEFAULT_IMAGE_API_VERSION,
|
|
'OS_VOLUME_API_VERSION': constants.DEFAULT_VOLUME_API_VERSION,
|
|
}
|
|
|
|
overcloudrc = CLEAR_ENV
|
|
for key, value in rc_params.items():
|
|
line = "export %(key)s=%(value)s\n" % {'key': key, 'value': value}
|
|
overcloudrc = overcloudrc + line
|
|
overcloudrc = overcloudrc + CLOUDPROMPT
|
|
|
|
rc_params.update({
|
|
'OS_AUTH_URL': overcloud_endpoint.replace('/v2.0', '') + '/v3',
|
|
'OS_USER_DOMAIN_NAME': 'Default',
|
|
'OS_PROJECT_DOMAIN_NAME': 'Default',
|
|
'OS_IDENTITY_API_VERSION': '3'
|
|
})
|
|
|
|
overcloudrc_v3 = CLEAR_ENV
|
|
for key, value in rc_params.items():
|
|
line = "export %(key)s=%(value)s\n" % {'key': key, 'value': value}
|
|
overcloudrc_v3 = overcloudrc_v3 + line
|
|
overcloudrc_v3 = overcloudrc_v3 + CLOUDPROMPT
|
|
|
|
return {
|
|
"overcloudrc": overcloudrc,
|
|
"overcloudrc.v3": overcloudrc_v3
|
|
}
|