From: Guillaume Abrioux Date: Tue, 19 Dec 2023 09:14:31 +0000 (+0000) Subject: node-proxy: explicitly set NodeProxy's attributes X-Git-Tag: v18.2.4~314^2~14 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a029439a8a56fe88d109c82962ac605a361ef99a;p=ceph.git node-proxy: explicitly set NodeProxy's attributes The current logic using `setattr()` makes mypy complain: "NodeProxy" has no attribute "xxx" Using `self.__dict['xxx']` addresses this mypy error but the downside of this is that the code isn't clear and less readable. Explicitly setting the different attributes makes the code clearer and more readable. Signed-off-by: Guillaume Abrioux (cherry picked from commit e71bf838428c297075df5515c342c0db0a9e31e3) --- diff --git a/src/cephadm/cephadmlib/node_proxy/baseredfishsystem.py b/src/cephadm/cephadmlib/node_proxy/baseredfishsystem.py index 587974f8db20..6102c1a8044d 100644 --- a/src/cephadm/cephadmlib/node_proxy/baseredfishsystem.py +++ b/src/cephadm/cephadmlib/node_proxy/baseredfishsystem.py @@ -15,7 +15,7 @@ class BaseRedfishSystem(BaseSystem): self.chassis_endpoint: str = kw.get('chassis_endpoint', '/Chassis/System.Embedded.1') self.log = Logger(__name__) self.host: str = kw['host'] - self.port: int = kw['port'] + self.port: str = kw['port'] self.username: str = kw['username'] self.password: str = kw['password'] # move the following line (class attribute?) diff --git a/src/cephadm/cephadmlib/node_proxy/main.py b/src/cephadm/cephadmlib/node_proxy/main.py index 813b3e3edf84..968dfd3c1ca6 100644 --- a/src/cephadm/cephadmlib/node_proxy/main.py +++ b/src/cephadm/cephadmlib/node_proxy/main.py @@ -24,10 +24,17 @@ DEFAULT_CONFIG = { class NodeProxy(Thread): - def __init__(self, **kw: Dict[str, Any]) -> None: + def __init__(self, **kw: Any) -> None: super().__init__() - for k, v in kw.items(): - setattr(self, k, v) + self.username: str = kw.get('username', '') + self.password: str = kw.get('password', '') + self.host: str = kw.get('host', '') + self.port: int = kw.get('port', 443) + self.cephx: Dict[str, Any] = kw.get('cephx', {}) + self.reporter_scheme: str = kw.get('reporter_scheme', 'https') + self.mgr_target_ip: str = kw.get('mgr_target_ip', '') + self.mgr_target_port: str = kw.get('mgr_target_port', '') + self.reporter_endpoint: str = kw.get('reporter_endpoint', '/node-proxy/data') self.exc: Optional[Exception] = None self.log = Logger(__name__) @@ -45,8 +52,8 @@ class NodeProxy(Thread): self.reporter_agent.stop() def check_auth(self, realm: str, username: str, password: str) -> bool: - return self.__dict__['username'] == username and \ - self.__dict__['password'] == password + return self.username == username and \ + self.password == password def check_status(self) -> bool: if self.__dict__.get('system') and not self.system.run: @@ -65,10 +72,10 @@ class NodeProxy(Thread): # create the redfish system and the obsever self.log.logger.info('Server initialization...') try: - self.system = RedfishDellSystem(host=self.__dict__['host'], - port=self.__dict__.get('port', 443), - username=self.__dict__['username'], - password=self.__dict__['password'], + self.system = RedfishDellSystem(host=self.host, + port=self.port, + username=self.username, + password=self.password, config=self.config) except RuntimeError: self.log.logger.error("Can't initialize the redfish system.") @@ -76,11 +83,11 @@ class NodeProxy(Thread): try: self.reporter_agent = Reporter(self.system, - self.__dict__['cephx'], - reporter_scheme=self.__dict__.get('reporter_scheme', 'https'), - reporter_hostname=self.__dict__['mgr_target_ip'], - reporter_port=self.__dict__['mgr_target_port'], - reporter_endpoint=self.__dict__.get('reporter_endpoint', '/node-proxy/data')) + self.cephx, + reporter_scheme=self.reporter_scheme, + reporter_hostname=self.mgr_target_ip, + reporter_port=self.mgr_target_port, + reporter_endpoint=self.reporter_endpoint) self.reporter_agent.run() except RuntimeError: self.log.logger.error("Can't initialize the reporter.") diff --git a/src/cephadm/cephadmlib/node_proxy/redfish_client.py b/src/cephadm/cephadmlib/node_proxy/redfish_client.py index c07e1a6b6f39..040db8ce2521 100644 --- a/src/cephadm/cephadmlib/node_proxy/redfish_client.py +++ b/src/cephadm/cephadmlib/node_proxy/redfish_client.py @@ -11,14 +11,14 @@ class RedFishClient(BaseClient): def __init__(self, host: str = '', - port: int = 443, + port: str = '443', username: str = '', password: str = ''): super().__init__(host, username, password) self.log: Logger = Logger(__name__) self.log.logger.info(f'Initializing redfish client {__name__}') self.host: str = host - self.port: int = port + self.port: str = port self.url: str = f'https://{self.host}:{self.port}' self.token: str = '' self.location: str = '' diff --git a/src/cephadm/cephadmlib/node_proxy/reporter.py b/src/cephadm/cephadmlib/node_proxy/reporter.py index 21183c980357..765374483b1f 100644 --- a/src/cephadm/cephadmlib/node_proxy/reporter.py +++ b/src/cephadm/cephadmlib/node_proxy/reporter.py @@ -12,7 +12,7 @@ class Reporter: cephx: Dict[str, Any], reporter_scheme: str = 'https', reporter_hostname: str = '', - reporter_port: int = 443, + reporter_port: str = '443', reporter_endpoint: str = '/node-proxy/data') -> None: self.system = system self.data: Dict[str, Any] = {} @@ -21,7 +21,7 @@ class Reporter: self.data['cephx'] = self.cephx self.reporter_scheme: str = reporter_scheme self.reporter_hostname: str = reporter_hostname - self.reporter_port: int = reporter_port + self.reporter_port: str = reporter_port self.reporter_endpoint: str = reporter_endpoint self.log = Logger(__name__) self.reporter_url: str = (f'{reporter_scheme}:{reporter_hostname}:' diff --git a/src/cephadm/cephadmlib/node_proxy/util.py b/src/cephadm/cephadmlib/node_proxy/util.py index f154d83daafb..31c1c00a0a15 100644 --- a/src/cephadm/cephadmlib/node_proxy/util.py +++ b/src/cephadm/cephadmlib/node_proxy/util.py @@ -104,7 +104,7 @@ def retry(exceptions: Any = Exception, retries: int = 20, delay: int = 1) -> Cal def http_req(hostname: str = '', - port: int = 443, + port: str = '443', method: Optional[str] = None, headers: MutableMapping[str, str] = {}, data: Optional[str] = None, @@ -122,7 +122,7 @@ def http_req(hostname: str = '', else: ssl_ctx.verify_mode = ssl.CERT_REQUIRED - url: str = f'{scheme}://{hostname}:{str(port)}{endpoint}' + url: str = f'{scheme}://{hostname}:{port}{endpoint}' _data = bytes(data, 'ascii') if data else None try: