Source code for ironic.drivers.modules.redfish.graphical_console
#
# 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.
from oslo_log import log as logging
from ironic.common import metrics_utils
from ironic.conductor import periodics
from ironic import conf
from ironic.drivers.modules import graphical_console
from ironic.drivers.modules.redfish import utils as redfish_utils
LOG = logging.getLogger(__name__)
CONF = conf.CONF
METRICS = metrics_utils.get_metrics_logger(__name__)
[docs]
class RedfishGraphicalConsole(graphical_console.GraphicalConsole):
[docs]
def get_app_name(self):
return 'redfish-graphical'
[docs]
def get_properties(self):
"""Return the properties of the interface.
:returns: dictionary of <property name>:<property description> entries.
"""
return redfish_utils.COMMON_PROPERTIES.copy()
[docs]
def validate(self, task):
"""Validates the driver information needed by the redfish driver.
:param task: a TaskManager instance containing the node to act on.
:raises: InvalidParameterValue on malformed parameter(s)
:raises: MissingParameterValue on missing parameter(s)
"""
node = task.node
redfish_utils.parse_driver_info(node)
[docs]
def get_app_info(self, task):
"""Information required by the app to connect to the console
For redfish based consoles the app info will be the parsed driver
info.
:returns: dict containing parsed driver info
"""
return redfish_utils.parse_driver_info(task.node)
@METRICS.timer('RedfishGraphicalConsole._expire_console_sessions')
@periodics.node_periodic(
purpose='checking active console sessions',
spacing=CONF.vnc.expire_console_session_interval,
filters={'console_enabled': True},
predicate_extra_fields=['console_interface', 'driver_internal_info'],
predicate=lambda n: (
'redfish-graphical' == n.console_interface
and n.driver_internal_info.get('novnc_secret_token')
),
)
def _expire_redfish_console_sessions(self, task, manager, context):
"""Periodic task to close expired console sessions"""
self._expire_console_sessions(task)