diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml new file mode 100644 index 0000000..6387529 --- /dev/null +++ b/.github/workflows/linting.yml @@ -0,0 +1,34 @@ +name: Linting action + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + # https://github.com/marketplace/actions/run-linkspector-with-reviewdog + check-links: + name: Run linkspector + runs-on: ubuntu-latest + steps: + - name: Repository checkout + uses: actions/checkout@v4 + - name: Run linkspector + uses: umbrelladocs/action-linkspector@v1 + with: + fail_on_error: true + # https://github.com/sindresorhus/awesome-lint + awesome-lint: + name: Awesome List lint + runs-on: ubuntu-latest + steps: + - name: Repository checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Run awesome-lint + run: npx awesome-lint + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..600d2d3 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.vscode \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..0792ced --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,16 @@ +# Contributing + +* Check if there are already Issues/Pull Requests on the same topic +* Fork the repository +* Edit `README.md`: + * Entries are like `* [project-name](http://example.com/) - A short description ends with a period.` + * If necessary, add a section and insert it in the Table of Contents + * Run [awesome-lint](https://github.com/sindresorhus/awesome-lint) on the content to check it before committing and fix any error + * Follow [Conventional Commits standard](https://www.conventionalcommits.org/en/v1.0.0/) +* Create a Pull Request: + * If adding a tool/project, name the PR `Add (tool/project)` + * The edits will be automatically tested with [awesome-lint](https://github.com/sindresorhus/awesome-lint) and [linkspector](https://github.com/marketplace/actions/run-linkspector-with-reviewdog). + + +## Tips +* If using [Markdown All in One](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one) on VSCode, config `"markdown.extension.toc.levels": "2..3"` \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/README.md b/README.md new file mode 100644 index 0000000..db7a4aa --- /dev/null +++ b/README.md @@ -0,0 +1,102 @@ +# Awesome Puppet [![Awesome](https://awesome.re/badge.svg)](https://awesome.re) + +An (opinionated) awesome list of resources about Puppet, a configuration +management software. + +It has been inspired by [rnelson0's list](https://github.com/rnelson0/awesome-puppet) and its forks, but it is not a fork of that list due to the lack of a license. + +**Disclaimer**: Puppet is a trademark of Puppet, Inc., Perforce Software, Inc. or an affiliate ([link](https://www.puppet.com/docs/puppet/8/copyright-trademark)). +This project is not representing these companies, nor is in any way endorsed by them. All other trademarks mentioned in this project are property of their respective owners. + +## Contents +- [Books](#books) +- [IDE tools](#ide-tools) +- [Learning](#learning) +- [Modules](#modules) + - [Modules Development](#modules-development) + - [Modules Management](#modules-management) +- [Puppet Tools](#puppet-tools) + - [Linters, Testers, Validators](#linters-testers-validators) + +## Books + +- [Puppet 8 for DevOps Engineers](https://www.packtpub.com/en-us/product/puppet-8-for-devops-engineers-9781803231709) - Probably the most up-to-date book about Puppet, focusing on the use of Puppet 8. +- [Puppet Best Practices](https://www.oreilly.com/library/view/puppet-best-practices/9781491922996/) - Written for Puppet 6, it's still a valid resource for Puppet 7/8 due to the focus on best practices and changes between these majors being mostly behind the scenes. + +## IDE tools + +- RubyMine and other JetBrains IDEs + - [Puppet Plugin for JetBrains IDEs](https://plugins.jetbrains.com/plugin/7180-puppet) - Provides formatting, highlighting, assistance and more for Puppet >= 3.x. +- Vim + - [vim-puppet](https://github.com/rodjek/vim-puppet) - Adds automatic alignment, formatting and highlighting for Puppet. +- Visual Studio Code\Codium and Theia IDE + - [Puppet VSCode extension](https://puppet-vscode.github.io/) - Available in [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=puppet.puppet-vscode) and [Open VSX Registry](https://open-vsx.org/extension/puppet/puppet-vscode). + Provides formatting, Intellisense, linting and more. + +## Learning + +- Hiera + - hiera-eyaml + - [Hiera-Eyaml: How to Use It - _Puppet Blog_](https://www.puppet.com/blog/puppet-eyaml-hiera-data) - Quick introduction to hiera-eyaml. + - [HOWTO Set Up and Utilize hiera-eyaml - _SIMP docs_](https://simp.readthedocs.io/en/master/HOWTO/20_Puppet/Hiera_eyaml.html) - Step-by-step introduction to hiera-eyaml. +- [Puppet Cookbook](https://www.puppetcookbook.com) - Cookbook of example solutions in Puppet for different tasks. +- [PuppetModule.info](https://www.puppetmodule.info/) - Community-maintained module documentation website. + - [Source](https://github.com/voxpupuli/puppetmodule.info) - Available on GitHub. +- r10k + - [Fattening the workflow, part 2: r10k - _Puppeteers blog_](https://www.puppeteers.net/blog/fattening-the-workflow-part-2-r10k/) - Quickstart on r10k. + - [Managing code with r10k - _Puppet Enterprise docs_](https://www.puppet.com/docs/pe/latest/r10k) - PE docs, but r10k can be used with Open Source Puppet. + +## Modules + +- [puppet-collections](https://github.com/voxpupuli/puppet-collections) - Iterator written in Puppet. +- [puppet-example](https://github.com/voxpupuli/puppet-example) - Example repository for Puppet modules automation and development. +- [puppet-extlib](https://github.com/voxpupuli/puppet-extlib) - Extension of the [Standard Library](https://github.com/puppetlabs/puppetlabs-stdlib). +- [puppet-healthcheck](https://github.com/voxpupuli/puppet-healthcheck) - Healthcheck resources. +- [puppet-puppet_certificate](https://github.com/voxpupuli/puppet-puppet_certificate) - Provider and resource for Puppet certificates. + +### Modules Development + +- [metadata-json-lint](https://github.com/voxpupuli/metadata-json-lint) - Validator/linter for Puppet modules' metadata.json. +- [puppet-ghostbuster](https://github.com/voxpupuli/puppet-ghostbuster) - Helps to find unused code in Puppet. +- [Puppet Development Kit](https://www.puppet.com/docs/pdk/latest/pdk.html) - Collection of tools to develop, validate and test Puppet modules. + +### Modules Management + +- [g10k](https://github.com/xorpaul/g10k) - A r10k fork in Go. +- [Jens](https://github.com/cernops/jens) - Python toolkit to generate Puppet environments dynamically based on control repositories. +- [librarian-puppet](https://github.com/voxpupuli/librarian-puppet) - Bundler to manage Puppet modules through a Puppetfile, with support for dependencies defined in Modulefile or metadata.json. +- [ModuleSync](https://github.com/voxpupuli/modulesync) - Ruby gem to synchronize meta-files (Gemfile, .gitignore etc) between Puppet modules of an organization. +- [Pdksync](https://github.com/puppetlabs/pdksync) - Tool synchronize settings between multiple Puppet modules through PDK. +- [puppet-blacksmith](https://github.com/voxpupuli/puppet-blacksmith) - Ruby gem with Rake tasks to manage a module on the Puppet Forge. +- [r10k](https://github.com/puppetlabs/r10k) - Tool to manage git/SVN-based environments and modules defined in a [Puppetfile](https://github.com/puppetlabs/r10k/blob/main/doc/puppetfile.mkd), but [without dependency resolving](https://github.com/puppetlabs/r10k/issues/1031). + - [puppet-r10k](https://github.com/voxpupuli/puppet-r10k) - Puppet module to manage r10k. + - [ra10ke](https://github.com/voxpupuli/ra10ke) - Rake tasks for r10k and Puppetfiles. + +## Puppet Tools + +- [Beaker](https://github.com/voxpupuli/beaker) - Tool to run acceptance acceptance tests using VMs. + - [beaker-hiera](https://github.com/voxpupuli/beaker-hiera) - Allows to use Hiera data in Beaker tests. +- [Hiera Data Manager](https://github.com/betadots/hdm) - Web interface to visualize/search Hiera data. + - [puppet-hdm](https://github.com/voxpupuli/puppet-hdm) - Puppet module to install/manage Hiera Data Manager. +- [hiera-eyaml](https://github.com/voxpupuli/hiera-eyaml) - Hiera backend that allows to encrypt values in Hiera YAML files. + - [hiera-eyaml-gpg](https://github.com/voxpupuli/hiera-eyaml-gpg) - Allows to use GPG encryption with hiera-eyaml. +- [Puppetboard](https://github.com/voxpupuli/puppetboard) - Web interface for PuppetDB that aims to be the equivalent of [Puppet Enterprise console](https://www.puppet.com/docs/pe/latest/console_accessing.html) for Open Source Puppet. + - [puppet-puppetboard](https://github.com/voxpupuli/puppet-puppetboard) - Puppet module to install Puppetboard. +- [Puppet Bolt](https://www.puppet.com/docs/bolt/latest/bolt.html) - Agent-less orchestration tool, to run tasks/scripts/commands on remote nodes through SSH or WinRM. + - [puppet-bolt](https://github.com/voxpupuli/puppet-bolt) - Puppet module to install/manage Bolt. +- [Puppet Catalog Diff](https://github.com/voxpupuli/puppet-catalog_diff) - Tool to compare Puppet catalogs. +- [Puppet Summary](https://github.com/skx/puppet-summary) - Web interface written in Go. + - [puppet-puppet_summary](https://github.com/voxpupuli/puppet-puppet_summary) - Puppet module to install/manage Puppet Summary. +- [pypuppetdb](https://github.com/voxpupuli/pypuppetdb) - Python library to interact with the PuppetDB API. + +### Linters, Testers, Validators + +- [onceover](https://github.com/voxpupuli/onceover) - Run tests against a Puppet control repository (for example used with r10k). +- [puppet-syntax](https://github.com/voxpupuli/puppet-syntax) - Syntax checks for manifests, templates and Hiera YAML. +- [puppet-lint](https://github.com/puppetlabs/puppet-lint) - Test code against the Puppet style guide. +- [rspec-puppet](https://github.com/puppetlabs/rspec-puppet) - RSpec tests for Puppet manifests. + + +## Contributing + +Contributions are welcome! [Guidelines are here](CONTRIBUTING.md).