From 68cbbe24bcd537921d796732d4040b6ed17bb571 Mon Sep 17 00:00:00 2001 From: David Moreau Simard Date: Tue, 19 Jun 2018 17:26:45 -0400 Subject: [PATCH] First iteration of callback using API - Remove mockdata.py (using the callback is better) - Add first iteration of callback Note: This will eventually be moved, it's here for simplicity - Add test playbook/role to exercise the callback Note: The callback will be moved to ara-plugins Change-Id: I8f590be4cfafd4714f40f4165e2973cb803b8756 --- README.rst | 15 +- doc/source/_static/screenshot.png | Bin 46027 -> 52725 bytes hacking/callback_plugins/ara.py | 262 +++++++++++++++++++++ hacking/roles/hacking/defaults/main.yml | 19 ++ hacking/roles/hacking/handlers/main.yml | 22 ++ hacking/roles/hacking/meta/main.yml | 42 ++++ hacking/roles/hacking/tasks/main.yml | 32 +++ hacking/roles/hacking/templates/hacking.j2 | 1 + hacking/test-playbook.yml | 22 ++ standalone/mockdata.py | 76 ------ tox.ini | 8 + 11 files changed, 416 insertions(+), 83 deletions(-) create mode 100644 hacking/callback_plugins/ara.py create mode 100644 hacking/roles/hacking/defaults/main.yml create mode 100644 hacking/roles/hacking/handlers/main.yml create mode 100644 hacking/roles/hacking/meta/main.yml create mode 100644 hacking/roles/hacking/tasks/main.yml create mode 100644 hacking/roles/hacking/templates/hacking.j2 create mode 100644 hacking/test-playbook.yml delete mode 100644 standalone/mockdata.py diff --git a/README.rst b/README.rst index b4d44d1..4e7eead 100644 --- a/README.rst +++ b/README.rst @@ -24,19 +24,18 @@ This is python3 only right now. **TL;DR**: Using tox is convenient for the time being:: # Use the source Luke - git clone https://github.com/dmsimard/ara-django - cd ara-django + git clone https://github.com/openstack/ara-server + cd ara-server # Install tox pip install tox # (or the tox python library from your distro packages) + # Create data from a test playbook and callback + tox -e ansible-playbook + # Run test server -> http://127.0.0.1:8000/api/v1/ tox -e runserver - # Create mock data - source .tox/runserver/bin/activate - python standalone/mockdata.py - # Run actual tests or get coverage tox -e pep8 tox -e py35 @@ -45,12 +44,14 @@ This is python3 only right now. # Build docs tox -e docs +See the ``hacking`` directory for testing resources. + Contributors ============ See contributors on GitHub_. -.. _GitHub: https://github.com/dmsimard/ara-django/graphs/contributors +.. _GitHub: https://github.com/openstack/ara-server/graphs/contributors Copyright ========= diff --git a/doc/source/_static/screenshot.png b/doc/source/_static/screenshot.png index 99aa9763cf3c9e80093c0162a9fa355cc2692cda..06dbe786a19a322db0b70058a2b000e577397b2e 100644 GIT binary patch literal 52725 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
gn28 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 NxQL8!uAuJQ{|AXIMF9W+ literal 46027 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 obL)3b!0iQuP3$)lTh6TN&grg$(kZ9i_^S-r+. + +from __future__ import (absolute_import, division, print_function) + +import datetime +import json +import logging +import os +import six + +from ansible import __version__ as ansible_version +from ansible.plugins.callback import CallbackBase +# To retrieve Ansible CLI options +try: + from __main__ import cli +except ImportError: + cli = None + +try: + # Default to offline API client + from django import setup as django_setup + from django.core.management import execute_from_command_line + from django.test import Client as offline_client + + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ara.settings') + + # Automatically create the database and run migrations (is there a better way?) + execute_from_command_line(['django', 'migrate']) + + # Set up the things Django needs + django_setup() + +except ImportError: + # Default to online API client + # TODO + pass + + +class AraOfflineClient(object): + def __init__(self): + self.log = logging.getLogger('ara.client.offline') + self.client = offline_client() + + def _request(self, method, endpoint, **kwargs): + func = getattr(self.client, method) + response = func( + endpoint, + json.dumps(kwargs), + content_type='application/json' + ) + + self.log.debug('HTTP {status}: {method} on {endpoint}'.format( + status=response.status_code, + method=method, + endpoint=endpoint + )) + + if response.status_code not in [200, 201]: + self.log.error( + 'Failed to {method} on {endpoint}: {content}'.format( + method=method, + endpoint=endpoint, + content=kwargs + ) + ) + self.log.fatal(response.content) + + return response.json() + + def get(self, endpoint, **kwargs): + return self._request('get', endpoint, **kwargs) + + def patch(self, endpoint, **kwargs): + return self._request('patch', endpoint, **kwargs) + + def post(self, endpoint, **kwargs): + return self._request('post', endpoint, **kwargs) + + def put(self, endpoint, **kwargs): + return self._request('put', endpoint, **kwargs) + + def delete(self, endpoint, **kwargs): + return self._request('delete', endpoint, **kwargs) + + +class CallbackModule(CallbackBase): + """ + Saves data from an Ansible run into a database + """ + CALLBACK_VERSION = 2.0 + CALLBACK_TYPE = 'awesome' + CALLBACK_NAME = 'ara' + + def __init__(self): + super(CallbackModule, self).__init__() + self.log = logging.getLogger('ara.callback') + + # TODO: logic for picking between offline and online client + self.client = AraOfflineClient() + + self.result = None + self.task = None + self.play = None + self.playbook = None + self.stats = None + self.loop_items = [] + + if cli: + self._options = cli.options + else: + self._options = None + + def v2_playbook_on_start(self, playbook): + self.log.debug('v2_playbook_on_start') + + path = os.path.abspath(playbook._file_name) + if self._options is not None: + parameters = self._options.__dict__.copy() + else: + parameters = {} + + # Create the playbook + self.playbook = self.client.post( + '/api/v1/playbooks/', + ansible_version=ansible_version, + parameters=parameters, + file=dict( + path=path, + content=self._read_file(path) + ) + ) + + # Record all the files involved in the playbook + self._load_files(playbook._loader._FILE_CACHE.keys()) + + return self.playbook + + def v2_playbook_on_play_start(self, play): + self.log.debug('v2_playbook_on_play_start') + self._end_task() + self._end_play() + + # Record all the files involved in the play + self._load_files(play._loader._FILE_CACHE.keys()) + + # Create the play + self.play = self.client.post( + '/api/v1/plays/', + name=play.name, + playbook=self.playbook['id'] + ) + + return self.play + + def v2_playbook_on_task_start(self, task, is_conditional, handler=False): + self.log.debug('v2_playbook_on_task_start') + self._end_task() + + pathspec = task.get_path() + if pathspec: + path, lineno = pathspec.split(':', 1) + lineno = int(lineno) + else: + # Task doesn't have a path, default to "something" + path = self.playbook['path'] + lineno = 1 + + # Ensure this task's file was added to the playbook -- files that are + # dynamically included do not show up in the playbook or play context + self._load_files([path]) + + # Find the task file (is there a better way?) + task_file = self.playbook['file']['id'] + for file in self.playbook['files']: + if file['path'] == path: + task_file = file['id'] + break + + self.task = self.client.post( + '/api/v1/tasks/', + name=task.get_name(), + action=task.action, + play=self.play['id'], + playbook=self.playbook['id'], + file=task_file, + tags=task._attributes['tags'], + lineno=lineno, + handler=handler + ) + + return self.task + + def v2_playbook_on_stats(self, stats): + self.log.debug('v2_playbook_on_stats') + + self._end_task() + self._end_play() + self._end_playbook() + + def _end_task(self): + if self.task is not None: + self.client.patch( + '/api/v1/tasks/%s/' % self.task['id'], + completed=True, + ended=datetime.datetime.now().isoformat() + ) + self.task = None + self.loop_items = [] + + def _end_play(self): + if self.play is not None: + self.client.patch( + '/api/v1/plays/%s/' % self.play['id'], + completed=True, + ended=datetime.datetime.now().isoformat() + ) + self.play = None + + def _end_playbook(self): + self.playbook = self.client.patch( + '/api/v1/playbooks/%s/' % self.playbook['id'], + completed=True, + ended=datetime.datetime.now().isoformat() + ) + + def _load_files(self, files): + self.log.debug('Loading %s file(s)...' % len(files)) + playbook_files = [file['path'] for file in self.playbook['files']] + for file in files: + if file not in playbook_files: + self.client.post( + '/api/v1/playbooks/%s/files/' % self.playbook['id'], + path=file, + content=self._read_file(file) + ) + + def _read_file(self, path): + try: + with open(path, 'r') as fd: + content = fd.read() + except IOError as e: + self.log.error("Unable to open {0} for reading: {1}".format( + path, six.text_type(e) + )) + content = """ARA was not able to read this file successfully. + Refer to the logs for more information""" + return content diff --git a/hacking/roles/hacking/defaults/main.yml b/hacking/roles/hacking/defaults/main.yml new file mode 100644 index 0000000..5f4601c --- /dev/null +++ b/hacking/roles/hacking/defaults/main.yml @@ -0,0 +1,19 @@ +--- +# Copyright (c) 2018 Red Hat, Inc. +# +# This file is part of ARA Records Ansible. +# +# ARA is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# ARA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with ARA. If not, see . + +filename: /tmp/ara-hacking \ No newline at end of file diff --git a/hacking/roles/hacking/handlers/main.yml b/hacking/roles/hacking/handlers/main.yml new file mode 100644 index 0000000..99628bc --- /dev/null +++ b/hacking/roles/hacking/handlers/main.yml @@ -0,0 +1,22 @@ +--- +# Copyright (c) 2018 Red Hat, Inc. +# +# This file is part of ARA Records Ansible. +# +# ARA is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# ARA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with ARA. If not, see . + +- name: Create a file + template: + src: hacking.j2 + dest: "{{ filename }}" diff --git a/hacking/roles/hacking/meta/main.yml b/hacking/roles/hacking/meta/main.yml new file mode 100644 index 0000000..391f042 --- /dev/null +++ b/hacking/roles/hacking/meta/main.yml @@ -0,0 +1,42 @@ +--- +# Copyright (c) 2018 Red Hat, Inc. +# +# This file is part of ARA Records Ansible. +# +# ARA is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# ARA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with ARA. If not, see . + +galaxy_info: + author: OpenStack community + description: Hacking + company: Red Hat + license: GPL v3 + min_ansible_version: 2.5 + platforms: + - name: EL + versions: + - all + - name: Fedora + versions: + - all + - name: Ubuntu + versions: + - all + - name: Debian + versions: + - all + galaxy_tags: + - installer + - application + - system +dependencies: [] diff --git a/hacking/roles/hacking/tasks/main.yml b/hacking/roles/hacking/tasks/main.yml new file mode 100644 index 0000000..e162a94 --- /dev/null +++ b/hacking/roles/hacking/tasks/main.yml @@ -0,0 +1,32 @@ +--- +# Copyright (c) 2018 Red Hat, Inc. +# +# This file is part of ARA Records Ansible. +# +# ARA is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# ARA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with ARA. If not, see . + +- name: echo something + command: echo something + register: echo + +- name: debug something + debug: + var: echo + +- name: Ensure a file is absent + file: + path: "{{ filename }}" + state: absent + notify: + - create a file diff --git a/hacking/roles/hacking/templates/hacking.j2 b/hacking/roles/hacking/templates/hacking.j2 new file mode 100644 index 0000000..70c379b --- /dev/null +++ b/hacking/roles/hacking/templates/hacking.j2 @@ -0,0 +1 @@ +Hello world \ No newline at end of file diff --git a/hacking/test-playbook.yml b/hacking/test-playbook.yml new file mode 100644 index 0000000..07dff78 --- /dev/null +++ b/hacking/test-playbook.yml @@ -0,0 +1,22 @@ +- name: A test play + hosts: localhost + tasks: + - name: Include a role + include_role: + name: hacking + +- name: Another test play + hosts: localhost + gather_facts: no + pre_tasks: + - name: Pre task + debug: + msg: Task from a pre-task + tasks: + - name: Task + debug: + msg: Task from a task + post_tasks: + - name: Post Task + debug: + msg: Task from a post-task diff --git a/standalone/mockdata.py b/standalone/mockdata.py deleted file mode 100644 index 9fbcc7e..0000000 --- a/standalone/mockdata.py +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2018 Red Hat, Inc. -# -# This file is part of ARA Records Ansible. -# -# ARA is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# ARA is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with ARA. If not, see . - -# Creates mock data offline leveraging the API -import django -import json -import os -import sys - -parent_directory = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) -sys.path.append(parent_directory) -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ara.settings') -django.setup() - -from django.test import Client - - -def post(endpoint, data): - client = Client() - print("Posting to %s..." % endpoint) - obj = client.post(endpoint, - json.dumps(data), - content_type="application/json") - print("HTTP %s" % obj.status_code) - print("Got: %s" % json.dumps(obj.json(), indent=2)) - print("#" * 40) - return obj.json() - - -playbook = post( - '/api/v1/playbooks/', - { - 'started': '2016-05-06T17:20:25.749489-04:00', - 'ansible_version': '2.3.4', - 'completed': False, - 'parameters': {'foo': 'bar'} - } -) - -playbook_with_files = post( - '/api/v1/playbooks/', - { - 'started': '2016-05-06T17:20:25.749489-04:00', - 'ansible_version': '2.3.4', - 'completed': False, - 'parameters': {'foo': 'bar'}, - 'files': [ - {'path': '/tmp/1/playbook.yml', 'content': '# playbook'}, - {'path': '/tmp/2/playbook.yml', 'content': '# playbook'} - ], - } -) - -play = post( - '/api/v1/plays/', - { - 'started': '2016-05-06T17:20:25.749489-04:00', - 'name': 'Test play', - 'playbook': playbook['id'] - } -) diff --git a/tox.ini b/tox.ini index 7ad72e6..6259d47 100644 --- a/tox.ini +++ b/tox.ini @@ -33,6 +33,14 @@ commands = setenv = DJANGO_DEBUG=1 +[testenv:ansible-playbook] +deps = ansible +commands = + ansible-playbook {toxinidir}/hacking/test-playbook.yml +setenv = + DJANGO_DEBUG=1 + DJANGO_LOG_LEVEL=DEBUG + [testenv:cover] commands = coverage erase