{ "info": { "author": "Ali Aqrabawi", "author_email": "aaqrabaw@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content" ], "description": "# Django-Ansible\n![PyPI - Status](https://img.shields.io/pypi/status/django-ansible.svg)\n![PyPI](https://img.shields.io/pypi/v/django-ansible.svg)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/django-ansible.svg)\n![PyPI - Django Version](https://img.shields.io/pypi/djversions/django-ansible.svg)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/7f726043dc76428cb553c726ca388c5f)](https://www.codacy.com/app/Ali-aqrabawi/django-ansible?utm_source=github.com&utm_medium=referral&utm_content=Ali-aqrabawi/django-ansible&utm_campaign=Badge_Grade)\n![GitHub](https://img.shields.io/github/license/ali-aqrabawi/django-ansible.svg)\n\ndj_ansible is a Django App that allow Django applications to integrate with Ansible.\nbasiclly it allow you to store inventory data in database using DjangoModels, and provide \nan API to execute Json-like playbooks. \n\n### Quick Start\n\n1. install django-ansible\n\n `pip install django-ansible`\n\n2. Add \"dj_ansible\" to your INSTALLED_APPS setting like this\n\n INSTALLED_APPS = [\n ...\n 'dj_ansible',\n ]\n\n3. Run `python manage.py migrate` to create the needed tables.\n\n4. add your inventory data to two tables\n - ansible_network_groups (model: `AnsibleNetworkGroup()`)\n - ansible_network_hosts (model: `AnsibleNetworkHost()`)\n\n like following :\n\n from dj_ansible.models import AnsibleNetworkHost,AnsibleNetworkGroup\n\n my_group = AnsibleNetworkGroup(name='cisco_firewalls',\n ansible_connection='network_cli',\n ansible_network_os='asa',\n ansible_become=True)\n my_group.save()\n host = AnsibleNetworkHost(host='my_asa',\n ansible_ssh_host='192.168.1.1',\n ansible_user='admin',\n ansible_ssh_pass='pass',\n ansible_become_pass='pass',\n group=my_group)\n host.save()\n\n ### Running Play-books\n to run play-books use the `execute` API to execute your play-books\n\n ##### Example\n\n 1. create play-book dictionary\n\n my_play = dict(\n name=\"may_first_play\",\n hosts='cisco_firewalls',\n become='yes',\n become_method='enable',\n gather_facts='no',\n tasks=[\n dict(action=dict(module='asa_command', commands=['show version','show ip'])),\n dict(action=dict(module='asa_config', lines=['network-object host 10.1.0.1'])\n ]\n )\n\n2. run `my_play` using the `execute` API\n\n from dj_ansible.ansible_kit import execute\n\n result = execute(my_play)\n # print the stats\n print(json.dumps(result.stats, indent=4))\n # print execution results\n print(json.dumps(result.results, indent=4))\n\n3. the `result` object consist of two jsons:\n\n- first `state`, which look like this:\n\n {\n \"all_ok\": false,\n \"total_hosts\": 3,\n \"has_changed\": false,\n \"duration\": 12.400323867797852,\n \"hosts_stats\": {\n \"ok_hosts\": {\n \"count\": 2,\n \"hosts\": [\n \"fw2\",\n \"fw1\"\n ]\n },\n \"failed_hosts\": {\n \"count\": 1,\n \"hosts\": [\n \"ios_switch1\"\n ]\n },\n \"processed_hosts\": {\n \"count\": 3,\n \"hosts\": [\n \"fw2\",\n \"fw1\",\n \"ios_switch1\"\n ]\n },\n \"changed_hosts\": {\n \"count\": 0,\n \"hosts\": []\n }\n },\n \"hosts\": [\n {\n \"host\": \"fw2\",\n \"status\": \"ok\",\n \"changed\": false\n },\n {\n \"host\": \"fw1\",\n \"status\": \"ok\",\n \"changed\": false\n },\n {\n \"host\": \"ios_switch1\",\n \"status\": \"failed\",\n \"changed\": false\n }\n ]}\n\n- and `result`, which looks like this:\n\n {\n \"failed\": [\n {\n \"host\": \"ios_switch1\",\n \"tasks\": [\n {\n \"name\": \"asa_command\",\n \"result\": {\n \"msg\": \"timed out\",\n \"_ansible_no_log\": false\n }\n }\n ]\n }\n ],\n \"success\": [\n {\n \"host\": \"fw2\",\n \"tasks\": [\n {\n \"name\": \"asa_command\",\n \"result\": {\n \"invocation\": {\n \"module_args\": {\n \"username\": null,\n \"authorize\": null,\n \"password\": null,\n \"passwords\": null,\n \"context\": null,\n \"retries\": 10,\n \"auth_pass\": null,\n \"interval\": 1,\n \"commands\": [\n \"show version\"\n ],\n \"host\": null,\n \"ssh_keyfile\": null,\n \"timeout\": null,\n \"provider\": null,\n \"wait_for\": null,\n \"port\": null,\n \"match\": \"all\"\n }\n },\n \"stdout_lines\": [\n [\n \"Cisco Adaptive Security Appliance Software Version 9.5(3)6 \",\n \"Device Manager Version 7.1(3)\",\n ....\n \"Configuration last modified by enable_15 at 12:55:31.479 EDT Sun Apr 7 2019\"\n ]\n ],\n \"changed\": false,\n \"stdout\": [\n \"Cisco Adaptive Security Appliance Software Version 9.5(3)6 \\nDevice Manager Version 7.1(3)\\n\\n... ],\n \"_ansible_parsed\": true,\n \"_ansible_no_log\": false\n }\n }\n ]\n },\n {\n \"host\": \"fw1\",\n \"tasks\": [\n {\n \"name\": \"asa_command\",\n \"result\": {\n \"invocation\": {\n \"module_args\": {\n \"username\": null,\n \"authorize\": null,\n \"password\": null,\n \"passwords\": null,\n \"context\": null,\n \"retries\": 10,\n \"auth_pass\": null,\n \"interval\": 1,\n \"commands\": [\n \"show version\"\n ],\n \"host\": null,\n \"ssh_keyfile\": null,\n \"timeout\": null,\n \"provider\": null,\n \"wait_for\": null,\n \"port\": null,\n \"match\": \"all\"\n }\n },\n \"stdout_lines\": [\n [\n \"Cisco Adaptive Security Appliance Software Version 9.1(7)16 \",\n \"\",\n \"Compiled on Thu 30-Mar-17 17:39 by builders\",\n \"System image file is \\\"disk0:/asa917-16-k8.bin\\\"\",\n \"Config file at boot was \\\"startup-config\\\"\",\n \"\",\n ....\n \"Configuration register is 0x1\",\n \"Configuration last modified by admin at 16:25:49.318 UTC Sat Apr 6 2019\"\n ]\n ],\n \"changed\": false,\n \"stdout\": [\n \"Cisco Adaptive Security Appliance Software Version 9.1(7)16 \\n\\n.... ],\n \"_ansible_parsed\": true,\n \"_ansible_no_log\": false\n }\n }\n ]\n }\n ]}\n\n#### Note\nfor now dj_ansible support network devices inventory only, contibution is so welcome to add support for other\ninventories types like servers.\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "django-ansible", "package_url": "https://pypi.org/project/django-ansible/", "platform": "", "project_url": "https://pypi.org/project/django-ansible/", "project_urls": null, "release_url": "https://pypi.org/project/django-ansible/1.0.2/", "requires_dist": [ "ansible" ], "requires_python": "", "summary": "Django app which provide an APIs to integrate Ansible with Django projects", "version": "1.0.2" }, "last_serial": 5204428, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "be11893f8e732a4ffa1e18aa9530438c", "sha256": "ae7fd90a3bbda023c586a44f805c8cf93a2d5bc3c4cd869a2016755deb2aa0d7" }, "downloads": -1, "filename": "django_ansible-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "be11893f8e732a4ffa1e18aa9530438c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8385, "upload_time": "2019-04-07T17:44:34", "url": "https://files.pythonhosted.org/packages/77/01/3bbb9d21cba6741796f85adbafa8aa0346543b45323a854b263d1fba99fb/django_ansible-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e2607b43170f1940d6f2efede82ef4b2", "sha256": "02acc09b9deecf321be88a2bc8319fe7b580b022db602c48e91a984ef719b184" }, "downloads": -1, "filename": "django-ansible-0.1.tar.gz", "has_sig": false, "md5_digest": "e2607b43170f1940d6f2efede82ef4b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7904, "upload_time": "2019-04-07T17:44:36", "url": "https://files.pythonhosted.org/packages/54/b1/d3b95b7bf35c6a14359b5634706913154ef4039a0f1bd3f976acc98e31ea/django-ansible-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "301f207837263fb9882c57d7597649cd", "sha256": "c742eed975dff593bedf92ce9b78bfff7a27e6a6ebaf7994d2d7cfed7215be21" }, "downloads": -1, "filename": "django_ansible-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "301f207837263fb9882c57d7597649cd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8384, "upload_time": "2019-04-07T18:10:30", "url": "https://files.pythonhosted.org/packages/7f/ac/fb4d806096938f09446aba8b595fbda63f3cf3d9138defb1b3d2e3e6bd12/django_ansible-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "17466a9ec3dbcd965b6d31c625fbbe1b", "sha256": "39ab95ba84e25eef60521ff71f810e2a2f00f31f2584ef823112ff45cd494387" }, "downloads": -1, "filename": "django-ansible-0.2.tar.gz", "has_sig": false, "md5_digest": "17466a9ec3dbcd965b6d31c625fbbe1b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7909, "upload_time": "2019-04-07T18:10:31", "url": "https://files.pythonhosted.org/packages/eb/ea/bd119177e22fc9e65eadfd8b44457c0e1e5cd3ba664aa9975cf8a967a41b/django-ansible-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "006d016818a366a45849820aa12e7a95", "sha256": "eb6e5c686b82062ae0f01bf04a0d5ebd0ab8d6d689aa55a38f53def4dd94254b" }, "downloads": -1, "filename": "django_ansible-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "006d016818a366a45849820aa12e7a95", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8396, "upload_time": "2019-04-07T19:28:51", "url": "https://files.pythonhosted.org/packages/8e/5e/a01c0cf791660338a1512f4d74bccac624e3f3aa304ea5a093fb7258e405/django_ansible-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dee31587ece50f4bd1d66efd8c9ef4e6", "sha256": "617845ccd84ac29b87bbf3afd05717304c24bffeddd049755df27d7629643930" }, "downloads": -1, "filename": "django-ansible-0.3.tar.gz", "has_sig": false, "md5_digest": "dee31587ece50f4bd1d66efd8c9ef4e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7999, "upload_time": "2019-04-07T19:28:52", "url": "https://files.pythonhosted.org/packages/eb/4d/3df3e4b290c4d6553370da989e0dc6c4f558f139ec6c613d345eb42e6a27/django-ansible-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "c9e45baabceb1ae1cd58190771d77ab9", "sha256": "71cdafc7b46ea124d103c02b897f64734b822d52d437676cc35295a0f49e9218" }, "downloads": -1, "filename": "django_ansible-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "c9e45baabceb1ae1cd58190771d77ab9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8562, "upload_time": "2019-04-10T18:17:08", "url": "https://files.pythonhosted.org/packages/60/85/3085ce2a146922488e968f2a77ed3763225c3f298cb93aecaaefd916426c/django_ansible-0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3cb53e78873bba8b2a0df19cfd4a5d8a", "sha256": "7a5f4955afbb34bbd8a6776335bfc58664bb92dd63b8eefeecc7f1ea47f5aaff" }, "downloads": -1, "filename": "django-ansible-0.4.tar.gz", "has_sig": false, "md5_digest": "3cb53e78873bba8b2a0df19cfd4a5d8a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8281, "upload_time": "2019-04-10T18:17:10", "url": "https://files.pythonhosted.org/packages/a2/8f/86a4441b0f3c69cee4a55a16a779db2affe10db1ced2df34d1276ca6d86a/django-ansible-0.4.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "24652b66db122de115a25b61f51d3431", "sha256": "6ce971b07ab521a737b11141c84e3ebd4f58f51584c2ef02787d9caeab6cd84e" }, "downloads": -1, "filename": "django_ansible-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "24652b66db122de115a25b61f51d3431", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9290, "upload_time": "2019-04-29T18:05:19", "url": "https://files.pythonhosted.org/packages/fb/f2/c49e275aebf5c25ceaa1e044c5c4d2c289843011cb5c2249d17834cee041/django_ansible-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e3822cf959e30c22966d1e0ed46df8e7", "sha256": "4c2c72ff1d395cb71dea5b66dec69c38e562f999d42f776ec51b69f222099dba" }, "downloads": -1, "filename": "django-ansible-1.0.0.tar.gz", "has_sig": false, "md5_digest": "e3822cf959e30c22966d1e0ed46df8e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8315, "upload_time": "2019-04-29T18:05:25", "url": "https://files.pythonhosted.org/packages/cd/e1/fbbd0b1c6331b94dbad5a0d389915c6c5ff98ca9d9700dd516403276817a/django-ansible-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "63ce859f4b3e1d0fa12629c6888531ba", "sha256": "616af412cedc85f013f35ecab5e10d63fbf08ce3077048cd172ec0525f5dd8b4" }, "downloads": -1, "filename": "django_ansible-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "63ce859f4b3e1d0fa12629c6888531ba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9311, "upload_time": "2019-04-29T18:11:07", "url": "https://files.pythonhosted.org/packages/f8/5d/d4d9a47f9e216424c0818fe374e2e01f9a4e60ccd4407aa47c75c0a4f457/django_ansible-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ec6064d797d0f2cc297dfe23c7ccdea9", "sha256": "16f1a8d84dbf486e07e6f7c9929de60893d6edd19b88ec4d2e00921c6ee34834" }, "downloads": -1, "filename": "django-ansible-1.0.1.tar.gz", "has_sig": false, "md5_digest": "ec6064d797d0f2cc297dfe23c7ccdea9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8375, "upload_time": "2019-04-29T18:11:13", "url": "https://files.pythonhosted.org/packages/fe/00/8aa6cdec907dce63e2936bf0ef36db499947f8fa2720ca54a8f46fc0740b/django-ansible-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "980c5f02b87d292cec264354cb7a22ee", "sha256": "07cbf25aac275229fdc4d256c1f259d228f543b5a60cd65c0cc2f349aa0e9796" }, "downloads": -1, "filename": "django_ansible-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "980c5f02b87d292cec264354cb7a22ee", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9312, "upload_time": "2019-04-29T18:28:32", "url": "https://files.pythonhosted.org/packages/16/5e/0cb9e68b20b8e360ee2c0e1c34b05ad41b8141c87a54e24b9c8afce98809/django_ansible-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "af1506e348adf81c72d2b553367c8655", "sha256": "db1a3f07e2ef3814a017b7055367de48ec19f03b83f2b9683499fb1763c2b583" }, "downloads": -1, "filename": "django-ansible-1.0.2.tar.gz", "has_sig": false, "md5_digest": "af1506e348adf81c72d2b553367c8655", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8369, "upload_time": "2019-04-29T18:28:37", "url": "https://files.pythonhosted.org/packages/00/1e/b3ed38527c7423b89b2bab0c805d31c294c429d199f2f5d3d0a4d6ed9c36/django-ansible-1.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "980c5f02b87d292cec264354cb7a22ee", "sha256": "07cbf25aac275229fdc4d256c1f259d228f543b5a60cd65c0cc2f349aa0e9796" }, "downloads": -1, "filename": "django_ansible-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "980c5f02b87d292cec264354cb7a22ee", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9312, "upload_time": "2019-04-29T18:28:32", "url": "https://files.pythonhosted.org/packages/16/5e/0cb9e68b20b8e360ee2c0e1c34b05ad41b8141c87a54e24b9c8afce98809/django_ansible-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "af1506e348adf81c72d2b553367c8655", "sha256": "db1a3f07e2ef3814a017b7055367de48ec19f03b83f2b9683499fb1763c2b583" }, "downloads": -1, "filename": "django-ansible-1.0.2.tar.gz", "has_sig": false, "md5_digest": "af1506e348adf81c72d2b553367c8655", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8369, "upload_time": "2019-04-29T18:28:37", "url": "https://files.pythonhosted.org/packages/00/1e/b3ed38527c7423b89b2bab0c805d31c294c429d199f2f5d3d0a4d6ed9c36/django-ansible-1.0.2.tar.gz" } ] }