{ "info": { "author": "Peter Baumgartner", "author_email": "pete@lincolnloop.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "![Salt Dash logo](https://cldup.com/pjjyyptW69.png)\n\n[![tests](https://img.shields.io/circleci/project/github/lincolnloop/saltdash/master.svg)](https://circleci.com/gh/lincolnloop/saltdash/tree/master)\n[![PyPI](https://img.shields.io/pypi/v/saltdash.svg)](https://pypi.org/project/saltdash/)\n![Python Versions](https://img.shields.io/pypi/pyversions/saltdash.svg)\n\n# Salt Dash\n\nRead-only web interface to read from Salt's [external job cache](https://docs.saltstack.com/en/latest/topics/jobs/external_cache.html) using the [`pgjsonb`](https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.pgjsonb.html) returner.\n\n![screenshot](https://cldup.com/8TTHBPfhyu.png)\n\n\n## Development\n\n### Pre-requisites\n\n* [Yarn](https://yarnpkg.com/lang/en/docs/install/) for building the front-end.\n* [Pipenv](https://docs.pipenv.org/) for the back-end.\n* A Postgresql database\n\n### Installation\n\n```bash\ngit clone git@github.com:lincolnloop/saltdash.git\ncd saltdash\nmake all # download dependencies and build the world\n$EDITOR saltdash.yml # change settings as needed\npipenv shell # activate the Python virtual environment\nsaltdash migrate # setup the database\nsaltdash runserver # run a development server\n```\n\n### Client-side\n\nUses [parcel](https://parceljs.org/). To start a development environment with live reloading, run:\n\n```bash\ncd client\nyarn run watch\n```\n\n## Running in Production\n\n```bash\npip install saltdash\n```\n\n`saltdash runserver` is not suitable for production. A production-level\nwebserver is included and can be started with `saltdash serve`. If Docker is\nmore your speed, there's a `Dockerfile` as well.\n\n\u26a0\ufe0f The built-in webserver does not handle HTTPS. The default settings assume the\napp is deployed behind a proxy which is terminating HTTPS connections and\nproperly handling headers. If this is not the case, [you should read this](https://docs.djangoproject.com/en/2.2/ref/settings/#secure-proxy-ssl-header) and take appropriate actions.\n\n### Configuration\n\nConfiguration can be done via environment variables, a file, or a combination\nof both thanks to [`Goodconf`](https://pypi.org/project/goodconf/). By default\nit will look for a YAML file named `saltdash.yml` in `/etc/saltdash/` or the current\ndirectory. You can also specify a configuration file with the `-C` or `--config`\nflags. `saltdash-generate-config` can be used to generate a sample config file\ncontaining the following variables:\n\n* **DEBUG** \n Enable debugging. \n type: `bool` \n* **SECRET_KEY** _REQUIRED_ \n a long random string you keep secret https://docs.djangoproject.com/en/2.2/ref/settings/#secret-key \n type: `str` \n* **DATABASE_URL** \n type: `str` \n default: `postgres://localhost:5432/salt` \n* **ALLOWED_HOSTS** \n Hosts allowed to serve the site https://docs.djangoproject.com/en/2.2/ref/settings/#allowed-hosts \n type: `list` \n default: `['*']` \n* **HIDE_OUTPUT** \n List of modules to hide the output from in the web interface. \n type: `list` \n default: `['pillar.*']`\n* **GITHUB_TEAM_ID** \n type: `str` \n* **GITHUB_CLIENT_ID** \n type: `str` \n* **GITHUB_CLIENT_SECRET** \n type: `str` \n* **SENTRY_DSN** \n type: `str` \n* **LISTEN** \n Socket for webserver to listen on. \n type: `str` \n default: `127.0.0.1:8077` \n\nGitHub Team authentication is included by setting the relevant `GITHUB_*` variables.\n\nYou'll need to setup an OAuth App at `https://github.com/organizations//settings/applications` with a callback URL in the form: `https://your-site.example.com/auth/complete/github-team/`\n\nTo retrieve your team IDs:\n\n1. Create [a token at GitHub](https://github.com/settings/tokens)\n2. `curl -H \"Authorization: token \" https://api.github.com/orgs//teams`\n\n\n\n## Setting up Salt\n\nOnce you've setup a Postgresql database using `saltdash migrate`, connect Salt's external job cache to the database by adding the following lines to `/etc/salt/master.d/job_cache.conf`:\n\n```ini\n# Replace items in brackets with actual values\nmaster_job_cache: pgjsonb\nreturner.pgjsonb.host: [db-host]\nreturner.pgjsonb.pass: [db-password]\nreturner.pgjsonb.db: [db-database-name]\nreturner.pgjsonb.port: [db-port]\nreturner.pgjsonb.user: [db-user]\n```\n\nRestart your `salt-master` and all future jobs should get stored in the database.\n\nIf you have *lots* of jobs, you'll probably want to purge the cache periodically. A helper command is provided to do just that, run:\n\n```bash\nsaltdash purge_job_cache [days_older_than_to_purge]\n```\n\nIf you want to automate this, use the `--no-input` flag to bypass the confirmation prompt.\n\n## Protecting Secrets\n\nIt is very easy to accidentally expose secrets in Salt via the logs and/or\nconsole output. The same applies for Saltdash. Since secrets are often stored\nin encrypted pillar data, by default the output from any `pillar.*` calls is\nhidden via the `HIDE_OUTPUT` setting. If you have additional modules you know\nexpose secret data, they should be added to the list.\n\nThere are many other ways secrets can leak, however. A few general tips (which\nare good practice whether you use Saltdash or not).\n\n* Set `show_changes: false` on any `file.*` actions which deal with sensitive data.\n* Set `hide_output: true` on any `cmd.*` state which may output sensitive data.\n* When working with files, use templates or `pillar_contents` when appropriate.\n* Avoid passing secrets as arguments to modules or states. Typically Salt can\n read them from a pillar or config instead.\n\n## Attributions\n\nIcon by [BornSymbols](https://thenounproject.com/term/salt/705369) used under `CCBY` license.\n\n# Changelog\n\n0.9.6 (2019-04-17)\n------------------\n\n- Dependency updates\n\n\n0.9.5 (2018-05-24)\n------------------\n\n- Adds `HIDE_OUTPUT` config to prevent showing secrets in web interface\n\n\n0.9.4 (2018-05-15)\n------------------\n\n- Fixes operation with systemd socket activation\n\n\n0.9.3 (2018-05-15)\n------------------\n\n- Adds proper SSL handling\n\n\n0.9.2 (2018-05-15)\n------------------\n\n- Fixes healthcheck middleware to avoid `ALLOWED_HOSTS` checking\n- Update dependencies\n- Documentation updates\n\n\n0.9.1 (2018-05-14)\n------------------\n\n- Packaging fixes\n\n\n0.9 (2018-05-14)\n----------------\n\n- Initial PyPI release\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lincolnloop/saltdash/", "keywords": "salt,dashboard", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "saltdash", "package_url": "https://pypi.org/project/saltdash/", "platform": "", "project_url": "https://pypi.org/project/saltdash/", "project_urls": { "Homepage": "https://github.com/lincolnloop/saltdash/" }, "release_url": "https://pypi.org/project/saltdash/0.9.6/", "requires_dist": [ "django (==2.2)", "django-alive (<1.1)", "dj-database-url (==0.5.0)", "goodconf[yaml] (<1.1)", "psycopg2-binary (==2.8.2)", "python-json-logger (==0.1.10)", "sentry-sdk (==0.7.10)", "social-auth-app-django (==3.1.0)", "pytest-cov (==2.6.1)", "pytest-django (==3.4.8)", "model-mommy (==1.6.0)", "waitress (==1.2.1)", "whitenoise (==4.1.2)" ], "requires_python": "", "summary": "A Dahsboard for SaltStack's Job Cache", "version": "0.9.6" }, "last_serial": 5157492, "releases": { "0.9": [ { "comment_text": "", "digests": { "md5": "63b34a8f7cec7e3f78257f5f1f175335", "sha256": "557c3682c8f99cde1d48aa931296b8692905e7cd9551188386fe16ad41d7b592" }, "downloads": -1, "filename": "saltdash-0.9.tar.gz", "has_sig": false, "md5_digest": "63b34a8f7cec7e3f78257f5f1f175335", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22471, "upload_time": "2018-05-15T04:03:54", "url": "https://files.pythonhosted.org/packages/08/33/b60a10e84690375c62b66c4d2f7bc10bdf5885d3dc489e2ea8186d354c1f/saltdash-0.9.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "1e4899fbea3d2262b3d4626d79349483", "sha256": "160bd4dcb85d8b82b196d2e9624d5466e426dea9a519cd90cfafd967e5665fe0" }, "downloads": -1, "filename": "saltdash-0.9.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1e4899fbea3d2262b3d4626d79349483", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30924, "upload_time": "2018-05-15T04:19:52", "url": "https://files.pythonhosted.org/packages/de/bc/b02ba0ce4c09d90bbe4384c98a281c4a576457e3317947a5cff678d0ab93/saltdash-0.9.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ac9045dce1889355447e53b25c0296a1", "sha256": "0344a8c199564685198f2ad3d976093c10a78334828582b9fbef59feff40505d" }, "downloads": -1, "filename": "saltdash-0.9.1.tar.gz", "has_sig": false, "md5_digest": "ac9045dce1889355447e53b25c0296a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22976, "upload_time": "2018-05-15T04:19:53", "url": "https://files.pythonhosted.org/packages/40/db/f5e0fdae89bd87a268189b6d688b670e625e1ce2e2d1870de8235bc61d89/saltdash-0.9.1.tar.gz" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "f7976e3efe43338b168648d3a3866f94", "sha256": "bdb6f2e565e8145267537abf5ee72df07a6f68f07e255c66a235299596a22bae" }, "downloads": -1, "filename": "saltdash-0.9.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f7976e3efe43338b168648d3a3866f94", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 31233, "upload_time": "2018-05-15T16:07:35", "url": "https://files.pythonhosted.org/packages/88/59/ad257a5d27fd652051e63d63968830916b9b757db11e3500d7380a09d50f/saltdash-0.9.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16cba6d3aea35b1ebcc1b869f0055ba9", "sha256": "45cb36ac25a9877830bffda200260494ba9c0ec75923940b85472ca157390141" }, "downloads": -1, "filename": "saltdash-0.9.2.tar.gz", "has_sig": false, "md5_digest": "16cba6d3aea35b1ebcc1b869f0055ba9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23577, "upload_time": "2018-05-15T16:07:36", "url": "https://files.pythonhosted.org/packages/a2/59/f8c52b0ebf689514dda5788c723e550e53db096c6514bde941f38469fbdf/saltdash-0.9.2.tar.gz" } ], "0.9.3": [ { "comment_text": "", "digests": { "md5": "d8fa952121c7378614c2ac48fe4dbad2", "sha256": "00d341a8f9229795bcb7286ab9d348359f18ea0802dc9a6ae47e9b815721ead1" }, "downloads": -1, "filename": "saltdash-0.9.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d8fa952121c7378614c2ac48fe4dbad2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 31458, "upload_time": "2018-05-15T16:49:20", "url": "https://files.pythonhosted.org/packages/1c/05/400716b833bc7e66799d39b090e7b2a7619592d4346866d63eb1d5ec4bd6/saltdash-0.9.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e8a8b20b858d50b97d7e5869af78612", "sha256": "7f59f50d33ef0cac664f0b87e72bc543ba1adfc6ed6d56263bcbca4eabda6282" }, "downloads": -1, "filename": "saltdash-0.9.3.tar.gz", "has_sig": false, "md5_digest": "9e8a8b20b858d50b97d7e5869af78612", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23979, "upload_time": "2018-05-15T16:49:22", "url": "https://files.pythonhosted.org/packages/23/16/92c6993430fcde94d37c2ab79564f2c1ac77f4882b1ac38ff96f349e0d28/saltdash-0.9.3.tar.gz" } ], "0.9.4": [ { "comment_text": "", "digests": { "md5": "1a6a48a89c15afa55d21e00e0f02f440", "sha256": "ac2579410520883d13dc62ed7280016bc0a589b8688a2e5fbb3f95ae48c45c90" }, "downloads": -1, "filename": "saltdash-0.9.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1a6a48a89c15afa55d21e00e0f02f440", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 31455, "upload_time": "2018-05-15T22:29:54", "url": "https://files.pythonhosted.org/packages/93/c6/7299334f8f0c129503ed51d129e5307661b35902c0b845e0914d6fa3f3f7/saltdash-0.9.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "86838ed41c315c117128a33eb0454c4c", "sha256": "7974e65d13e415b14377fe80d6d8cbb0e7fc438c525ac54eec63b68b777202b6" }, "downloads": -1, "filename": "saltdash-0.9.4.tar.gz", "has_sig": false, "md5_digest": "86838ed41c315c117128a33eb0454c4c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23981, "upload_time": "2018-05-15T22:29:55", "url": "https://files.pythonhosted.org/packages/17/cf/a4a5e01048a8d7603d86de6abe9c704f27fc16cd878aef5751d741d1c047/saltdash-0.9.4.tar.gz" } ], "0.9.5": [ { "comment_text": "", "digests": { "md5": "1476e86e902fc69ce8b06103edd6d5ba", "sha256": "63416fa407b8037ae9b3423e13ba0db11291d318f3b2e7a0c2bf838032d09bf6" }, "downloads": -1, "filename": "saltdash-0.9.5-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "1476e86e902fc69ce8b06103edd6d5ba", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 2212652, "upload_time": "2018-05-24T17:54:30", "url": "https://files.pythonhosted.org/packages/1d/4d/6fa59f38d668f0351e4a96fa18ed6ca297f89dc1346a8477e57af254aae2/saltdash-0.9.5-py2.py3-none-any.whl" } ], "0.9.6": [ { "comment_text": "", "digests": { "md5": "77067e57952bd2ca83f111292e5971ea", "sha256": "2b171dcaa06f9afe982756d9657fe354606fa0f13c376f5b690ba406c585e5b5" }, "downloads": -1, "filename": "saltdash-0.9.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "77067e57952bd2ca83f111292e5971ea", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3962003, "upload_time": "2019-04-17T23:07:04", "url": "https://files.pythonhosted.org/packages/bf/34/5674c6897af7e9f50d2f7c9f225eaaddcf7d2354da57273cf2a2399f3009/saltdash-0.9.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "26998ce9a572f57d2893e87f7324089a", "sha256": "b0bcdc7a6cd1cde4baf53154dc90769bc8577e8939d50e468d930d81ffaf514e" }, "downloads": -1, "filename": "saltdash-0.9.6.tar.gz", "has_sig": false, "md5_digest": "26998ce9a572f57d2893e87f7324089a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3022006, "upload_time": "2019-04-17T23:07:10", "url": "https://files.pythonhosted.org/packages/9e/79/0de85d461c6e258621e6084096d381b47839544d192553ac08d57015e0e7/saltdash-0.9.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "77067e57952bd2ca83f111292e5971ea", "sha256": "2b171dcaa06f9afe982756d9657fe354606fa0f13c376f5b690ba406c585e5b5" }, "downloads": -1, "filename": "saltdash-0.9.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "77067e57952bd2ca83f111292e5971ea", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3962003, "upload_time": "2019-04-17T23:07:04", "url": "https://files.pythonhosted.org/packages/bf/34/5674c6897af7e9f50d2f7c9f225eaaddcf7d2354da57273cf2a2399f3009/saltdash-0.9.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "26998ce9a572f57d2893e87f7324089a", "sha256": "b0bcdc7a6cd1cde4baf53154dc90769bc8577e8939d50e468d930d81ffaf514e" }, "downloads": -1, "filename": "saltdash-0.9.6.tar.gz", "has_sig": false, "md5_digest": "26998ce9a572f57d2893e87f7324089a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3022006, "upload_time": "2019-04-17T23:07:10", "url": "https://files.pythonhosted.org/packages/9e/79/0de85d461c6e258621e6084096d381b47839544d192553ac08d57015e0e7/saltdash-0.9.6.tar.gz" } ] }