From cf5bf9e897af56dfdf4ccafa94db5c03cec87895 Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Fri, 5 May 2023 05:40:28 +0000 Subject: automatic import of python-puppetboard --- .gitignore | 1 + python-puppetboard.spec | 581 ++++++++++++++++++++++++++++++++++++++++++++++++ sources | 1 + 3 files changed, 583 insertions(+) create mode 100644 python-puppetboard.spec create mode 100644 sources diff --git a/.gitignore b/.gitignore index e69de29..b124f09 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +/puppetboard-4.3.0.tar.gz diff --git a/python-puppetboard.spec b/python-puppetboard.spec new file mode 100644 index 0000000..6694ecc --- /dev/null +++ b/python-puppetboard.spec @@ -0,0 +1,581 @@ +%global _empty_manifest_terminate_build 0 +Name: python-puppetboard +Version: 4.3.0 +Release: 1 +Summary: Web frontend for PuppetDB +License: Apache License 2.0 +URL: https://github.com/voxpupuli/puppetboard +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/ba/37/d2e9982f5f62f6d3743dba153b4d35eeaf478e12d6345bf87b4681657062/puppetboard-4.3.0.tar.gz +BuildArch: noarch + +Requires: python3-certifi +Requires: python3-charset-normalizer +Requires: python3-click +Requires: python3-commonmark +Requires: python3-Flask +Requires: python3-Flask-APScheduler +Requires: python3-Flask-Caching +Requires: python3-Flask-WTF +Requires: python3-idna +Requires: python3-itsdangerous +Requires: python3-Jinja2 +Requires: python3-MarkupSafe +Requires: python3-packaging +Requires: python3-pyparsing +Requires: python3-pypuppetdb +Requires: python3-requests +Requires: python3-typing-extensions +Requires: python3-urllib3 +Requires: python3-Werkzeug +Requires: python3-WTForms +Requires: python3-zipp +Requires: python3-pep8 +Requires: python3-coverage +Requires: python3-mock +Requires: python3-pytest +Requires: python3-pylint +Requires: python3-pytest-pylint +Requires: python3-pytest-cov +Requires: python3-pytest-mock +Requires: python3-pytest-mypy +Requires: python3-pytest-randomly +Requires: python3-cov-core +Requires: python3-beautifulsoup4 +Requires: python3-bandit +Requires: python3-mypy +Requires: python3-types-requests +Requires: python3-types-setuptools +Requires: python3-types-toml + +%description +``` +``` +PUPPETDB_CERT=LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ== +``` +For information about how to generate the correct keys please refer to the +[pypuppetdb documentation](https://pypuppetdb.readthedocs.io/en/latest/connecting.html#ssl). Alternatively it is possible +to explicitly specify the protocol to be used setting the `PUPPETDB_PROTO` variable. +Other settings that might be interesting, in no particular order: +- `FAVORITE_ENVS`: an ordered list of Puppet environment names that will be shown immediately after "All Environments" + and before other environments (which are sorted by name) in the dropdown for choosing the environment shown + in the top-right of the UI. Environments listed here that do not really exist in your deployment are silently ignored. +- `SHOW_ERROR_AS`: `friendly` or `raw`. The former makes Puppet run errors in Report and Failures views shown + in a modified, (arguably) more user-friendly form. The latter shows them as they are. + Defaults to `friendly`. +- `CODE_PREFIX_TO_REMOVE`: what code path that should be shortened in "Friendly errors" to "…" for readability. + A regexp. Defaults to `/etc/puppetlabs/code/environments(/.*?/modules)?`. +- `SECRET_KEY`: Refer to [Flask documentation](https://flask.palletsprojects.com/en/2.0.x/quickstart/#sessions), + section "How to generate good secret keys" for more info. Defaults to a random 64-char string generated by `secrets.token_hex(32)`, prepended with a `default-` string. **Warning** Leaving SECRET_KEY set to a default value WILL cause issues when the app is restarted or has more than 1 replica (f.e. uWSGI workers, k8s replicas etc.) and some features (in particular: queries) are used. Please set SECRET_KEY to your own value, the same for all app replicas. This will be REQUIRED starting with Puppetboard 5.x which will NOT contain the default value anymore. Please see [#721](https://github.com/voxpupuli/puppetboard/issues/721) for more info. +- `PUPPETDB_TIMEOUT`: Defaults to 20 seconds, but you might need to increase this value. It depends on how big the + results are when querying PuppetDB. This behaviour will change in a future release when pagination will be introduced. +- `UNRESPONSIVE_HOURS`: The amount of hours since the last check-in after which a node is considered unresponsive. +- `LOGLEVEL`: A string representing the loglevel. It defaults to `'info'` but can be changed to `'warning'` or + `'critical'` for less verbose logging or `'debug'` for more information. +- `ENABLE_QUERY`: Defaults to `True` causing a Query tab to show up in the web interface allowing users to write + and execute arbitrary queries against a set of endpoints in PuppetDB. Change this to `False` to disable this. + See `ENABLED_QUERY_ENDPOINTS` to fine-tune which endpoints are allowed. +- `ENABLED_QUERY_ENDPOINTS`: If `ENABLE_QUERY` is `True`, allow to fine tune the endpoints of PuppetDB APIs that + can be queried. It must be a list of strings of PuppetDB endpoints for which the query is enabled. + See the `QUERY_ENDPOINTS` constant in the `puppetboard.app` module for a list of the available endpoints. +- `GRAPH_TYPE`: Specify the type of graph to display. Default is + pie, other good option is donut. Other choices can be found here: + \_C3JS\_documentation\` +- `GRAPH_FACTS`: A list of fact names to tell PuppetBoard to generate a pie-chart on the fact page. With some fact + values being unique per node, like ipaddress, uuid, and serial number, as well as structured facts it was no longer + feasible to generate a graph for everything. +- `INVENTORY_FACTS`: A list of tuples that serve as the column header and the fact name to search for to create + the inventory page. If a fact is not found for a node then `undef` is printed. +- `INVENTORY_FACT_TEMPLATES`: A mapping between fact name and jinja template to customize display +- `ENABLE_CATALOG`: If set to `True` allows the user to view a node's latest catalog. This includes all managed + resources, their file-system locations and their relationships, if available. Defaults to `False`. +- `REFRESH_RATE`: Defaults to `30` the number of seconds to wait until the index page is automatically refreshed. +- `DEFAULT_ENVIRONMENT`: Defaults to `'production'`, as the name suggests, load all information filtered by this + environment value. +- `REPORTS_COUNT`: Defaults to `10` the limit of the number of reports to load on the node or any reports page. +- `OFFLINE_MODE`: If set to `True` load static assets (jquery, semantic-ui, etc) from the local web server instead + of a CDN. Defaults to `False`. +- `DAILY_REPORTS_CHART_ENABLED`: Enable the use of daily chart graphs when looking at dashboard and node view. +- `DAILY_REPORTS_CHART_DAYS`: Number of days to show history for on the daily report graphs. +- `DISPLAYED_METRICS`: Metrics to show when displaying node summary. Example: `'resources.total'`, `'events.noop'`. +- `TABLE_COUNT_SELECTOR`: Configure the dropdown to limit number of hosts to show per page. +- `LITTLE_TABLE_COUNT`: Default number of reports to show when when looking at a node. +- `NORMAL_TABLE_COUNT`: Default number of nodes to show when displaying reports and catalog nodes. +- `LOCALISE_TIMESTAMP`: If set to `True` then timestamps are shown using your browser's timezone. Otherwise UTC is used. Defaults to `True`. +- `WITH_EVENT_NUMBERS`: If set to `True` then Overview and Nodes list shows exact number of changed resources + in the last report. Otherwise shows only 'some' string if there are resources with given status. Setting this + to `False` gives performance benefits, especially in big Puppet environments (more than few hundreds of nodes). + Defaults to `True`. +- `ENABLE_CLASS`: If set to `True` allows the user to view the number of resource events (number of changed resources in the last report) grouped by class. + The resource events are grouped by their status ('failure', 'success', 'noop'). +- `CLASS_EVENTS_STATUS_COLUMNS`: A mapping between the status of the resource events and the name of the columns of the table to display. +- `CACHE_TYPE`: Specifies which type of caching object to use when `SCHEDULER_ENABLED` is set to `True`. + The cache is used for the classes view (`ENABLE_CLASS` is set to `True`) which requires parsing the events of all the latest reports to group them by Puppet class. + If the last report is present in the cache, we do not parse the events, which avoids unnecessary processing. + If you configure more than one worker, you must use a shared backend (e.g. `MemcachedCache`) to allow the sharing of the cache between the processes. + Indeed, the `SimpleCache` type does not allow sharing the cache between processes, it uses the process memory to store the cache. + Defaults to `SimpleCache`. +- `CACHE_DEFAULT_TIMEOUT`: Cache lifetime in second. Defaults to `3600`. +- `SCHEDULER_ENABLED`: If set to `True` then a scheduler instance is created in order to execute scheduled jobs. Defaults to `False`. +- `SCHEDULER_JOBS`: List of the scheduled jobs to trigger within a worker. + A job can for example be used to compute a result to be cached. This is the case for the classes view which uses a job to pre-compute at regular intervals the results to be displayed. + Each scheduled job must contain the following fields: `id`, `func`, `trigger`, `seconds`. +- `SCHEDULER_LOCK_BIND_PORT`: Specifies an available port that allows a single worker to listen on it. + This allows to configure scheduled jobs in a single worker. Defaults to `49100`. +## Getting Help +For questions or bug reports you can file an [issue](https://github.com/voxpupuli/puppetboard/issues). +## Contributing +### Development +Puppetboard relies on the [pypuppetdb](https://pypi.org/project/pypuppetdb/) library to fetch data from PuppetDB +and is built with the help of the [Flask](https://flask.palletsprojects.com) microframework. +If you wish to hack on Puppetboard you should fork/clone the Github repository and then install the requirements through: +```bash +pip install --upgrade wheel setuptools +python setup.py develop +pip install --upgrade -r requirements-test.txt +mypy --install-types --non-interactive puppetboard/ test/ +``` +You're advised to do this inside a virtualenv specifically created to work on Puppetboard as to not pollute your global Python installation. +You can run the tests with: +```bash +pytest --cov=. --cov-report=xml --strict-markers --mypy puppetboard test +pylint --errors-only puppetboard test +``` +You can run the app it in development mode by simply executing: +```bash +flask run +``` +You can specify listening host and port with environment variables or command line otions: +```bash +export FLASK_RUN_HOST=0.0.0.0 +export FLASK_RUN_PORT=8000 +flask run +``` +or +```bash +flask run --host '0.0.0.0' --port '8000' +``` +Use `PUPPETBOARD_SETTINGS` to change the different settings or patch `default_settings.py` directly. +Take care not to include your local changes on that file when submitting patches for Puppetboard. +Place a `settings.py` file inside the base directory of the git repository that will be used, if the environment +variable is not set. +We welcome contributions to this project. However, there are a few ground rules contributors should be aware of. +### License +This project is licensed under the Apache v2.0 License. As such, your contributions, once accepted, are automatically +covered by this license. +### Commit messages +Write decent commit messages. Don't use swear words and refrain from uninformative commit messages as 'fixed typo'. +The preferred format of a commit message: + docs/quickstart: Fixed a typo in the Nodes section. + If needed, elaborate further on this commit. Feel free to write a + complete blog post here if that helps us understand what this is + all about. + Fixes #4 and resolves #2. +If you'd like a more elaborate guide on how to write and format your commit messages have a look at [this post +by Tim Pope](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). +## More Screenshots +* Overview / Index / Homepage +![Overview / Index / Homepage](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/overview.png) +* Nodes view, all active nodes +![Nodes view, all active nodes](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/nodes.png) +* Single node page / overview +![Single node page / overview](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/node.png) +* Report view +![Report view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/report.png) +* Facts view +![Facts view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/facts.png) +* Single fact, with graphs +![Single fact, with graphs](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/fact.png) +* All nodes that have this fact with that value +![All nodes that have this fact with that value](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/fact_value.png) +* Query view - results as table +![Query view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/query_result_table.png) +* Query view - results as JSON +![Query view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/query_result_json.png) +* Metrics view +![Metrics view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/metrics.png) +* Single metric +![Single metric](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/metric.png) +* Inventory view +![Inventory view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/inventory.png) +* Classes view, group the resource events of the last reports by Puppet class +![Classes view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/classes.png) +* Class view, list the nodes with almost one resource event for a given class +![Class view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/class.png) +# Legal +The app code is licensed under the [Apache License, Version 2.0](./LICENSE). +The favicon has been created based on the icon created by [Jonathan Coutiño](https://thenounproject.com/ralts01/) +under the [Attribution 3.0 Unported (CC BY 3.0) license](https://creativecommons.org/licenses/by/3.0/), +downloaded from the [Noun Project](https://thenounproject.com). + +%package -n python3-puppetboard +Summary: Web frontend for PuppetDB +Provides: python-puppetboard +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-puppetboard +``` +``` +PUPPETDB_CERT=LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ== +``` +For information about how to generate the correct keys please refer to the +[pypuppetdb documentation](https://pypuppetdb.readthedocs.io/en/latest/connecting.html#ssl). Alternatively it is possible +to explicitly specify the protocol to be used setting the `PUPPETDB_PROTO` variable. +Other settings that might be interesting, in no particular order: +- `FAVORITE_ENVS`: an ordered list of Puppet environment names that will be shown immediately after "All Environments" + and before other environments (which are sorted by name) in the dropdown for choosing the environment shown + in the top-right of the UI. Environments listed here that do not really exist in your deployment are silently ignored. +- `SHOW_ERROR_AS`: `friendly` or `raw`. The former makes Puppet run errors in Report and Failures views shown + in a modified, (arguably) more user-friendly form. The latter shows them as they are. + Defaults to `friendly`. +- `CODE_PREFIX_TO_REMOVE`: what code path that should be shortened in "Friendly errors" to "…" for readability. + A regexp. Defaults to `/etc/puppetlabs/code/environments(/.*?/modules)?`. +- `SECRET_KEY`: Refer to [Flask documentation](https://flask.palletsprojects.com/en/2.0.x/quickstart/#sessions), + section "How to generate good secret keys" for more info. Defaults to a random 64-char string generated by `secrets.token_hex(32)`, prepended with a `default-` string. **Warning** Leaving SECRET_KEY set to a default value WILL cause issues when the app is restarted or has more than 1 replica (f.e. uWSGI workers, k8s replicas etc.) and some features (in particular: queries) are used. Please set SECRET_KEY to your own value, the same for all app replicas. This will be REQUIRED starting with Puppetboard 5.x which will NOT contain the default value anymore. Please see [#721](https://github.com/voxpupuli/puppetboard/issues/721) for more info. +- `PUPPETDB_TIMEOUT`: Defaults to 20 seconds, but you might need to increase this value. It depends on how big the + results are when querying PuppetDB. This behaviour will change in a future release when pagination will be introduced. +- `UNRESPONSIVE_HOURS`: The amount of hours since the last check-in after which a node is considered unresponsive. +- `LOGLEVEL`: A string representing the loglevel. It defaults to `'info'` but can be changed to `'warning'` or + `'critical'` for less verbose logging or `'debug'` for more information. +- `ENABLE_QUERY`: Defaults to `True` causing a Query tab to show up in the web interface allowing users to write + and execute arbitrary queries against a set of endpoints in PuppetDB. Change this to `False` to disable this. + See `ENABLED_QUERY_ENDPOINTS` to fine-tune which endpoints are allowed. +- `ENABLED_QUERY_ENDPOINTS`: If `ENABLE_QUERY` is `True`, allow to fine tune the endpoints of PuppetDB APIs that + can be queried. It must be a list of strings of PuppetDB endpoints for which the query is enabled. + See the `QUERY_ENDPOINTS` constant in the `puppetboard.app` module for a list of the available endpoints. +- `GRAPH_TYPE`: Specify the type of graph to display. Default is + pie, other good option is donut. Other choices can be found here: + \_C3JS\_documentation\` +- `GRAPH_FACTS`: A list of fact names to tell PuppetBoard to generate a pie-chart on the fact page. With some fact + values being unique per node, like ipaddress, uuid, and serial number, as well as structured facts it was no longer + feasible to generate a graph for everything. +- `INVENTORY_FACTS`: A list of tuples that serve as the column header and the fact name to search for to create + the inventory page. If a fact is not found for a node then `undef` is printed. +- `INVENTORY_FACT_TEMPLATES`: A mapping between fact name and jinja template to customize display +- `ENABLE_CATALOG`: If set to `True` allows the user to view a node's latest catalog. This includes all managed + resources, their file-system locations and their relationships, if available. Defaults to `False`. +- `REFRESH_RATE`: Defaults to `30` the number of seconds to wait until the index page is automatically refreshed. +- `DEFAULT_ENVIRONMENT`: Defaults to `'production'`, as the name suggests, load all information filtered by this + environment value. +- `REPORTS_COUNT`: Defaults to `10` the limit of the number of reports to load on the node or any reports page. +- `OFFLINE_MODE`: If set to `True` load static assets (jquery, semantic-ui, etc) from the local web server instead + of a CDN. Defaults to `False`. +- `DAILY_REPORTS_CHART_ENABLED`: Enable the use of daily chart graphs when looking at dashboard and node view. +- `DAILY_REPORTS_CHART_DAYS`: Number of days to show history for on the daily report graphs. +- `DISPLAYED_METRICS`: Metrics to show when displaying node summary. Example: `'resources.total'`, `'events.noop'`. +- `TABLE_COUNT_SELECTOR`: Configure the dropdown to limit number of hosts to show per page. +- `LITTLE_TABLE_COUNT`: Default number of reports to show when when looking at a node. +- `NORMAL_TABLE_COUNT`: Default number of nodes to show when displaying reports and catalog nodes. +- `LOCALISE_TIMESTAMP`: If set to `True` then timestamps are shown using your browser's timezone. Otherwise UTC is used. Defaults to `True`. +- `WITH_EVENT_NUMBERS`: If set to `True` then Overview and Nodes list shows exact number of changed resources + in the last report. Otherwise shows only 'some' string if there are resources with given status. Setting this + to `False` gives performance benefits, especially in big Puppet environments (more than few hundreds of nodes). + Defaults to `True`. +- `ENABLE_CLASS`: If set to `True` allows the user to view the number of resource events (number of changed resources in the last report) grouped by class. + The resource events are grouped by their status ('failure', 'success', 'noop'). +- `CLASS_EVENTS_STATUS_COLUMNS`: A mapping between the status of the resource events and the name of the columns of the table to display. +- `CACHE_TYPE`: Specifies which type of caching object to use when `SCHEDULER_ENABLED` is set to `True`. + The cache is used for the classes view (`ENABLE_CLASS` is set to `True`) which requires parsing the events of all the latest reports to group them by Puppet class. + If the last report is present in the cache, we do not parse the events, which avoids unnecessary processing. + If you configure more than one worker, you must use a shared backend (e.g. `MemcachedCache`) to allow the sharing of the cache between the processes. + Indeed, the `SimpleCache` type does not allow sharing the cache between processes, it uses the process memory to store the cache. + Defaults to `SimpleCache`. +- `CACHE_DEFAULT_TIMEOUT`: Cache lifetime in second. Defaults to `3600`. +- `SCHEDULER_ENABLED`: If set to `True` then a scheduler instance is created in order to execute scheduled jobs. Defaults to `False`. +- `SCHEDULER_JOBS`: List of the scheduled jobs to trigger within a worker. + A job can for example be used to compute a result to be cached. This is the case for the classes view which uses a job to pre-compute at regular intervals the results to be displayed. + Each scheduled job must contain the following fields: `id`, `func`, `trigger`, `seconds`. +- `SCHEDULER_LOCK_BIND_PORT`: Specifies an available port that allows a single worker to listen on it. + This allows to configure scheduled jobs in a single worker. Defaults to `49100`. +## Getting Help +For questions or bug reports you can file an [issue](https://github.com/voxpupuli/puppetboard/issues). +## Contributing +### Development +Puppetboard relies on the [pypuppetdb](https://pypi.org/project/pypuppetdb/) library to fetch data from PuppetDB +and is built with the help of the [Flask](https://flask.palletsprojects.com) microframework. +If you wish to hack on Puppetboard you should fork/clone the Github repository and then install the requirements through: +```bash +pip install --upgrade wheel setuptools +python setup.py develop +pip install --upgrade -r requirements-test.txt +mypy --install-types --non-interactive puppetboard/ test/ +``` +You're advised to do this inside a virtualenv specifically created to work on Puppetboard as to not pollute your global Python installation. +You can run the tests with: +```bash +pytest --cov=. --cov-report=xml --strict-markers --mypy puppetboard test +pylint --errors-only puppetboard test +``` +You can run the app it in development mode by simply executing: +```bash +flask run +``` +You can specify listening host and port with environment variables or command line otions: +```bash +export FLASK_RUN_HOST=0.0.0.0 +export FLASK_RUN_PORT=8000 +flask run +``` +or +```bash +flask run --host '0.0.0.0' --port '8000' +``` +Use `PUPPETBOARD_SETTINGS` to change the different settings or patch `default_settings.py` directly. +Take care not to include your local changes on that file when submitting patches for Puppetboard. +Place a `settings.py` file inside the base directory of the git repository that will be used, if the environment +variable is not set. +We welcome contributions to this project. However, there are a few ground rules contributors should be aware of. +### License +This project is licensed under the Apache v2.0 License. As such, your contributions, once accepted, are automatically +covered by this license. +### Commit messages +Write decent commit messages. Don't use swear words and refrain from uninformative commit messages as 'fixed typo'. +The preferred format of a commit message: + docs/quickstart: Fixed a typo in the Nodes section. + If needed, elaborate further on this commit. Feel free to write a + complete blog post here if that helps us understand what this is + all about. + Fixes #4 and resolves #2. +If you'd like a more elaborate guide on how to write and format your commit messages have a look at [this post +by Tim Pope](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). +## More Screenshots +* Overview / Index / Homepage +![Overview / Index / Homepage](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/overview.png) +* Nodes view, all active nodes +![Nodes view, all active nodes](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/nodes.png) +* Single node page / overview +![Single node page / overview](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/node.png) +* Report view +![Report view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/report.png) +* Facts view +![Facts view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/facts.png) +* Single fact, with graphs +![Single fact, with graphs](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/fact.png) +* All nodes that have this fact with that value +![All nodes that have this fact with that value](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/fact_value.png) +* Query view - results as table +![Query view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/query_result_table.png) +* Query view - results as JSON +![Query view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/query_result_json.png) +* Metrics view +![Metrics view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/metrics.png) +* Single metric +![Single metric](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/metric.png) +* Inventory view +![Inventory view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/inventory.png) +* Classes view, group the resource events of the last reports by Puppet class +![Classes view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/classes.png) +* Class view, list the nodes with almost one resource event for a given class +![Class view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/class.png) +# Legal +The app code is licensed under the [Apache License, Version 2.0](./LICENSE). +The favicon has been created based on the icon created by [Jonathan Coutiño](https://thenounproject.com/ralts01/) +under the [Attribution 3.0 Unported (CC BY 3.0) license](https://creativecommons.org/licenses/by/3.0/), +downloaded from the [Noun Project](https://thenounproject.com). + +%package help +Summary: Development documents and examples for puppetboard +Provides: python3-puppetboard-doc +%description help +``` +``` +PUPPETDB_CERT=LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ== +``` +For information about how to generate the correct keys please refer to the +[pypuppetdb documentation](https://pypuppetdb.readthedocs.io/en/latest/connecting.html#ssl). Alternatively it is possible +to explicitly specify the protocol to be used setting the `PUPPETDB_PROTO` variable. +Other settings that might be interesting, in no particular order: +- `FAVORITE_ENVS`: an ordered list of Puppet environment names that will be shown immediately after "All Environments" + and before other environments (which are sorted by name) in the dropdown for choosing the environment shown + in the top-right of the UI. Environments listed here that do not really exist in your deployment are silently ignored. +- `SHOW_ERROR_AS`: `friendly` or `raw`. The former makes Puppet run errors in Report and Failures views shown + in a modified, (arguably) more user-friendly form. The latter shows them as they are. + Defaults to `friendly`. +- `CODE_PREFIX_TO_REMOVE`: what code path that should be shortened in "Friendly errors" to "…" for readability. + A regexp. Defaults to `/etc/puppetlabs/code/environments(/.*?/modules)?`. +- `SECRET_KEY`: Refer to [Flask documentation](https://flask.palletsprojects.com/en/2.0.x/quickstart/#sessions), + section "How to generate good secret keys" for more info. Defaults to a random 64-char string generated by `secrets.token_hex(32)`, prepended with a `default-` string. **Warning** Leaving SECRET_KEY set to a default value WILL cause issues when the app is restarted or has more than 1 replica (f.e. uWSGI workers, k8s replicas etc.) and some features (in particular: queries) are used. Please set SECRET_KEY to your own value, the same for all app replicas. This will be REQUIRED starting with Puppetboard 5.x which will NOT contain the default value anymore. Please see [#721](https://github.com/voxpupuli/puppetboard/issues/721) for more info. +- `PUPPETDB_TIMEOUT`: Defaults to 20 seconds, but you might need to increase this value. It depends on how big the + results are when querying PuppetDB. This behaviour will change in a future release when pagination will be introduced. +- `UNRESPONSIVE_HOURS`: The amount of hours since the last check-in after which a node is considered unresponsive. +- `LOGLEVEL`: A string representing the loglevel. It defaults to `'info'` but can be changed to `'warning'` or + `'critical'` for less verbose logging or `'debug'` for more information. +- `ENABLE_QUERY`: Defaults to `True` causing a Query tab to show up in the web interface allowing users to write + and execute arbitrary queries against a set of endpoints in PuppetDB. Change this to `False` to disable this. + See `ENABLED_QUERY_ENDPOINTS` to fine-tune which endpoints are allowed. +- `ENABLED_QUERY_ENDPOINTS`: If `ENABLE_QUERY` is `True`, allow to fine tune the endpoints of PuppetDB APIs that + can be queried. It must be a list of strings of PuppetDB endpoints for which the query is enabled. + See the `QUERY_ENDPOINTS` constant in the `puppetboard.app` module for a list of the available endpoints. +- `GRAPH_TYPE`: Specify the type of graph to display. Default is + pie, other good option is donut. Other choices can be found here: + \_C3JS\_documentation\` +- `GRAPH_FACTS`: A list of fact names to tell PuppetBoard to generate a pie-chart on the fact page. With some fact + values being unique per node, like ipaddress, uuid, and serial number, as well as structured facts it was no longer + feasible to generate a graph for everything. +- `INVENTORY_FACTS`: A list of tuples that serve as the column header and the fact name to search for to create + the inventory page. If a fact is not found for a node then `undef` is printed. +- `INVENTORY_FACT_TEMPLATES`: A mapping between fact name and jinja template to customize display +- `ENABLE_CATALOG`: If set to `True` allows the user to view a node's latest catalog. This includes all managed + resources, their file-system locations and their relationships, if available. Defaults to `False`. +- `REFRESH_RATE`: Defaults to `30` the number of seconds to wait until the index page is automatically refreshed. +- `DEFAULT_ENVIRONMENT`: Defaults to `'production'`, as the name suggests, load all information filtered by this + environment value. +- `REPORTS_COUNT`: Defaults to `10` the limit of the number of reports to load on the node or any reports page. +- `OFFLINE_MODE`: If set to `True` load static assets (jquery, semantic-ui, etc) from the local web server instead + of a CDN. Defaults to `False`. +- `DAILY_REPORTS_CHART_ENABLED`: Enable the use of daily chart graphs when looking at dashboard and node view. +- `DAILY_REPORTS_CHART_DAYS`: Number of days to show history for on the daily report graphs. +- `DISPLAYED_METRICS`: Metrics to show when displaying node summary. Example: `'resources.total'`, `'events.noop'`. +- `TABLE_COUNT_SELECTOR`: Configure the dropdown to limit number of hosts to show per page. +- `LITTLE_TABLE_COUNT`: Default number of reports to show when when looking at a node. +- `NORMAL_TABLE_COUNT`: Default number of nodes to show when displaying reports and catalog nodes. +- `LOCALISE_TIMESTAMP`: If set to `True` then timestamps are shown using your browser's timezone. Otherwise UTC is used. Defaults to `True`. +- `WITH_EVENT_NUMBERS`: If set to `True` then Overview and Nodes list shows exact number of changed resources + in the last report. Otherwise shows only 'some' string if there are resources with given status. Setting this + to `False` gives performance benefits, especially in big Puppet environments (more than few hundreds of nodes). + Defaults to `True`. +- `ENABLE_CLASS`: If set to `True` allows the user to view the number of resource events (number of changed resources in the last report) grouped by class. + The resource events are grouped by their status ('failure', 'success', 'noop'). +- `CLASS_EVENTS_STATUS_COLUMNS`: A mapping between the status of the resource events and the name of the columns of the table to display. +- `CACHE_TYPE`: Specifies which type of caching object to use when `SCHEDULER_ENABLED` is set to `True`. + The cache is used for the classes view (`ENABLE_CLASS` is set to `True`) which requires parsing the events of all the latest reports to group them by Puppet class. + If the last report is present in the cache, we do not parse the events, which avoids unnecessary processing. + If you configure more than one worker, you must use a shared backend (e.g. `MemcachedCache`) to allow the sharing of the cache between the processes. + Indeed, the `SimpleCache` type does not allow sharing the cache between processes, it uses the process memory to store the cache. + Defaults to `SimpleCache`. +- `CACHE_DEFAULT_TIMEOUT`: Cache lifetime in second. Defaults to `3600`. +- `SCHEDULER_ENABLED`: If set to `True` then a scheduler instance is created in order to execute scheduled jobs. Defaults to `False`. +- `SCHEDULER_JOBS`: List of the scheduled jobs to trigger within a worker. + A job can for example be used to compute a result to be cached. This is the case for the classes view which uses a job to pre-compute at regular intervals the results to be displayed. + Each scheduled job must contain the following fields: `id`, `func`, `trigger`, `seconds`. +- `SCHEDULER_LOCK_BIND_PORT`: Specifies an available port that allows a single worker to listen on it. + This allows to configure scheduled jobs in a single worker. Defaults to `49100`. +## Getting Help +For questions or bug reports you can file an [issue](https://github.com/voxpupuli/puppetboard/issues). +## Contributing +### Development +Puppetboard relies on the [pypuppetdb](https://pypi.org/project/pypuppetdb/) library to fetch data from PuppetDB +and is built with the help of the [Flask](https://flask.palletsprojects.com) microframework. +If you wish to hack on Puppetboard you should fork/clone the Github repository and then install the requirements through: +```bash +pip install --upgrade wheel setuptools +python setup.py develop +pip install --upgrade -r requirements-test.txt +mypy --install-types --non-interactive puppetboard/ test/ +``` +You're advised to do this inside a virtualenv specifically created to work on Puppetboard as to not pollute your global Python installation. +You can run the tests with: +```bash +pytest --cov=. --cov-report=xml --strict-markers --mypy puppetboard test +pylint --errors-only puppetboard test +``` +You can run the app it in development mode by simply executing: +```bash +flask run +``` +You can specify listening host and port with environment variables or command line otions: +```bash +export FLASK_RUN_HOST=0.0.0.0 +export FLASK_RUN_PORT=8000 +flask run +``` +or +```bash +flask run --host '0.0.0.0' --port '8000' +``` +Use `PUPPETBOARD_SETTINGS` to change the different settings or patch `default_settings.py` directly. +Take care not to include your local changes on that file when submitting patches for Puppetboard. +Place a `settings.py` file inside the base directory of the git repository that will be used, if the environment +variable is not set. +We welcome contributions to this project. However, there are a few ground rules contributors should be aware of. +### License +This project is licensed under the Apache v2.0 License. As such, your contributions, once accepted, are automatically +covered by this license. +### Commit messages +Write decent commit messages. Don't use swear words and refrain from uninformative commit messages as 'fixed typo'. +The preferred format of a commit message: + docs/quickstart: Fixed a typo in the Nodes section. + If needed, elaborate further on this commit. Feel free to write a + complete blog post here if that helps us understand what this is + all about. + Fixes #4 and resolves #2. +If you'd like a more elaborate guide on how to write and format your commit messages have a look at [this post +by Tim Pope](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). +## More Screenshots +* Overview / Index / Homepage +![Overview / Index / Homepage](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/overview.png) +* Nodes view, all active nodes +![Nodes view, all active nodes](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/nodes.png) +* Single node page / overview +![Single node page / overview](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/node.png) +* Report view +![Report view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/report.png) +* Facts view +![Facts view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/facts.png) +* Single fact, with graphs +![Single fact, with graphs](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/fact.png) +* All nodes that have this fact with that value +![All nodes that have this fact with that value](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/fact_value.png) +* Query view - results as table +![Query view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/query_result_table.png) +* Query view - results as JSON +![Query view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/query_result_json.png) +* Metrics view +![Metrics view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/metrics.png) +* Single metric +![Single metric](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/metric.png) +* Inventory view +![Inventory view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/inventory.png) +* Classes view, group the resource events of the last reports by Puppet class +![Classes view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/classes.png) +* Class view, list the nodes with almost one resource event for a given class +![Class view](https://raw.githubusercontent.com/voxpupuli/puppetboard/master/screenshots/class.png) +# Legal +The app code is licensed under the [Apache License, Version 2.0](./LICENSE). +The favicon has been created based on the icon created by [Jonathan Coutiño](https://thenounproject.com/ralts01/) +under the [Attribution 3.0 Unported (CC BY 3.0) license](https://creativecommons.org/licenses/by/3.0/), +downloaded from the [Noun Project](https://thenounproject.com). + +%prep +%autosetup -n puppetboard-4.3.0 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-puppetboard -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Fri May 05 2023 Python_Bot - 4.3.0-1 +- Package Spec generated diff --git a/sources b/sources new file mode 100644 index 0000000..d7c4c17 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +75323f79e788a9a0b63311ecc92fdc18 puppetboard-4.3.0.tar.gz -- cgit v1.2.3