Skip to content

Commit

Permalink
Support Restart from INBC (#476)
Browse files Browse the repository at this point in the history
  • Loading branch information
nmgaston authored Feb 3, 2024
1 parent 5cf155b commit 2e35935
Show file tree
Hide file tree
Showing 10 changed files with 25 additions and 169 deletions.
6 changes: 3 additions & 3 deletions inbc-program/inbc/command/command.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@
from ..utility import search_keyword

from inbm_lib.timer import Timer
from inbm_lib.constants import RESTART, QUERY, QUERY_CHANNEL, RESTART_CHANNEL
from inbm_lib.constants import RESTART, QUERY
from inbm_common_lib.request_message_constants import COMMAND_SUCCESSFUL, DYNAMIC_TELEMETRY, \
RESTART_SUCCESS, RESTART_FAILURE, QUERY_SUCCESS, QUERY_FAILURE, OTA_IN_PROGRESS, \
QUERY_HOST_SUCCESS, QUERY_HOST_FAILURE, QUERY_HOST_KEYWORD
from inbm_common_lib.request_message_constants import DBS_LOG, DOCKER_NAME, DOCKER_MESSAGE
from inbm_lib.constants import HOST_QUERY_CHANNEL
from inbm_lib.constants import HOST_QUERY_CHANNEL, RESTART_CMD_CHANNEL

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -129,7 +129,7 @@ def invoke_update(self, args: Any) -> None:
@param args: arguments passed to command-line tool.
"""
super()._send_manifest(args, RESTART_CHANNEL)
super()._send_manifest(args, RESTART_CMD_CHANNEL)

def search_response(self, payload: Any) -> None:
"""Search for keywords in response message
Expand Down
2 changes: 1 addition & 1 deletion inbc-program/inbc/command/ota_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from ..utility import search_keyword
from ..ibroker import IBroker

from inbm_lib.constants import CACHE, INSTALL_CHANNEL, FOTA, SOTA, POTA, AOTA
from inbm_lib.constants import FOTA, SOTA, POTA, AOTA
from inbm_common_lib.request_message_constants import OTA_SUCCESS_MESSAGE_LIST, SOTA_FAILURE, \
OTA_FAILURE_MESSAGE_LIST, COMMAND_SUCCESSFUL, SOTA_COMMAND_STATUS_SUCCESSFUL, SOTA_COMMAND_FAILURE, \
FOTA_INPROGRESS_FAILURE
Expand Down
8 changes: 2 additions & 6 deletions inbc-program/inbc/parser/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -326,16 +326,12 @@ def restart(args: argparse.Namespace) -> str:
"""Creates manifest in XML format.
@param args: Arguments provided by the user from command line
@return: Generated xml manifest string
@return: Generated XML manifest string
"""
raise InbcException('Restart command is not supported.')

manifest = ('<?xml version="1.0" encoding="utf-8"?>' +
'<manifest>' +
'<type>cmd</type>' +
'<cmd>restart</cmd>' +
'<restart>' +
'</restart>' +
'</manifest>')
print("manifest {0}".format(manifest))
return manifest
Expand All @@ -345,7 +341,7 @@ def query(args: argparse.Namespace) -> str:
"""Creates manifest in XML format.
@param args: Arguments provided by the user from command line
@return: Generated xml manifest string
@return: Generated XML manifest string
"""
arguments = {
'option': args.option
Expand Down
11 changes: 6 additions & 5 deletions inbc-program/tests/unit/test_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,12 @@ def test_remove_manifest(self) -> None:
'</configtype></config></manifest>'
self.assertEqual(remove.func(remove), expected)

def test_raise_not_supported_restart_manifest(self) -> None:
restart = self.arg_parser.parse_args(['restart'])
with self.assertRaisesRegex(InbcException, 'Restart command is not supported.'):
restart.func(restart)

def test_create_restart_manifest(self):
s = self.arg_parser.parse_args(['restart'])

expected = '<?xml version="1.0" encoding="utf-8"?><manifest><type>cmd</type><cmd>restart</cmd></manifest>'
assert expected == s.func(s)

def test_query_manifest(self) -> None:
s = self.arg_parser.parse_args(['query', '-o', 'all'])

Expand Down
15 changes: 3 additions & 12 deletions inbm-lib/inbm_lib/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,6 @@
# Path to inbm version files
INBM_VERSION_FILE = get_canonical_representation_of_path(
'/usr/share/intel-manageability/inbm-version.txt')
INBM_VISION_VERSION_FILE_HOST = get_canonical_representation_of_path(
'/usr/share/intel-manageability/inbm-vision-host-version.txt')
INBM_VISION_VERSION_FILE_NODE = get_canonical_representation_of_path(
'/usr/share/intel-manageability/inbm-vision-node-version.txt')

# CentOS version path
CENTOS_VERSION_PATH = get_canonical_representation_of_path('/etc/centos-release')
Expand All @@ -52,6 +48,9 @@
QUERY_CMD_CHANNEL = 'dispatcher/query'
HOST_QUERY_CHANNEL = 'manageability/request/query'

# RESTART
RESTART_CMD_CHANNEL = 'manageability/request/restart'

# OTA types
AOTA = "aota"
FOTA = "fota"
Expand All @@ -66,14 +65,6 @@
APPLICATION = "application"
OS = "os"

OTA_UPDATE = "install"
PROVISION = 'provision'
REQUEST_CHANNEL = 'ma/request/'
INSTALL_CHANNEL = REQUEST_CHANNEL + OTA_UPDATE
RESTART_CHANNEL = REQUEST_CHANNEL + RESTART
QUERY_CHANNEL = REQUEST_CHANNEL + QUERY
PROVISION_CHANNEL = REQUEST_CHANNEL + PROVISION

# Device local cache
CACHE = str(INTEL_MANAGEABILITY_CACHE_PATH_PREFIX / 'repository-tool/')

Expand Down
85 changes: 1 addition & 84 deletions inbm-lib/inbm_lib/version.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from typing import Optional

from inbm_common_lib.version import read_version, read_commit
from inbm_lib.constants import INBM_VERSION_FILE, INBM_VISION_VERSION_FILE_HOST, INBM_VISION_VERSION_FILE_NODE
from inbm_lib.constants import INBM_VERSION_FILE


def _read_inbm_version_file() -> Optional[str]:
Expand All @@ -11,23 +11,6 @@ def _read_inbm_version_file() -> Optional[str]:
except OSError:
return None


def _read_inbm_vision_version_file_host() -> Optional[str]:
try:
version_file = open(INBM_VISION_VERSION_FILE_HOST, "r")
return version_file.read()
except OSError:
return None


def _read_inbm_vision_version_file_node() -> Optional[str]:
try:
version_file = open(INBM_VISION_VERSION_FILE_NODE, "r")
return version_file.read()
except OSError:
return None


def get_inbm_version() -> Optional[str]:
"""Get INBM version from version file
@return: version string, or None if unable
Expand Down Expand Up @@ -67,69 +50,3 @@ def get_friendly_inbm_version_commit() -> str:
commit_str = commit

return f"Intel(R) Manageability version {version_str} ({commit_str})"


def get_inbm_vision_host_version() -> Optional[str]:
"""Get INBM Vision Host version from version file
@return: version string, or None if unable
"""
contents = _read_inbm_vision_version_file_host()
if contents is None:
return None
return read_version(contents)


def get_inbm_vision_host_commit() -> Optional[str]:
"""Get INBM vision host commit from version file
@return: version string, or None if unable
"""
contents = _read_inbm_vision_version_file_host()
if contents is None:
return None
return read_commit(contents)


def get_inbm_vision_node_version() -> Optional[str]:
"""Get INBM Vision Node version from version file
@return: version string, or None if unable
"""
contents = _read_inbm_vision_version_file_node()
if contents is None:
return None
return read_version(contents)


def get_inbm_vision_node_commit() -> Optional[str]:
"""Get INBM vision node commit from version file
@return: version string, or None if unable
"""
contents = _read_inbm_vision_version_file_node()
if contents is None:
return None
return read_commit(contents)


def get_friendly_inbm_vision_version_commit() -> str:
"""Get a friendly version/commit string for inbm vision"""

version = get_inbm_vision_host_version()
commit = get_inbm_vision_host_commit()
type = "host"
if version is None:
version = get_inbm_vision_node_version()
commit = get_inbm_vision_node_commit()
type = "node"

version_str = ""
if version is None:
version_str = "unknown version"
else:
version_str = version

commit_str = ""
if commit is None:
commit_str = "unknown commit"
else:
commit_str = commit

return f"Intel(R) Manageability Vision {type} version {version_str} ({commit_str})"
54 changes: 3 additions & 51 deletions inbm-lib/tests/unit/inbm_lib/test_version.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from unittest import TestCase
from inbm_lib.version import get_inbm_version, get_inbm_commit, get_inbm_vision_host_version, get_inbm_vision_host_commit, get_inbm_vision_node_version, get_inbm_vision_node_commit
from inbm_lib.version import get_friendly_inbm_version_commit, get_friendly_inbm_vision_version_commit
from inbm_lib.version import get_inbm_version, get_inbm_commit
from inbm_lib.version import get_friendly_inbm_version_commit
from unittest.mock import patch, Mock

INBM_VERSION_TEXT = "Version: 1.2.3\r\nCommit: abcdefg\r\n"
Expand All @@ -19,57 +19,9 @@ def test_get_inbm_commit(self, version: Mock) -> None:
version.return_value = INBM_VERSION_TEXT
self.assertEqual("abcdefg", get_inbm_commit())

@patch('inbm_lib.version._read_inbm_vision_version_file_host')
def test_get_inbm_vision_host_version(self, version: Mock) -> None:
version.return_value = INBM_VERSION_TEXT_HOST
self.assertEqual("2.3.4", get_inbm_vision_host_version())

@patch('inbm_lib.version._read_inbm_vision_version_file_host')
def test_get_inbm_vision_host_commit(self, version: Mock) -> None:
version.return_value = INBM_VERSION_TEXT_HOST
self.assertEqual("aaabbbc", get_inbm_vision_host_commit())

@patch('inbm_lib.version._read_inbm_vision_version_file_node')
def test_get_inbm_vision_node_version(self, version: Mock) -> None:
version.return_value = INBM_VERSION_TEXT_NODE
self.assertEqual("3.4.5", get_inbm_vision_node_version())

@patch('inbm_lib.version._read_inbm_vision_version_file_node')
def test_get_inbm_vision_node_commit(self, version: Mock) -> None:
version.return_value = INBM_VERSION_TEXT_NODE
self.assertEqual("fffeeed", get_inbm_vision_node_commit())

@patch('inbm_lib.version._read_inbm_vision_version_file_host')
@patch('inbm_lib.version._read_inbm_vision_version_file_node')
@patch('inbm_lib.version._read_inbm_version_file')
def test_get_friendly_inbm_version_commit(self, tc: Mock, bc_node: Mock, bc_host: Mock) -> None:
def test_get_friendly_inbm_version_commit(self, tc: Mock) -> None:
tc.return_value = INBM_VERSION_TEXT
bc_node.return_value = INBM_VERSION_TEXT_NODE
bc_host.return_value = INBM_VERSION_TEXT_HOST

self.assertEqual("Intel(R) Manageability version 1.2.3 (abcdefg)",
get_friendly_inbm_version_commit())

@patch('inbm_lib.version._read_inbm_vision_version_file_host')
@patch('inbm_lib.version._read_inbm_vision_version_file_node')
@patch('inbm_lib.version._read_inbm_version_file')
def test_get_friendly_inbm_vision_version_commit(self, tc: Mock, bc_node: Mock, bc_host: Mock) -> None:
tc.return_value = INBM_VERSION_TEXT
bc_node.return_value = INBM_VERSION_TEXT_NODE
bc_host.return_value = INBM_VERSION_TEXT_HOST

# Use host version when both node+host present
self.assertEqual("Intel(R) Manageability Vision host version 2.3.4 (aaabbbc)",
get_friendly_inbm_vision_version_commit())

@patch('inbm_lib.version._read_inbm_vision_version_file_host')
@patch('inbm_lib.version._read_inbm_vision_version_file_node')
@patch('inbm_lib.version._read_inbm_version_file')
def test_get_friendly_inbm_vision_version_commit_node_only(self, tc: Mock, bc_node: Mock, bc_host: Mock) -> None:
tc.return_value = INBM_VERSION_TEXT
bc_node.return_value = INBM_VERSION_TEXT_NODE
bc_host.return_value = None

# Use node version.
self.assertEqual("Intel(R) Manageability Vision node version 3.4.5 (fffeeed)",
get_friendly_inbm_vision_version_commit())
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ def __init__(self) -> None:
self.runner = PseudoShellRunner()

def restart(self) -> str:
logger.debug("Restart Linux system command received")
(out, err, code) = self.runner.run(LINUX_POWER + LINUX_RESTART)
if code != 0:
raise DispatcherException(f"Restart FAILED. Error:{err}")
Expand Down
3 changes: 2 additions & 1 deletion inbm/dispatcher-agent/dispatcher/dispatcher_class.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,10 +243,11 @@ def _perform_cmd_type_operation(self, parsed_head: XmlHandler, xml: str) -> Resu
if cmd == "shutdown":
message = self.device_manager.shutdown()
elif cmd == "restart":
logger.info("Restart command received. Restarting system...")
message = self.device_manager.restart()
if message == SUCCESS_RESTART:
state: dispatcher_state.DispatcherState = {'restart_reason': 'restart_cmd'}
dispatcher_state.write_dispatcher_state_to_state_file(state)
dispatcher_state.write_dispatcher_state_to_state_file(state)
elif cmd == "query":
self._dispatcher_broker.mqtt_publish(QUERY_CMD_CHANNEL, xml)
return PUBLISH_SUCCESS
Expand Down
9 changes: 3 additions & 6 deletions inbm/telemetry-agent/telemetry/telemetry_handling.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
get_core_temp_celsius, get_network_telemetry, get_battery_status
from .command import Command
from .telemetry_exception import TelemetryException
from inbm_lib.version import get_friendly_inbm_version_commit, get_friendly_inbm_vision_version_commit
from inbm_lib.version import get_friendly_inbm_version_commit
from telemetry import software_bom_list

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -217,8 +217,7 @@ def get_dynamic_telemetry(is_docker_installed: bool, rm_active: bool = False) ->
'percentDiskUsed': get_percent_disk_used(),
'coreTempCelsius': get_core_temp_celsius(),
'networkInformation': get_network_telemetry(),
'friendlyINBMVersionCommit': get_friendly_inbm_version_commit(),
'friendlyINBMVisionVersionCommit': get_friendly_inbm_vision_version_commit()}
'friendlyINBMVersionCommit': get_friendly_inbm_version_commit()}

if rm_active:
dynamic_telemetry['resourceMonitoring'] = get_pms_rm_telemetry()
Expand Down Expand Up @@ -304,11 +303,9 @@ def get_query_related_info(option: str, info: Dict) -> Dict:
del info['values'][elem]
elif option == "version":
info = {}
info['INBMVersionCommit'] = get_friendly_inbm_version_commit()
info['INBMVisionVersionCommit'] = get_friendly_inbm_vision_version_commit()
info['INBMVersionCommit'] = get_friendly_inbm_version_commit()
elif option == "all":
info['INBMVersionCommit'] = get_friendly_inbm_version_commit()
info['INBMVisionVersionCommit'] = get_friendly_inbm_vision_version_commit()
return info


Expand Down

0 comments on commit 2e35935

Please sign in to comment.