{"id":13709619,"url":"https://github.com/voxpupuli/puppet-catalog-diff-viewer","last_synced_at":"2025-05-06T16:32:04.009Z","repository":{"id":32842844,"uuid":"36436354","full_name":"voxpupuli/puppet-catalog-diff-viewer","owner":"voxpupuli","description":"A viewer for the puppet-catalog-diff tool","archived":false,"fork":false,"pushed_at":"2024-12-16T14:03:26.000Z","size":431,"stargazers_count":29,"open_issues_count":3,"forks_count":12,"subscribers_count":44,"default_branch":"master","last_synced_at":"2025-04-27T17:39:51.704Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/voxpupuli.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"open_collective":"vox-pupuli","github":"voxpupuli"}},"created_at":"2015-05-28T12:17:56.000Z","updated_at":"2024-11-29T12:48:42.000Z","dependencies_parsed_at":"2023-01-14T22:24:28.281Z","dependency_job_id":"d4fe4738-2eb7-48a0-9ed6-58600d75d702","html_url":"https://github.com/voxpupuli/puppet-catalog-diff-viewer","commit_stats":{"total_commits":371,"total_committers":17,"mean_commits":"21.823529411764707","dds":"0.34231805929919135","last_synced_commit":"148fe383850e4f1fd7a25bc26d3e931b18c8691c"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpupuli%2Fpuppet-catalog-diff-viewer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpupuli%2Fpuppet-catalog-diff-viewer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpupuli%2Fpuppet-catalog-diff-viewer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpupuli%2Fpuppet-catalog-diff-viewer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/voxpupuli","download_url":"https://codeload.github.com/voxpupuli/puppet-catalog-diff-viewer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252721082,"owners_count":21793748,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest"],"created_at":"2024-08-02T23:00:42.542Z","updated_at":"2025-05-06T16:32:03.460Z","avatar_url":"https://github.com/voxpupuli.png","language":"JavaScript","funding_links":["https://opencollective.com/vox-pupuli","https://github.com/sponsors/voxpupuli"],"categories":["Programming"],"sub_categories":["Puppet"],"readme":"# Puppet Catalog Diff Viewer\n\n[![License](https://img.shields.io/github/license/voxpupuli/puppet-catalog-diff-viewer.svg)](https://github.com/voxpupuli/puppet-catalog-diff-viewer/blob/master/LICENSE)\n[![CI](https://github.com/voxpupuli/puppet-catalog-diff-viewer/actions/workflows/ci.yaml/badge.svg)](https://github.com/voxpupuli/puppet-catalog-diff-viewer/actions/workflows/ci.yaml)\n[![Donated by Camptocamp](https://img.shields.io/badge/donated%20by-camptocamp-fb7047.svg)](#transfer-notice)\n\nA viewer for json reports produced by [the puppet-catalog-diff tool](https://github.com/voxpupuli/puppet-catalog-diff)\n\nThe interface can be tried online at \u003chttp://voxpupuli.org/puppet-catalog-diff-viewer\u003e.\n\n## Acking diffs\n\nThis interface allows to ack differences in order to ease the report review. Differences are acked on all nodes that have the same resource with the same diff.\n\nA global acking button is available for sections which allows to ack all diffs in the section at once.\n\n## Starring diffs\n\nWhen using the global acking button, you might want to exclude some diffs from the global acking. Starring diffs does just that. Just as for acks, stars are cross-nodes.\n\n## Using with Docker\n\n```shell\n$ docker run -it --rm \\\n  -p 8080:80 \\\n  ghcr.io/voxpupuli/puppet-catalog-diff-viewer:development\n```\n\nwill let you access the catalog diff viewer at [http://localhost:8080](http://localhost:8080).\n\n## Server Side storage\n\nThe will automatically populate the drop-down list of available reports, if they can be read from `reportlist.json`.\nThis file contains a record of the json files in `data`.\nAssuming you have\n\n```text\ndata/\n  file1.json\n  file2.json\n```\n\nthe `reportlist.json` should have the format\n\n```json\n{\n  \"First Report\": \"file1\",\n  \"Second Report\": \"file2\"\n}\n```\n\nThe python script `generate_reportlist.py` will autopopulate it with all `data/*.json` using the filename also as key.\n\nWith the docker image, you can put everything in `/data`:\n\n```shell\n$ docker run -ti \\\n   -v ./data:/data \\\n   -p 8080:8080 \\\n   ghcr.io/voxpupuli/puppet-catalog-diff-viewer\n```\n\n## S3 storage\n\nThe viewer can automatically retrieve catalogs from an S3 bucket. In order to use this feature, create a `s3_credentials.js` file with the following variables:\n\n```javascript\nconst s3_bucketName = 'your-bucket-name';\nconst s3_access_key = 'your-access-key';\nconst s3_secret_key = 'your-secret-key';\n// something like this for standard s3 and the corresponding region\nconst s3_endpoint   = 's3.us-east-2.amazonaws.com';\n// for self hosted s3\nconst s3_endpoint   = 'http://your.endpoint.example.com:9000';\n\n// if you use a path within the bucket\nconst s3_bucketPathPrefix = 'your-prefix';\nconst s3_ForcePathStyle = true;\n```\n\nWith the docker image, you can use:\n\n```shell\n$ docker run -it --rm \\\n   -v ./s3_credentials.js:/data/s3_credentials.js:ro \\\n   -p 8080:8080 \\\n   ghcr.io/voxpupuli/puppet-catalog-diff-viewer:development\n```\n\nor using environment variables:\n\n```shell\n$ docker run -it --rm \\\n   -e S3_BUCKET=your-bucket-name \\\n   -e S3_ACCESS_KEY=your-access-key \\\n   -e S3_SECRET_KEY=your-secret-key \\\n   -p 8080:8080 \\\n   ghcr.io/voxpupuli/puppet-catalog-diff-viewer:development\n```\n\nMake sure the access key belongs to a user that can perform actions `s3:GetObject` and `s3:ListBucket` on the bucket. Here is an example bucket policy you can use to upload files from the catalog-diff machine and retrieve them in the viewer:\n\n```json\n{\n  \"Version\": \"2012-10-17\",\n  \"Id\": \"Policy1451988974568\",\n  \"Statement\": [\n    {\n      \"Sid\": \"Upload\",\n      \"Effect\": \"Allow\",\n      \"Principal\": {\n        \"AWS\": \"arn:aws:iam::123456789:user/uploader\"\n      },\n      \"Action\": \"s3:PutObject\",\n      \"Resource\": \"arn:aws:s3:::bucket-id/my-site/*\"\n    },\n    {\n      \"Sid\": \"ViewerList\",\n      \"Effect\": \"Allow\",\n      \"Principal\": {\n        \"AWS\": \"arn:aws:iam::123456789:user/viewer\"\n      },\n      \"Action\": \"s3:ListBucket\",\n      \"Resource\": \"arn:aws:s3:::bucket-id\"\n    },\n    {\n      \"Sid\": \"ViewerGet\",\n      \"Effect\": \"Allow\",\n      \"Principal\": {\n        \"AWS\": \"arn:aws:iam::123456789:user/viewer\"\n      },\n      \"Action\": \"s3:GetObject\",\n      \"Resource\": \"arn:aws:s3:::bucket-id/*\"\n    }\n  ]\n}\n```\n\n## Contributing\n\n### Build a release\n\nsee [RELEASE.md](RELEASE.md)\n\n## Transfer Notice\n\nThis project was originally authored by [Camptocamp](http://www.camptocamp.com).\nThe maintainer preferred that Vox Pupuli take ownership of the project for future improvement and maintenance.\nExisting pull requests and issues were transferred over, please fork and continue to contribute here instead of Camptocamp.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoxpupuli%2Fpuppet-catalog-diff-viewer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvoxpupuli%2Fpuppet-catalog-diff-viewer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoxpupuli%2Fpuppet-catalog-diff-viewer/lists"}