Hello community, here is the log from the commit of package python-ara for openSUSE:Factory checked in at 2020-11-12 22:46:00 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-ara (Old) and /work/SRC/openSUSE:Factory/.python-ara.new.24930 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-ara" Thu Nov 12 22:46:00 2020 rev:10 rq:847969 version:1.5.3 Changes: -------- --- /work/SRC/openSUSE:Factory/python-ara/python-ara.changes 2020-09-30 19:54:39.592799111 +0200 +++ /work/SRC/openSUSE:Factory/.python-ara.new.24930/python-ara.changes 2020-11-12 22:46:02.942558759 +0100 @@ -1,0 +2,12 @@ +Thu Nov 12 03:36:12 UTC 2020 - Steve Kowalik <[email protected]> + +- Update to 1.5.3: + * Significant performance improvement by running non-blocking API calls in threads + * Handler tasks are now also recorded in addition to regular tasks + * API + + Add support for searching handler tasks (ex: /api/v1/tasks?handler=true) + * UI + + Hosts in the playbook report are now sorted alphabetically by hostname + + Added a column to display the number of tasks in the playbook summary + +------------------------------------------------------------------- Old: ---- ara-1.5.1.tar.gz New: ---- ara-1.5.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-ara.spec ++++++ --- /var/tmp/diff_new_pack.qxgTDJ/_old 2020-11-12 22:46:03.646559493 +0100 +++ /var/tmp/diff_new_pack.qxgTDJ/_new 2020-11-12 22:46:03.650559498 +0100 @@ -27,7 +27,7 @@ %define skip_python2 1 %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-ara -Version: 1.5.1 +Version: 1.5.3 Release: 0 Summary: ARA Records Ansible License: GPL-3.0-or-later ++++++ ara-1.5.1.tar.gz -> ara-1.5.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/PKG-INFO new/ara-1.5.3/PKG-INFO --- old/ara-1.5.1/PKG-INFO 2020-09-23 20:26:52.000000000 +0200 +++ new/ara-1.5.3/PKG-INFO 2020-10-24 00:52:20.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: ara -Version: 1.5.1 +Version: 1.5.3 Summary: ARA Records Ansible Home-page: https://github.com/ansible-community/ara Author: OpenStack Community diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/ara/api/filters.py new/ara-1.5.3/ara/api/filters.py --- old/ara-1.5.1/ara/api/filters.py 2020-09-23 20:25:58.000000000 +0200 +++ new/ara-1.5.3/ara/api/filters.py 2020-10-24 00:51:11.000000000 +0200 @@ -107,6 +107,7 @@ name = django_filters.CharFilter(field_name="name", lookup_expr="icontains") action = django_filters.CharFilter(field_name="action", lookup_expr="iexact") path = django_filters.CharFilter(field_name="file__path", lookup_expr="icontains") + handler = django_filters.BooleanFilter(field_name="handler", lookup_expr="exact") # fmt: off order = django_filters.OrderingFilter( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/ara/clients/http.py new/ara-1.5.3/ara/clients/http.py --- old/ara-1.5.1/ara/clients/http.py 2020-09-23 20:25:58.000000000 +0200 +++ new/ara-1.5.3/ara/clients/http.py 2020-10-24 00:51:11.000000000 +0200 @@ -36,7 +36,7 @@ self.endpoint = endpoint.rstrip("/") self.auth = auth - self.timeout = timeout + self.timeout = int(timeout) self.verify = verify self.headers = { "User-Agent": "ara-http-client_%s" % CLIENT_VERSION, @@ -80,7 +80,7 @@ self.log = logging.getLogger(__name__) self.endpoint = endpoint self.auth = auth - self.timeout = timeout + self.timeout = int(timeout) self.verify = verify self.client = HttpClient(endpoint=self.endpoint, timeout=self.timeout, auth=self.auth, verify=self.verify) active_client._instance = weakref.ref(self) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/ara/plugins/callback/ara_default.py new/ara-1.5.3/ara/plugins/callback/ara_default.py --- old/ara-1.5.1/ara/plugins/callback/ara_default.py 2020-09-23 20:25:58.000000000 +0200 +++ new/ara-1.5.3/ara/plugins/callback/ara_default.py 2020-10-24 00:51:11.000000000 +0200 @@ -21,6 +21,7 @@ import json import logging import os +from concurrent.futures import ThreadPoolExecutor from ansible import __version__ as ansible_version from ansible.parsing.ajson import AnsibleJSONEncoder @@ -174,7 +175,13 @@ def __init__(self): super(CallbackModule, self).__init__() self.log = logging.getLogger("ara.plugins.callback.default") + # These are configured in self.set_options self.client = None + self.thread_count = None + self.global_threads = None + # Need individual threads for tasks to ensure all results are saved before moving on to next task + self.task_threads = None + self.ignored_facts = [] self.ignored_arguments = [] self.ignored_files = [] @@ -213,6 +220,14 @@ verify=False if insecure else True, ) + # TODO: Consider un-hardcoding this and plumbing pool_maxsize to requests.adapters.HTTPAdapter. + # In the meantime default to 4 so we don't go above requests.adapters.DEFAULT_POOLSIZE. + # Otherwise we can hit "urllib3.connectionpool: Connection pool is full" + # TODO: Using >= 2 threads with the offline client can result in execution getting locked up + self.thread_count = 1 if client == "offline" else 4 + self.global_threads = ThreadPoolExecutor(max_workers=self.thread_count) + self.log.debug("working with %s thread(s)" % self.thread_count) + def v2_playbook_on_start(self, playbook): self.log.debug("v2_playbook_on_start") @@ -260,7 +275,7 @@ ) # Record the playbook file - self._get_or_create_file(path, content) + self.global_threads.submit(self._get_or_create_file, path, content) return self.playbook @@ -290,7 +305,7 @@ # Record all the files involved in the play for path in play._loader._FILE_CACHE.keys(): - self._get_or_create_file(path) + self.global_threads.submit(self._get_or_create_file, path) # Create the play self.play = self.client.post( @@ -304,9 +319,15 @@ return self.play + def v2_playbook_on_handler_task_start(self, task): + self.log.debug("v2_playbook_on_handler_task_start") + # TODO: Why doesn't `v2_playbook_on_handler_task_start` have is_conditional ? + self.v2_playbook_on_task_start(task, False, handler=True) + def v2_playbook_on_task_start(self, task, is_conditional, handler=False): self.log.debug("v2_playbook_on_task_start") self._end_task() + self.task_threads = ThreadPoolExecutor(max_workers=self.thread_count) pathspec = task.get_path() if pathspec: @@ -341,16 +362,16 @@ self.result_started[host.get_name()] = datetime.datetime.now().isoformat() def v2_runner_on_ok(self, result, **kwargs): - self._load_result(result, "ok", **kwargs) + self.task_threads.submit(self._load_result, result, "ok", **kwargs) def v2_runner_on_unreachable(self, result, **kwargs): - self._load_result(result, "unreachable", **kwargs) + self.task_threads.submit(self._load_result, result, "unreachable", **kwargs) def v2_runner_on_failed(self, result, **kwargs): - self._load_result(result, "failed", **kwargs) + self.task_threads.submit(self._load_result, result, "failed", **kwargs) def v2_runner_on_skipped(self, result, **kwargs): - self._load_result(result, "skipped", **kwargs) + self.task_threads.submit(self._load_result, result, "skipped", **kwargs) def v2_playbook_on_stats(self, stats): self.log.debug("v2_playbook_on_stats") @@ -361,15 +382,25 @@ def _end_task(self): if self.task is not None: - self.client.patch( - "/api/v1/tasks/%s" % self.task["id"], status="completed", ended=datetime.datetime.now().isoformat() + self.task_threads.submit( + self.client.patch, + "/api/v1/tasks/%s" % self.task["id"], + status="completed", + ended=datetime.datetime.now().isoformat(), ) + # Flush threads before moving on to next task to make sure all results are saved + self.log.debug("waiting for task threads...") + self.task_threads.shutdown(wait=True) + self.task_threads = None self.task = None def _end_play(self): if self.play is not None: - self.client.patch( - "/api/v1/plays/%s" % self.play["id"], status="completed", ended=datetime.datetime.now().isoformat() + self.global_threads.submit( + self.client.patch, + "/api/v1/plays/%s" % self.play["id"], + status="completed", + ended=datetime.datetime.now().isoformat(), ) self.play = None @@ -380,9 +411,14 @@ else: status = "completed" - self.playbook = self.client.patch( - "/api/v1/playbooks/%s" % self.playbook["id"], status=status, ended=datetime.datetime.now().isoformat() + self.global_threads.submit( + self.client.patch, + "/api/v1/playbooks/%s" % self.playbook["id"], + status=status, + ended=datetime.datetime.now().isoformat(), ) + self.log.debug("waiting for global threads...") + self.global_threads.shutdown(wait=True) def _set_playbook_name(self, name): if self.playbook["name"] != name: @@ -477,7 +513,9 @@ for hostname in hosts: host = self._get_or_create_host(hostname) host_stats = stats.summarize(hostname) - self.client.patch( + + self.global_threads.submit( + self.client.patch, "/api/v1/hosts/%s" % host["id"], changed=host_stats["changed"], unreachable=host_stats["unreachable"], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/ara/ui/management/commands/generate.py new/ara-1.5.3/ara/ui/management/commands/generate.py --- old/ara-1.5.1/ara/ui/management/commands/generate.py 2020-09-23 20:25:58.000000000 +0200 +++ new/ara-1.5.3/ara/ui/management/commands/generate.py 2020-10-24 00:51:11.000000000 +0200 @@ -61,7 +61,7 @@ for pb in query: playbook = serializers.DetailedPlaybookSerializer(pb) hosts = serializers.ListHostSerializer( - models.Host.objects.filter(playbook=playbook.data["id"]).all(), many=True + models.Host.objects.filter(playbook=playbook.data["id"]).order_by("name").all(), many=True ) files = serializers.ListFileSerializer( models.File.objects.filter(playbook=playbook.data["id"]).all(), many=True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/ara/ui/templates/index.html new/ara-1.5.3/ara/ui/templates/index.html --- old/ara-1.5.1/ara/ui/templates/index.html 2020-09-23 20:25:58.000000000 +0200 +++ new/ara-1.5.3/ara/ui/templates/index.html 2020-10-24 00:51:11.000000000 +0200 @@ -106,6 +106,7 @@ <th role="columnheader" scope="col">Labels</th> <th role="columnheader" scope="col" class="pf-m-fit-content">Hosts</th> <th role="columnheader" scope="col" class="pf-m-fit-content">Plays</th> + <th role="columnheader" scope="col" class="pf-m-fit-content">Tasks</th> <th role="columnheader" scope="col" class="pf-m-fit-content">Results</th> <th role="columnheader" scope="col" class="pf-m-fit-content">Files</th> <th role="columnheader" scope="col" class="pf-m-fit-content">Records</th> @@ -173,6 +174,9 @@ <td role="cell" data-label="Plays" class="pf-m-fit-content"> <a href="{% if page != "index" %}../{% endif %}playbooks/{{ playbook.id }}.html#plays">{{ playbook.items.plays }}</a> </td> + <td role="cell" data-label="Tasks" class="pf-m-fit-content"> + <a href="{% if page != "index" %}../{% endif %}playbooks/{{ playbook.id }}.html#results">{{ playbook.items.tasks }}</a> + </td> <td role="cell" data-label="Results" class="pf-m-fit-content"> <a href="{% if page != "index" %}../{% endif %}playbooks/{{ playbook.id }}.html#results">{{ playbook.items.results }}</a> </td> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/ara/ui/templates/partials/playbook_card.html new/ara-1.5.3/ara/ui/templates/partials/playbook_card.html --- old/ara-1.5.1/ara/ui/templates/partials/playbook_card.html 2020-09-23 20:25:58.000000000 +0200 +++ new/ara-1.5.3/ara/ui/templates/partials/playbook_card.html 2020-10-24 00:51:11.000000000 +0200 @@ -55,6 +55,11 @@ </div> <div class="pf-c-data-list__cell pf-m-flex-1"> <div style="padding-top:1em;"> + <a href="{% if page != "index" %}../{% endif %}playbooks/{{ playbook.id }}.html#results">{{ playbook.items.tasks }} Tasks</a> + </div> + </div> + <div class="pf-c-data-list__cell pf-m-flex-1"> + <div style="padding-top:1em;"> <a href="{% if page != "index" %}../{% endif %}playbooks/{{ playbook.id }}.html#results">{{ playbook.items.results }} results</a> </div> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/ara/ui/views.py new/ara-1.5.3/ara/ui/views.py --- old/ara-1.5.1/ara/ui/views.py 2020-09-23 20:25:58.000000000 +0200 +++ new/ara-1.5.3/ara/ui/views.py 2020-10-24 00:51:11.000000000 +0200 @@ -71,7 +71,7 @@ def get(self, request, *args, **kwargs): playbook = serializers.DetailedPlaybookSerializer(self.get_object()) hosts = serializers.ListHostSerializer( - models.Host.objects.filter(playbook=playbook.data["id"]).all(), many=True + models.Host.objects.filter(playbook=playbook.data["id"]).order_by("name").all(), many=True ) files = serializers.ListFileSerializer( models.File.objects.filter(playbook=playbook.data["id"]).all(), many=True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/ara.egg-info/PKG-INFO new/ara-1.5.3/ara.egg-info/PKG-INFO --- old/ara-1.5.1/ara.egg-info/PKG-INFO 2020-09-23 20:26:51.000000000 +0200 +++ new/ara-1.5.3/ara.egg-info/PKG-INFO 2020-10-24 00:52:20.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: ara -Version: 1.5.1 +Version: 1.5.3 Summary: ARA Records Ansible Home-page: https://github.com/ansible-community/ara Author: OpenStack Community diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/ara.egg-info/SOURCES.txt new/ara-1.5.3/ara.egg-info/SOURCES.txt --- old/ara-1.5.1/ara.egg-info/SOURCES.txt 2020-09-23 20:26:52.000000000 +0200 +++ new/ara-1.5.3/ara.egg-info/SOURCES.txt 2020-10-24 00:52:20.000000000 +0200 @@ -229,6 +229,8 @@ tests/zuul_post_with_postgresql.yaml tests/zuul_pre_multinode_networking.yaml tests/zuul_publish_dockerhub.yaml +tests/integration/benchmark.yaml +tests/integration/benchmark_tasks.yaml tests/integration/failed.yaml tests/integration/hosts.yaml tests/integration/import.yaml @@ -244,6 +246,7 @@ tests/integration/roles/included-role/tasks/included-task.yaml tests/integration/roles/included-role/tasks/main.yaml tests/integration/roles/smoke-tests/defaults/main.yaml +tests/integration/roles/smoke-tests/handlers/main.yaml tests/integration/roles/smoke-tests/tasks/ara-ops.yaml tests/integration/roles/smoke-tests/tasks/main.yaml tests/integration/roles/smoke-tests/tasks/test-ops.yaml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/ara.egg-info/pbr.json new/ara-1.5.3/ara.egg-info/pbr.json --- old/ara-1.5.1/ara.egg-info/pbr.json 2020-09-23 20:26:51.000000000 +0200 +++ new/ara-1.5.3/ara.egg-info/pbr.json 2020-10-24 00:52:20.000000000 +0200 @@ -1 +1 @@ -{"git_version": "9c79cf2", "is_release": true} \ No newline at end of file +{"git_version": "bba0f81", "is_release": true} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/doc/source/changelog-release-notes.rst new/ara-1.5.3/doc/source/changelog-release-notes.rst --- old/ara-1.5.1/doc/source/changelog-release-notes.rst 2020-09-23 20:25:58.000000000 +0200 +++ new/ara-1.5.3/doc/source/changelog-release-notes.rst 2020-10-24 00:51:11.000000000 +0200 @@ -4,6 +4,56 @@ Changelog and release notes *************************** +1.5.2 (2020-10-16) +################## + +https://github.com/ansible-community/ara/releases/tag/1.5.2 + +.. code-block:: text + + This is the 1.5.2 stable release of ARA. + + Changes since 1.5.1: + + Ansible callback plugin + ----------------------- + + - Significant performance improvement by running non-blocking API calls in threads + https://github.com/ansible-community/ara/issues/171 + - Handler tasks are now also recorded in addition to regular tasks + https://github.com/ansible-community/ara/issues/178 + + API + --- + + - Add support for searching handler tasks (ex: /api/v1/tasks?handler=true) + + UI + -- + + - Hosts in the playbook report are now sorted alphabetically by hostname + - Added a column to display the number of tasks in the playbook summary + +1.5.1 (2020-09-23) +################## + +https://github.com/ansible-community/ara/releases/tag/1.5.1 + +.. code-block:: text + + This is a re-release of the 1.5.0 stable version of ara in order to fix + a release issue to PyPi. + +1.5.0.1 (2020-09-23) +#################### + +https://github.com/ansible-community/ara/releases/tag/1.5.0.1 + +.. code-block:: text + + This is a re-release of the 1.5.0 stable version of ara in order to fix + a release issue to PyPi. + 1.5.0 (2020-09-23) ################## diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/doc/source/distributed-sqlite-backend.rst new/ara-1.5.3/doc/source/distributed-sqlite-backend.rst --- old/ara-1.5.1/doc/source/distributed-sqlite-backend.rst 2020-09-23 20:25:58.000000000 +0200 +++ new/ara-1.5.3/doc/source/distributed-sqlite-backend.rst 2020-10-24 00:51:11.000000000 +0200 @@ -48,32 +48,32 @@ /var/www/logs/ ├── 1 - │ ├── ara-api + │ ├── ara-report │ │ └── ansible.sqlite │ └── console.txt ├── 2 │ ├── logs.tar.gz │ └── some │ └── path - │ └── ara-api + │ └── ara-report │ └── ansible.sqlite └── 3 ├── builds.txt ├── dev - │ └── ara-api + │ └── ara-report │ └── ansible.sqlite └── prod - └── ara-api + └── ara-report └── ansible.sqlite With the above example file tree, a single instance of the API server with the distributed sqlite backend enabled would be able to respond to queries at the following endpoints: -- http://example.org/1/ara-api -- http://example.org/2/some/path/ara-api -- http://example.org/3/dev/ara-api -- http://example.org/3/prod/ara-api +- http://example.org/1/ara-report +- http://example.org/2/some/path/ara-report +- http://example.org/3/dev/ara-report +- http://example.org/3/prod/ara-report Configuration ------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/tests/integration/benchmark.yaml new/ara-1.5.3/tests/integration/benchmark.yaml --- old/ara-1.5.1/tests/integration/benchmark.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/ara-1.5.3/tests/integration/benchmark.yaml 2020-10-24 00:51:11.000000000 +0200 @@ -0,0 +1,29 @@ +# Copyright (c) 2020 The ARA Records Ansible authors +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +- name: Create many hosts + hosts: localhost + gather_facts: no + vars: + benchmark_host_count: 25 + tasks: + - name: Add a host to the inventory + add_host: + ansible_connection: local + hostname: "host-{{ item }}" + groups: benchmark + with_sequence: start=1 end={{ benchmark_host_count }} + +- name: Run tasks on many hosts + hosts: benchmark + vars: + benchmark_task_file: "{{ playbook_dir }}/benchmark_tasks.yaml" + # Run N tasks per host + benchmark_task_count: 50 + # Off by default to prevent accidental load spike on localhost + benchmark_gather_facts: no + gather_facts: "{{ benchmark_gather_facts }}" + tasks: + - name: Include a task file + include_tasks: "{{ benchmark_task_file }}" + with_sequence: start=1 end={{ benchmark_task_count }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/tests/integration/benchmark_tasks.yaml new/ara-1.5.3/tests/integration/benchmark_tasks.yaml --- old/ara-1.5.1/tests/integration/benchmark_tasks.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/ara-1.5.3/tests/integration/benchmark_tasks.yaml 2020-10-24 00:51:11.000000000 +0200 @@ -0,0 +1,8 @@ +# Copyright (c) 2020 The ARA Records Ansible authors +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +# These are tasks meant to be imported by benchmark.yaml + +- name: Run a task + debug: + msg: "{{ inventory_hostname }} running task #{{ item }}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/tests/integration/roles/smoke-tests/handlers/main.yaml new/ara-1.5.3/tests/integration/roles/smoke-tests/handlers/main.yaml --- old/ara-1.5.1/tests/integration/roles/smoke-tests/handlers/main.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/ara-1.5.3/tests/integration/roles/smoke-tests/handlers/main.yaml 2020-10-24 00:51:11.000000000 +0200 @@ -0,0 +1,7 @@ +# Copyright (c) 2020 The ARA Records Ansible authors +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +- name: handler + debug: + msg: hi, this is a handler task + register: _handler_run diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ara-1.5.1/tests/integration/roles/smoke-tests/tasks/test-ops.yaml new/ara-1.5.3/tests/integration/roles/smoke-tests/tasks/test-ops.yaml --- old/ara-1.5.1/tests/integration/roles/smoke-tests/tasks/test-ops.yaml 2020-09-23 20:25:58.000000000 +0200 +++ new/ara-1.5.3/tests/integration/roles/smoke-tests/tasks/test-ops.yaml 2020-10-24 00:51:11.000000000 +0200 @@ -49,3 +49,16 @@ - name: Test for XSS command: echo "<script>alert(document.cookie)</script>" changed_when: False + +- name: Notify something for a handler task + command: /bin/true + notify: + - handler + +- name: Flush handlers + meta: flush_handlers + +- name: Assert that handler task has run + assert: + that: + - _handler_run is success _______________________________________________ openSUSE Commits mailing list -- [email protected] To unsubscribe, email [email protected] List Netiquette: https://en.opensuse.org/openSUSE:Mailing_list_netiquette List Archives: https://lists.opensuse.org/archives/list/[email protected]
