Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions servicereportpkg/validate/plugins/rsct.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# SPDX-License-Identifier: GPL-2.0-only
#
# (C) Copyright IBM Corp. 2020
# Author: Seeteena Thoufeek <[email protected]>

"""Plugin to check RSCT configuration"""


import os
import sys

from servicereportpkg.check import Check, SysfsCheck
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you don't need to import Check and SysfsCheck.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pylint will help you to find such errors.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to import Check. but SysfsCheck not needed.

from servicereportpkg.validate.plugins import Plugin
from servicereportpkg.utils import execute_command
from servicereportpkg.check import PackageCheck,ServiceCheck
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Format the import statement, need space between PackageCheck and ServiceCheck.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK. Formatting will fix.

from servicereportpkg.utils import is_package_installed
from servicereportpkg.logger import get_default_logger
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No one using get_default_logger function anywhere in this file.
Do you really need this function?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not needed.

from servicereportpkg.validate.schemes.schemes import PSeriesScheme

class RSCT(Plugin, PSeriesScheme):
"""RSCT configuration check"""

def __init__(self):
Plugin.__init__(self)
self.name = RSCT.__name__
self.description = RSCT.__doc__
self.service_name = "ctrmc"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we don't need this variable anymore, right?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. not needed. will remove it.

self.installation_path = "/opt/rsct/bin"
self.packages = ["rsct.core","rsct.core.utils","rsct.basic","src",
"devices.chrp.base.ServiceRM","DynamicRM"]
self.subsystems = ["ctrmc","IBM.DRM","IBM.HostRM","IBM.ServiceRM",
"IBM.MgmtDomainRM"]
self.subsystem_active = "active"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really need to keep a class-level variable here? Can't we use the "active" string directly in get_subsystem_status function?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok. will do.


def check_rsct_installation_path(self):
"""RSCT Installation path"""

installation_path_exists = True
self.log.info("RSCT Installation path check")
if not os.path.isdir(self.installation_path):
self.log.error("Missing RSCT installation directory %s",
self.installation_path)
installation_path_exists = False

return Check(self.check_rsct_installation_path.__doc__,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will you need installation path /opt/rsct/bin in the repair plugin?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes. In repair, with plugin_obj.check_rsct_installation_path() ...I am checking the installation path.

installation_path_exists)

def get_subsystem_status(self,subsystem):
"""Checks the subsystem status by issuing the lssrc command"""

command = ["lssrc", "-s", subsystem]
(return_code,stdout,err) = execute_command(command)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Format issue. Please use pylint to find other similar issues.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok. will fix it.


if return_code is None or self.subsystem_active not in str(stdout):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issue in hardcoding "active" string instead of self.subsystem_active.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok. will do

return False

return True

def check_rsct_subsystem_check(self):
"""RSCT service status"""

status = True
self.log.info("RSCT Subsystem status check")
for subsystem in self.subsystems:
if self.get_subsystem_status(subsystem) ==0:
self.log.debug("%s Subsystem is not active", subsystem)
status = False

return ServiceCheck(self.check_rsct_subsystem_check.__doc__,
subsystem, status)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As we discussed offline you might need to update this function to store all the subsystems along with their status?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. rsct repair plugin needs these subsystems along with their status so will update the revised code.


def check_rsct_package(self):
"""RSCT package check"""

status = True
self.log.info("RSCT Package check")
for package in self.packages:
if not is_package_installed(package):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use four spaces to align you code. No tabs.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am using python formater to align the space. Is that okay?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

installed pylint and fixed the format error.

self.log.error("%s package is not installed", package)
status = False

return PackageCheck(self.check_rsct_package.__doc__,
package, status)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Although you are checking all the packages defined in the self.packages list, but only the last package in the list is added to PackageCheck object.

Not sure whether this is by intention?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ha. The time when validate code is posted, I did not think we need all those values needs to populate in repair. Now I am returning packagelist along with their status.