diff options
author | James Falcon <james.falcon@canonical.com> | 2021-12-15 20:16:38 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-15 19:16:38 -0700 |
commit | bae9b11da9ed7dd0b16fe5adeaf4774b7cc628cf (patch) | |
tree | 1fbb3269fc87e39832e3286ef42eefd2b23fcd44 /cloudinit/reporting | |
parent | 2bcf4fa972fde686c2e3141c58e640640b44dd00 (diff) | |
download | vyos-cloud-init-bae9b11da9ed7dd0b16fe5adeaf4774b7cc628cf.tar.gz vyos-cloud-init-bae9b11da9ed7dd0b16fe5adeaf4774b7cc628cf.zip |
Adopt Black and isort (SC-700) (#1157)
Applied Black and isort, fixed any linting issues, updated tox.ini
and CI.
Diffstat (limited to 'cloudinit/reporting')
-rw-r--r-- | cloudinit/reporting/__init__.py | 9 | ||||
-rw-r--r-- | cloudinit/reporting/events.py | 97 | ||||
-rwxr-xr-x | cloudinit/reporting/handlers.py | 128 |
3 files changed, 147 insertions, 87 deletions
diff --git a/cloudinit/reporting/__init__.py b/cloudinit/reporting/__init__.py index ed5c7038..06b5b49f 100644 --- a/cloudinit/reporting/__init__.py +++ b/cloudinit/reporting/__init__.py @@ -13,7 +13,7 @@ from ..registry import DictRegistry from .handlers import available_handlers DEFAULT_CONFIG = { - 'logging': {'type': 'log'}, + "logging": {"type": "log"}, } @@ -28,10 +28,11 @@ def update_configuration(config): for handler_name, handler_config in config.items(): if not handler_config: instantiated_handler_registry.unregister_item( - handler_name, force=True) + handler_name, force=True + ) continue handler_config = handler_config.copy() - cls = available_handlers.registered_items[handler_config.pop('type')] + cls = available_handlers.registered_items[handler_config.pop("type")] instantiated_handler_registry.unregister_item(handler_name) instance = cls(**handler_config) instantiated_handler_registry.register_item(handler_name, instance) @@ -39,7 +40,7 @@ def update_configuration(config): def flush_events(): for _, handler in instantiated_handler_registry.registered_items.items(): - if hasattr(handler, 'flush'): + if hasattr(handler, "flush"): handler.flush() diff --git a/cloudinit/reporting/events.py b/cloudinit/reporting/events.py index 9afad747..e53186a3 100644 --- a/cloudinit/reporting/events.py +++ b/cloudinit/reporting/events.py @@ -12,12 +12,12 @@ import base64 import os.path import time -from . import instantiated_handler_registry, available_handlers +from . import available_handlers, instantiated_handler_registry -FINISH_EVENT_TYPE = 'finish' -START_EVENT_TYPE = 'start' +FINISH_EVENT_TYPE = "finish" +START_EVENT_TYPE = "start" -DEFAULT_EVENT_ORIGIN = 'cloudinit' +DEFAULT_EVENT_ORIGIN = "cloudinit" class _nameset(set): @@ -33,8 +33,14 @@ status = _nameset(("SUCCESS", "WARN", "FAIL")) class ReportingEvent(object): """Encapsulation of event formatting.""" - def __init__(self, event_type, name, description, - origin=DEFAULT_EVENT_ORIGIN, timestamp=None): + def __init__( + self, + event_type, + name, + description, + origin=DEFAULT_EVENT_ORIGIN, + timestamp=None, + ): self.event_type = event_type self.name = name self.description = description @@ -45,22 +51,28 @@ class ReportingEvent(object): def as_string(self): """The event represented as a string.""" - return '{0}: {1}: {2}'.format( - self.event_type, self.name, self.description) + return "{0}: {1}: {2}".format( + self.event_type, self.name, self.description + ) def as_dict(self): """The event represented as a dictionary.""" - return {'name': self.name, 'description': self.description, - 'event_type': self.event_type, 'origin': self.origin, - 'timestamp': self.timestamp} + return { + "name": self.name, + "description": self.description, + "event_type": self.event_type, + "origin": self.origin, + "timestamp": self.timestamp, + } class FinishReportingEvent(ReportingEvent): - - def __init__(self, name, description, result=status.SUCCESS, - post_files=None): + def __init__( + self, name, description, result=status.SUCCESS, post_files=None + ): super(FinishReportingEvent, self).__init__( - FINISH_EVENT_TYPE, name, description) + FINISH_EVENT_TYPE, name, description + ) self.result = result if post_files is None: post_files = [] @@ -69,15 +81,16 @@ class FinishReportingEvent(ReportingEvent): raise ValueError("Invalid result: %s" % result) def as_string(self): - return '{0}: {1}: {2}: {3}'.format( - self.event_type, self.name, self.result, self.description) + return "{0}: {1}: {2}: {3}".format( + self.event_type, self.name, self.result, self.description + ) def as_dict(self): """The event represented as json friendly.""" data = super(FinishReportingEvent, self).as_dict() - data['result'] = self.result + data["result"] = self.result if self.post_files: - data['files'] = _collect_file_info(self.post_files) + data["files"] = _collect_file_info(self.post_files) return data @@ -110,14 +123,16 @@ def report_event(event, excluded_handler_types=None): handler.publish_event(event) -def report_finish_event(event_name, event_description, - result=status.SUCCESS, post_files=None): +def report_finish_event( + event_name, event_description, result=status.SUCCESS, post_files=None +): """Report a "finish" event. See :py:func:`.report_event` for parameter details. """ - event = FinishReportingEvent(event_name, event_description, result, - post_files=post_files) + event = FinishReportingEvent( + event_name, event_description, result, post_files=post_files + ) return report_event(event) @@ -174,9 +189,16 @@ class ReportEventStack(object): Default value, if None, is an empty list. """ - def __init__(self, name, description, message=None, parent=None, - reporting_enabled=None, result_on_exception=status.FAIL, - post_files=None): + def __init__( + self, + name, + description, + message=None, + parent=None, + reporting_enabled=None, + result_on_exception=status.FAIL, + post_files=None, + ): self.parent = parent self.name = name self.description = description @@ -196,14 +218,22 @@ class ReportEventStack(object): self.reporting_enabled = reporting_enabled if parent: - self.fullname = '/'.join((parent.fullname, name,)) + self.fullname = "/".join( + ( + parent.fullname, + name, + ) + ) else: self.fullname = self.name self.children = {} def __repr__(self): - return ("ReportEventStack(%s, %s, reporting_enabled=%s)" % - (self.name, self.description, self.reporting_enabled)) + return "ReportEventStack(%s, %s, reporting_enabled=%s)" % ( + self.name, + self.description, + self.reporting_enabled, + ) def __enter__(self): self.result = status.SUCCESS @@ -251,8 +281,9 @@ class ReportEventStack(object): if self.parent: self.parent.children[self.name] = (result, msg) if self.reporting_enabled: - report_finish_event(self.fullname, msg, result, - post_files=self.post_files) + report_finish_event( + self.fullname, msg, result, post_files=self.post_files + ) def _collect_file_info(files): @@ -265,8 +296,8 @@ def _collect_file_info(files): else: with open(fname, "rb") as fp: content = base64.b64encode(fp.read()).decode() - ret.append({'path': fname, 'content': content, - 'encoding': 'base64'}) + ret.append({"path": fname, "content": content, "encoding": "base64"}) return ret + # vi: ts=4 expandtab diff --git a/cloudinit/reporting/handlers.py b/cloudinit/reporting/handlers.py index e32739ef..e163e168 100755 --- a/cloudinit/reporting/handlers.py +++ b/cloudinit/reporting/handlers.py @@ -12,8 +12,8 @@ import uuid from datetime import datetime from cloudinit import log as logging +from cloudinit import url_helper, util from cloudinit.registry import DictRegistry -from cloudinit import (url_helper, util) LOG = logging.getLogger(__name__) @@ -55,7 +55,8 @@ class LogHandler(ReportingHandler): def publish_event(self, event): logger = logging.getLogger( - '.'.join(['cloudinit', 'reporting', event.event_type, event.name])) + ".".join(["cloudinit", "reporting", event.event_type, event.name]) + ) logger.log(self.level, event.as_string()) @@ -67,15 +68,25 @@ class PrintHandler(ReportingHandler): class WebHookHandler(ReportingHandler): - def __init__(self, endpoint, consumer_key=None, token_key=None, - token_secret=None, consumer_secret=None, timeout=None, - retries=None): + def __init__( + self, + endpoint, + consumer_key=None, + token_key=None, + token_secret=None, + consumer_secret=None, + timeout=None, + retries=None, + ): super(WebHookHandler, self).__init__() if any([consumer_key, token_key, token_secret, consumer_secret]): self.oauth_helper = url_helper.OauthUrlHelper( - consumer_key=consumer_key, token_key=token_key, - token_secret=token_secret, consumer_secret=consumer_secret) + consumer_key=consumer_key, + token_key=token_key, + token_secret=token_secret, + consumer_secret=consumer_secret, + ) else: self.oauth_helper = None self.endpoint = endpoint @@ -90,9 +101,12 @@ class WebHookHandler(ReportingHandler): readurl = url_helper.readurl try: return readurl( - self.endpoint, data=json.dumps(event.as_dict()), + self.endpoint, + data=json.dumps(event.as_dict()), timeout=self.timeout, - retries=self.retries, ssl_details=self.ssl_details) + retries=self.retries, + ssl_details=self.ssl_details, + ) except Exception: LOG.warning("failed posting event: %s", event.as_string()) @@ -112,33 +126,35 @@ class HyperVKvpReportingHandler(ReportingHandler): For more information, see https://technet.microsoft.com/en-us/library/dn798287.aspx#Linux%20guests """ + HV_KVP_EXCHANGE_MAX_VALUE_SIZE = 2048 # The maximum value size expected in Azure HV_KVP_AZURE_MAX_VALUE_SIZE = 1024 HV_KVP_EXCHANGE_MAX_KEY_SIZE = 512 - HV_KVP_RECORD_SIZE = (HV_KVP_EXCHANGE_MAX_KEY_SIZE + - HV_KVP_EXCHANGE_MAX_VALUE_SIZE) - EVENT_PREFIX = 'CLOUD_INIT' - MSG_KEY = 'msg' - RESULT_KEY = 'result' - DESC_IDX_KEY = 'msg_i' - JSON_SEPARATORS = (',', ':') - KVP_POOL_FILE_GUEST = '/var/lib/hyperv/.kvp_pool_1' + HV_KVP_RECORD_SIZE = ( + HV_KVP_EXCHANGE_MAX_KEY_SIZE + HV_KVP_EXCHANGE_MAX_VALUE_SIZE + ) + EVENT_PREFIX = "CLOUD_INIT" + MSG_KEY = "msg" + RESULT_KEY = "result" + DESC_IDX_KEY = "msg_i" + JSON_SEPARATORS = (",", ":") + KVP_POOL_FILE_GUEST = "/var/lib/hyperv/.kvp_pool_1" _already_truncated_pool_file = False - def __init__(self, - kvp_file_path=KVP_POOL_FILE_GUEST, - event_types=None): + def __init__(self, kvp_file_path=KVP_POOL_FILE_GUEST, event_types=None): super(HyperVKvpReportingHandler, self).__init__() self._kvp_file_path = kvp_file_path HyperVKvpReportingHandler._truncate_guest_pool_file( - self._kvp_file_path) + self._kvp_file_path + ) self._event_types = event_types self.q = queue.Queue() self.incarnation_no = self._get_incarnation_no() - self.event_key_prefix = "{0}|{1}".format(self.EVENT_PREFIX, - self.incarnation_no) + self.event_key_prefix = "{0}|{1}".format( + self.EVENT_PREFIX, self.incarnation_no + ) self.publish_thread = threading.Thread( target=self._publish_event_routine ) @@ -184,7 +200,7 @@ class HyperVKvpReportingHandler(ReportingHandler): def _iterate_kvps(self, offset): """iterate the kvp file from the current offset.""" - with open(self._kvp_file_path, 'rb') as f: + with open(self._kvp_file_path, "rb") as f: fcntl.flock(f, fcntl.LOCK_EX) f.seek(offset) record_data = f.read(self.HV_KVP_RECORD_SIZE) @@ -200,9 +216,9 @@ class HyperVKvpReportingHandler(ReportingHandler): CLOUD_INIT|<incarnation number>|<event_type>|<event_name>|<uuid> [|subevent_index] """ - return "{0}|{1}|{2}|{3}".format(self.event_key_prefix, - event.event_type, event.name, - uuid.uuid4()) + return "{0}|{1}|{2}|{3}".format( + self.event_key_prefix, event.event_type, event.name, uuid.uuid4() + ) def _encode_kvp_item(self, key, value): data = struct.pack( @@ -220,19 +236,27 @@ class HyperVKvpReportingHandler(ReportingHandler): record_data_len = len(record_data) if record_data_len != self.HV_KVP_RECORD_SIZE: raise ReportException( - "record_data len not correct {0} {1}." - .format(record_data_len, self.HV_KVP_RECORD_SIZE)) - k = (record_data[0:self.HV_KVP_EXCHANGE_MAX_KEY_SIZE].decode('utf-8') - .strip('\x00')) + "record_data len not correct {0} {1}.".format( + record_data_len, self.HV_KVP_RECORD_SIZE + ) + ) + k = ( + record_data[0 : self.HV_KVP_EXCHANGE_MAX_KEY_SIZE] + .decode("utf-8") + .strip("\x00") + ) v = ( record_data[ - self.HV_KVP_EXCHANGE_MAX_KEY_SIZE:self.HV_KVP_RECORD_SIZE - ].decode('utf-8').strip('\x00')) + self.HV_KVP_EXCHANGE_MAX_KEY_SIZE : self.HV_KVP_RECORD_SIZE + ] + .decode("utf-8") + .strip("\x00") + ) - return {'key': k, 'value': v} + return {"key": k, "value": v} def _append_kvp_item(self, record_data): - with open(self._kvp_file_path, 'ab') as f: + with open(self._kvp_file_path, "ab") as f: fcntl.flock(f, fcntl.LOCK_EX) for data in record_data: f.write(data) @@ -242,22 +266,25 @@ class HyperVKvpReportingHandler(ReportingHandler): def _break_down(self, key, meta_data, description): del meta_data[self.MSG_KEY] des_in_json = json.dumps(description) - des_in_json = des_in_json[1:(len(des_in_json) - 1)] + des_in_json = des_in_json[1 : (len(des_in_json) - 1)] i = 0 result_array = [] - message_place_holder = "\"" + self.MSG_KEY + "\":\"\"" + message_place_holder = '"' + self.MSG_KEY + '":""' while True: meta_data[self.DESC_IDX_KEY] = i - meta_data[self.MSG_KEY] = '' - data_without_desc = json.dumps(meta_data, - separators=self.JSON_SEPARATORS) + meta_data[self.MSG_KEY] = "" + data_without_desc = json.dumps( + meta_data, separators=self.JSON_SEPARATORS + ) room_for_desc = ( - self.HV_KVP_AZURE_MAX_VALUE_SIZE - - len(data_without_desc) - 8) + self.HV_KVP_AZURE_MAX_VALUE_SIZE - len(data_without_desc) - 8 + ) value = data_without_desc.replace( message_place_holder, '"{key}":"{desc}"'.format( - key=self.MSG_KEY, desc=des_in_json[:room_for_desc])) + key=self.MSG_KEY, desc=des_in_json[:room_for_desc] + ), + ) subkey = "{}|{}".format(key, i) result_array.append(self._encode_kvp_item(subkey, value)) i += 1 @@ -276,8 +303,9 @@ class HyperVKvpReportingHandler(ReportingHandler): meta_data = { "name": event.name, "type": event.event_type, - "ts": (datetime.utcfromtimestamp(event.timestamp) - .isoformat() + 'Z'), + "ts": ( + datetime.utcfromtimestamp(event.timestamp).isoformat() + "Z" + ), } if hasattr(event, self.RESULT_KEY): meta_data[self.RESULT_KEY] = event.result @@ -327,14 +355,14 @@ class HyperVKvpReportingHandler(ReportingHandler): self.q.put(event) def flush(self): - LOG.debug('HyperVReportingHandler flushing remaining events') + LOG.debug("HyperVReportingHandler flushing remaining events") self.q.join() available_handlers = DictRegistry() -available_handlers.register_item('log', LogHandler) -available_handlers.register_item('print', PrintHandler) -available_handlers.register_item('webhook', WebHookHandler) -available_handlers.register_item('hyperv', HyperVKvpReportingHandler) +available_handlers.register_item("log", LogHandler) +available_handlers.register_item("print", PrintHandler) +available_handlers.register_item("webhook", WebHookHandler) +available_handlers.register_item("hyperv", HyperVKvpReportingHandler) # vi: ts=4 expandtab |