diff --git a/pyproject.toml b/pyproject.toml index 300a4ff84..f6b414dbb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,6 +33,7 @@ enable = [ "R1735", # use-dict-literal "W0102", # dangerous-default-value "W0108", # unnecessary-lambda + "W0201", # attribute-defined-outside-init "W0612", # unused-variable "W0707", # raise-missing-from "W1202", # logging-format-interpolation diff --git a/src/ansible_runner/config/_base.py b/src/ansible_runner/config/_base.py index 044a31f87..e0915748e 100644 --- a/src/ansible_runner/config/_base.py +++ b/src/ansible_runner/config/_base.py @@ -16,6 +16,9 @@ # specific language governing permissions and limitations # under the License. # + +# pylint: disable=W0201 + import json import logging import os diff --git a/src/ansible_runner/config/ansible_cfg.py b/src/ansible_runner/config/ansible_cfg.py index 472a4ae63..5c0637fdb 100644 --- a/src/ansible_runner/config/ansible_cfg.py +++ b/src/ansible_runner/config/ansible_cfg.py @@ -16,6 +16,9 @@ # specific language governing permissions and limitations # under the License. # + +# pylint: disable=W0201 + import logging from ansible_runner.config._base import BaseConfig, BaseExecutionMode diff --git a/src/ansible_runner/config/command.py b/src/ansible_runner/config/command.py index b4789a93e..978e522ae 100644 --- a/src/ansible_runner/config/command.py +++ b/src/ansible_runner/config/command.py @@ -16,6 +16,9 @@ # specific language governing permissions and limitations # under the License. # + +# pylint: disable=W0201 + import logging import os diff --git a/src/ansible_runner/config/doc.py b/src/ansible_runner/config/doc.py index 777d3e2a4..b99e7711c 100644 --- a/src/ansible_runner/config/doc.py +++ b/src/ansible_runner/config/doc.py @@ -16,6 +16,9 @@ # specific language governing permissions and limitations # under the License. # + +# pylint: disable=W0201 + import logging from ansible_runner.config._base import BaseConfig, BaseExecutionMode diff --git a/src/ansible_runner/config/inventory.py b/src/ansible_runner/config/inventory.py index 9d5a49fca..080a4bc2e 100644 --- a/src/ansible_runner/config/inventory.py +++ b/src/ansible_runner/config/inventory.py @@ -16,6 +16,9 @@ # specific language governing permissions and limitations # under the License. # + +# pylint: disable=W0201 + import logging from ansible_runner.config._base import BaseConfig, BaseExecutionMode from ansible_runner.exceptions import ConfigurationError diff --git a/src/ansible_runner/config/runner.py b/src/ansible_runner/config/runner.py index bf6abf0f5..b2f454314 100644 --- a/src/ansible_runner/config/runner.py +++ b/src/ansible_runner/config/runner.py @@ -16,6 +16,9 @@ # specific language governing permissions and limitations # under the License. # + +# pylint: disable=W0201 + import json import logging import os diff --git a/src/ansible_runner/display_callback/callback/awx_display.py b/src/ansible_runner/display_callback/callback/awx_display.py index 98dc100d6..d5e167308 100644 --- a/src/ansible_runner/display_callback/callback/awx_display.py +++ b/src/ansible_runner/display_callback/callback/awx_display.py @@ -126,6 +126,7 @@ class EventContext: def __init__(self): self.display_lock = multiprocessing.RLock() + self._global_ctx = {} self._local = threading.local() if os.getenv('AWX_ISOLATED_DATA_DIR', False): self.cache = IsolatedFileWrite() @@ -151,14 +152,11 @@ def get_local(self): return getattr(getattr(self, '_local', None), '_ctx', {}) def add_global(self, **kwargs): - if not hasattr(self, '_global_ctx'): - self._global_ctx = {} self._global_ctx.update(kwargs) def remove_global(self, **kwargs): - if hasattr(self, '_global_ctx'): - for key in kwargs.keys(): - self._global_ctx.pop(key, None) + for key in kwargs.keys(): + self._global_ctx.pop(key, None) @contextlib.contextmanager def set_global(self, **kwargs): @@ -169,7 +167,7 @@ def set_global(self, **kwargs): self.remove_global(**kwargs) def get_global(self): - return getattr(self, '_global_ctx', {}) + return self._global_ctx def get(self): ctx = {} @@ -349,6 +347,9 @@ def __init__(self): self.play_uuids = set() self.duplicate_play_counts = collections.defaultdict(lambda: 1) + # NOTE: Ansible doesn't generate a UUID for playbook_on_start so do it for them. + self.playbook_uuid = str(uuid.uuid4()) + @contextlib.contextmanager def capture_event_data(self, event, **event_data): event_data.setdefault('uuid', str(uuid.uuid4())) @@ -381,8 +382,6 @@ def capture_event_data(self, event, **event_data): event_context.remove_local(event=None, **event_data) def set_playbook(self, playbook): - # NOTE: Ansible doesn't generate a UUID for playbook_on_start so do it for them. - self.playbook_uuid = str(uuid.uuid4()) file_name = getattr(playbook, '_file_name', '???') event_context.add_global(playbook=file_name, playbook_uuid=self.playbook_uuid) self.clear_play() diff --git a/src/ansible_runner/runner.py b/src/ansible_runner/runner.py index 1edca547e..1b401863f 100644 --- a/src/ansible_runner/runner.py +++ b/src/ansible_runner/runner.py @@ -38,6 +38,7 @@ def __init__(self, config, cancel_callback=None, remove_partials=True, event_han self.status = "unstarted" self.rc = None self.remove_partials = remove_partials + self.last_stdout_update = 0.0 # default runner mode to pexpect self.runner_mode = self.config.runner_mode if hasattr(self.config, 'runner_mode') else 'pexpect' diff --git a/src/ansible_runner/streaming.py b/src/ansible_runner/streaming.py index e05bd8b1e..3736b8f4f 100644 --- a/src/ansible_runner/streaming.py +++ b/src/ansible_runner/streaming.py @@ -31,6 +31,9 @@ def default(self, obj): class MockConfig: def __init__(self, settings): self.settings = settings + self.command = None + self.cwd = None + self.env = None class Transmitter: