Source code for ucsmsdk.utils.ucsguilaunch
# Copyright 2013 Cisco Systems, 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.
"""
This module contains APIs used to launch the Java based UCSM GUI.
"""
from __future__ import print_function
from __future__ import unicode_literals
import os
import re
import subprocess
import logging
from .. import ucsgenutils
from ..ucsexception import UcsValidationException
log = logging.getLogger('ucs')
[docs]def ucs_gui_launch(handle, need_url=False):
"""
ucs_gui_launch launches the Java based UCSM GUI.
This method requires the necessary Jdk to be in place, for it to be
successful.
Args:
handle (UcsHandle): Ucs connection handle
need_url (bool): True/False,
returns the URL to launch GUI, if True
Example:
ucs_gui_launch(handle)\n
ucs_gui_launch(handle, need_url=True)\n
"""
import tempfile
import fileinput
import platform
os_support = ["Windows", "Linux", "Microsoft", "Darwin"]
if platform.system() not in os_support:
raise UcsValidationException(
"Unsupported operating system")
jnlp_file = None
try:
ucsm_gui_url = "%s/ucsm/ucsm.jnlp" % handle.uri
if handle:
auth_token = handle.get_auth_token()
log.debug("AuthToken: <%s>" % auth_token)
if auth_token:
ucsm_gui_url = "%s?ucsmToken=%s" % (ucsm_gui_url, auth_token)
log.debug("UCSM URL: <%s>" % ucsm_gui_url)
if need_url:
return ucsm_gui_url
else:
javaws_path = ucsgenutils.get_java_installation_path()
log.debug("javaws path: <%s>" % javaws_path)
if javaws_path is not None:
# source = urllib2.urlopen(ucsm_url).read()
source = handle.post(uri=ucsm_gui_url)
jnlp_dir = tempfile.gettempdir()
log.debug("Temp Directory: <%s>" % jnlp_dir)
jnlp_file = os.path.join(jnlp_dir, "temp.jnlp")
if os.path.exists(jnlp_file):
os.remove(jnlp_file)
jnlp_fh = open(jnlp_file, "wt+")
jnlp_fh.write(source)
jnlp_fh.close()
java_str = ucsgenutils.get_java_version()
log.debug("Java Version: <%s>" % java_str)
if re.match(r'1.8', java_str):
debug_str = '\t<property ' \
'name="jnlp.ucsm.log.show.encrypted" ' \
'value="true"/>'
elif re.match(r'1.7', java_str):
if int(java_str.rsplit('_')[1]) >= 45:
debug_str = '\t<property ' \
'name="jnlp.ucsm.log.show.encrypted" ' \
'value="true"/>'
else:
debug_str = '\t<property ' \
'name="log.show.encrypted" ' \
'value="true"/>'
else:
debug_str = '\t<property ' \
'name="log.show.encrypted" ' \
'value="true"/>'
log.debug("Enable Log String is %s." % debug_str)
for line in fileinput.input(jnlp_file, inplace=1):
if re.search(r'^\s*</resources>\s*$', line):
# print debug_str
print(debug_str)
# print line,
line = line.strip('\n') if line else line
print(line)
subprocess.call([javaws_path, jnlp_file])
if os.path.exists(jnlp_file):
os.remove(jnlp_file)
else:
return None
except Exception as e:
fileinput.close()
if os.path.exists(jnlp_file):
os.remove(jnlp_file)
raise e