Server automation framework and application

Overview

Puppet

RSpec tests Gem Version Inline docs

Puppet, an automated administrative engine for your Linux, Unix, and Windows systems, performs administrative tasks (such as adding users, installing packages, and updating server configurations) based on a centralized specification.

Documentation

Documentation for Puppet and related projects can be found online at the Puppet Docs site.

HTTP API

HTTP API Index

Installation

The best way to run Puppet is with Puppet Enterprise (PE), which also includes orchestration features, a web console, and professional support. The PE documentation is available here.

To install an open source release of Puppet, see the installation guide on the docs site.

If you need to run Puppet from source as a tester or developer, see the Quick Start to Developing on Puppet guide.

Developing and Contributing

We'd love to get contributions from you! For a quick guide to getting your system setup for developing, take a look at our Quickstart Guide. Once you are up and running, take a look at the Contribution Documents to see how to get your changes merged in.

For more complete docs on developing with Puppet, take a look at the rest of the developer documents.

Licensing

See LICENSE file. Puppet is licensed by Puppet, Inc. under the Apache license. Puppet, Inc. can be contacted at: [email protected]

Support

Please log tickets and issues at our JIRA tracker. A mailing list is available for asking questions and getting help from others, or if you prefer chat, we also have a Puppet Community slack.

We use semantic version numbers for our releases and recommend that users stay as up-to-date as possible by upgrading to patch releases and minor releases as they become available.

Bug fixes and ongoing development will occur in minor releases for the current major version. Security fixes will be backported to a previous major version on a best-effort basis, until the previous major version is no longer maintained.

For example: If a security vulnerability is discovered in Puppet 6.1.1, we would fix it in the 6 series, most likely as 6.1.2. Maintainers would then make a best effort to backport that fix onto the latest Puppet 5 release.

Long-term support, including security patches and bug fixes, is available for commercial customers. Please see the following page for more details:

Puppet Enterprise Support Lifecycle

Comments
  • Change Crypto Spec in accordance to bettercrypto.org

    Change Crypto Spec in accordance to bettercrypto.org

    The current puppet passanger crypto spec is 5yrs old (talked to the original author). I've adapted it to something sane and have taken the current recommendations for it by the bettercrypto(.org) project.

    opened by azet 74
  • (PUP-3930) Optimize `failed_dependencies?`

    (PUP-3930) Optimize `failed_dependencies?`

    I profiled puppet agent --test on one of my servers using stackprof [1] on Ruby 2.1.

    Something like 30% or more of the time was spent in Puppet::Graph::SimpleGraph#upstream_from_vertex, called from Puppet::Transaction#failed_dependencies?

    It turns out that, while evaluating the resource graph, when considering a resource, we look at the complete set of transitive dependencies to evaluate whether any of them have failed. This is hugely expensive, and moreover, is wasted work in the success case where no resources fail.

    Instead of all that work, this patch pushes the work to the failed nodes; When a node fails, we transitively walk the dependents of that node, and mark them as having failed dependencies, and then check that flag directly when considering whether to skip a node later.

    On my test system, this patch drops puppet agent --test runtime from about 40s to about 23s.

    [1] https://github.com/tmm1/stackprof

    opened by nelhage 38
  • (PUP-735) Fail when cannot apply complete catalog

    (PUP-735) Fail when cannot apply complete catalog

    Under some circumstances (eg. dependency cycle) when catalog could not be applied, Puppet didn't report failure (status unchanged, return code 0).

    Raise Puppet::Error so the failure gets logged and reported (status is "failed", return value is 1).

    opened by scenek 38
  • (PUP-7517) Allow agent daemon to time out stalled runs

    (PUP-7517) Allow agent daemon to time out stalled runs

    On occasion, a puppet agent can end up waiting indefinitely on some process that will never return or terminate. This patch adds a new setting, runtimeout, that can be used to specify the maximum duration allowed for a puppet run. When set to a non-zero value, the agent daemon will send a SIGTERM to any agent run it starts which exceeds this value.

    This patch does not handle runs started outside of the agent daemon by puppet agent --onetime.

    opened by Sharpie 35
  • (PUP-5844) Add Object type to the Puppet Type system

    (PUP-5844) Add Object type to the Puppet Type system

    This commit adds a new Object type to the Puppet Type system. The type is very similar to Struct in that it defines a hash of named types. There are some notable differences though:

    1. The Object type adds inheritance.
    2. An Object is only assignable to itself or to a parent type of itself.
    3. All keys of the Object must be non empty strings.
    4. An Object may redefine a parent member, but only if the type is equal or assignable to the type of that member. I.e. it may redefine it to a more special type.
    Language Blocked 
    opened by thallgren 33
  • (#4506) Revert e161cbc, which causes 'undefined allocator for Proc' errors

    (#4506) Revert e161cbc, which causes 'undefined allocator for Proc' errors

    I'm not familiar with why this causes damaged YAML output, but reverting this performance optimization commit repairs the issue for me with 3.0.0, 3.2.4, and 3.3.0-rc.

    See also http://projects.puppetlabs.com/issues/4506#note-22 for details about how this commit was identified.

    opened by floatingatoll 31
  • (#22703) Force encoding of comment value to ASCII-8BIT

    (#22703) Force encoding of comment value to ASCII-8BIT

    The comment field for user resources can often contain non-ASCII characters. Unfortunately, Puppet retrieves the existing value (current_value) as ASCII-8BIT, but strings containing non-ASCII characters are automatically turned into UTF-8, resulting in a failure to concatenate the strings in change_to_s, with messages such as the following in Puppet 3.2.4 with Ruby 1.9.3:

    Error: Could not convert change 'comment' to string: incompatible character encodings: ASCII-8BIT and UTF-8
    Error: Could not convert change 'comment' to string: incompatible character encodings: ASCII-8BIT and UTF-8
    Error: /User[rpinson]: Could not evaluate: Puppet::Util::Log requires a message
    

    which is due to the fact that current_value is encoded in ASCII-8BIT, but newvalue is in UTF-8 and not "softly" convertible when reaching change_to_s in property.rb.

    In order to allow proper management of non-ASCII characters in the comment field, this PR forces an ASCII-8BIT encoding on the comment property value in the type.

    Note: trying to force the encoding in Puppet code (using e.g. inline_template) doesn't solve anything, and patching change_to_s to force the encoding results in the resource not being idempotent anymore, since comparison fails (but change_to_s doesn't crash anymore).

    opened by raphink 30
  • (PUP-9792) Refresh lookup_options on config change

    (PUP-9792) Refresh lookup_options on config change

    If lookup_options is found in Hiera levels that utilise top scope variables as opposed to facts then unless all top scope variables are set before the first lookup, lookup_options gets cached once and is never refreshed.

    This change removes all caching so lookup_options is refreshed every time.

    Community 
    opened by bodgit 29
  • (PUP-5482) Flag that a type could not be found

    (PUP-5482) Flag that a type could not be found

    If a Ruby type is not available in the file system, every time it is found by the parser, the Autoloader will scan all over again the directories in search_directories for it. This generates tons of stat()s that can be saved.

    This patch annotates that a type could not be found so the next time it is required during the compilation of a catalog, the file system is not hammered again unnecessarily.

    This optimization has given us a ~61% reduction in the number of stats per compilation, as we make an extensive use of the concat module which only provides Puppet "defined types".

    opened by haus 29
  • add more control over certificate autosigning

    add more control over certificate autosigning

    This adds 2 features:

    csr_attributes_file (#7243)

    This adds a csr_attributes_file parameter to the puppet config which allows for specifying user defined attributes to be added to the CSR. The file is yaml instead of flat key/value as this allows you to have an array of values for a parameter (which is also allowed in a CSR). However if the user were to provide a hash in the yaml, or a nested array, it would probably break.

    Example file:

    
    ---
    1.3.6.1.4.1.34380.2.0: us-west-1a/i-355fb16d
    1.3.6.1.4.1.34380.2.1: MYSUPERSECRETKEY
    1.3.6.1.4.1.34380.3.3: puppet-dashboard-group-name
    

    autosign_command (#7244)

    This adds a autosign_command parameter to the puppet config which allows for running an external command to determine whether a certificate should be automatically signed or not. The command is passed the certificate name as the first argument. The command should then exit with status 0 to indicate that the certificate should be signed, and status non-0 to indicate it should not be signed.


    I use these 2 features for autosigning CSRs that come from EC2 autoscaled instances. Each instance runs a small userdata script which adds a secret key and the name of a dashboard group to the CSR. The autosigning script then looks for the secret to verify the box is indeed mine, adds the box to the requested group in the puppet dashboard, and then exits with 0 to indicate puppet is OK to sign the cert.


    I have not had a chance to develop any tests for these changes. It has been on my todo list, but I have received numerous requests to create this pull request. Should I get time to create the tests before anyone else I will do so, but I do not know when that would be.

    opened by phemmer 29
  • (PUP-5482) Flag that a type could not be found

    (PUP-5482) Flag that a type could not be found

    If a Ruby type is not available in the file system, every time it is found by the parser, the Autoloader will scan all over again the directories in search_directories for it. This generates tons of stat()s that can be saved.

    This patch annotates that a type could not be found so the next time it is required during the compilation of a catalog, the file system is not hammered again unnecessarily.

    This optimization has given us a ~61% reduction in the number of stats per compilation, as we make an extensive use of the concat module which only provides Puppet "defined types".

    #puppethack 
    opened by nbarrientos 28
  • (maint) Require vcr 6.1 - 6.x

    (maint) Require vcr 6.1 - 6.x

    Specs generated a warning due to an issue with vcr < 6.1 on Ruby 3.1+. See https://github.com/vcr/vcr/commit/98cc00b57369dfd671c227be6aa3f03d7475cb6c

    opened by joshcooper 1
  • (maint) Delete duplicate beaker tests

    (maint) Delete duplicate beaker tests

    Early return behavior is already tested in spec/unit/functions/return_spec.rb

    We test puppet apply basics and file checksum in multiple places.

    Also remove apply basics from Rakefile task

    opened by joshcooper 0
  • (maint) Make loglevel default more efficient

    (maint) Make loglevel default more efficient

    This line is not sane for the setting of the log_level default

    loglevel = %x{ #{puppet_path} config --section agent --log_level notice print log_level }.chomp

    this sets log_level to notice, and then return the output of the log_level setting

      loglevel = "notice"
    

    is the same thing with fewer steps

    opened by MartyEwings 0
  • Make cache and values fully thread-safe

    Make cache and values fully thread-safe

    Not locking the default initialization can lead to race-conditions.

    Note: not sure if I should use one or two mutexes as I am not familiar with this code enough to make the judgment.

    ref: https://github.com/ruby-concurrency/concurrent-ruby/issues/970

    opened by mensfeld 2
Software to automate the management and configuration of any infrastructure or application at scale. Get access to the Salt software package repository here:

Latest Salt Documentation Open an issue (bug report, feature request, etc.) Salt is the world’s fastest, most intelligent and scalable automation engi

SaltStack 13k Jan 8, 2023
Monitor for any changes in your php application and automatically restart it (suitable for async apps).

PHP-watcher PHP-watcher helps develop long-running PHP applications by automatically restarting them when file changes in the directory are detected.

Sergey Zhuk 373 Dec 21, 2022
A package that allows you to generate simple and fast Docker configurations for your Laravel application!

A package that allows you to generate simple and fast Docker configurations for your Laravel application!

Lucas Nepomuceno 3 Oct 8, 2022
Quickly deploy a seedbox with self-hosted services and a web portal using Docker and docker-compose.

Seedbox Quickly deploy and configure a seedbox with self-hosted services and a web portal using Docker and a single docker-compose.yml file. Screensho

null 6 Dec 7, 2022
Finally a sane way to register available commands and arguments and match your command line in PHP

clue/commander Finally a sane way to register available commands and arguments and match your command line in PHP. You want to build a command line in

Christian Lück 172 Nov 27, 2022
Vagrant is a tool for building and distributing development environments.

Vagrant Website: https://www.vagrantup.com/ Source: https://github.com/hashicorp/vagrant HashiCorp Discuss: https://discuss.hashicorp.com/c/vagrant/24

HashiCorp 24.8k Jan 2, 2023
A modern Docker LAMP stack and MEAN stack for local development

The Devilbox Usage | Architecture | Community | Features | Intranet | Screenshots | Contributing | Logos | License Support for valid https out of the

cytopia 4k Jan 8, 2023
Up and running with small Docker environments

Vessel Up and running with small Docker dev environments. Documentation Full documentation can be found at https://vessel.shippingdocker.com. Install

Shipping Docker 1.1k Dec 17, 2022
A development tool for all your projects that is fast, easy, powerful and liberating

Lando A Liberating Dev Tool For All Your Projects The local development and DevOps tool trusted by professional developers across the galaxy. Free you

Lando 3.6k Jan 7, 2023
🎲Neard is a portable WAMP software stack involving useful binaries, tools and applications for your web development.

About Neard is a portable WAMP software stack involving useful binaries, tools and applications for your web development. It also offers several versi

Neard 335 Dec 22, 2022
Oxygen Builder's better workflow and environment

Oxygen Builder's better workflow and environment Built with ❤️ Official Website | Documentation | Change Log Supporting Artifact is an open source pro

AncientWorks 10 Dec 3, 2022
Laravel 5 with Dockerized Gulp, PHP-FPM, MySQL and nginx using docker-compose

docker-laravel Laravel 5 with Dockerized PHP-FPM, MySQL and nginx using docker-compose Usage Get Composer docker-compose run --rm phpnginx curl -O htt

Harsh Vakharia 83 Feb 8, 2022
Demo of how you can run your Laravel app with Docker Compose. Look at docker-compose.yml and the docker folder. The rest is just a clean Laravel + Horizon install.

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Matt 5 Oct 22, 2021
Docker with PHP 7.4 fpm, Nginx, Composer, PhpUnit and MaridaDB

Clean Docker with PHP Docker with PHP 7.4 fpm, Nginx, Composer, PhpUnit and MariaDB Starting app docker-compose up -d Main page

Grzegorz Bielski 7 Nov 17, 2022
Brew PHP switcher is a simple shell script to switch your apache and CLI quickly between major versions of PHP

Brew PHP switcher is a simple shell script to switch your apache and CLI quickly between major versions of PHP. If you support multiple products/projects that are built using either brand new or old legacy PHP functionality. For users of Homebrew (or brew for short) currently only.

Phil Cook 872 Dec 22, 2022
Vagrant-boxes - Setup scripts and docs for my vagrant boxes, primarily aimed at Web/SilverStripe developement

zauberfisch's vagrant boxes zauberfisch/silverstripe-debian64 Debian 10 x86_64 LAMP Box with many extra features, pre-configured for SilverStripe Sour

null 6 Jan 24, 2020
This is a dockerized environment for testing and developing things on the fatfree-core.

F3 development bench This is a dockerized environment for testing and developing things on the fatfree-core. It uses Docker to spin up multiple contai

Fat-Free Framework Factory 9 Sep 20, 2022
ServD - a Docker PHP development environment heavily inspired by Laravel Valet and Laradock

ServD ServD is a Docker PHP development environment heavily inspired by Laravel Valet and Laradock, it supports multiple projects within a working dir

Matt Clinton 2 May 13, 2022
Dockerized PHP development stack: Nginx, MySQL, MongoDB, PHP-FPM, HHVM, Memcached, Redis, Elasticsearch and RabbitMQ

PHP Dockerized Dockerized PHP development stack: Nginx, MySQL, MongoDB, PHP-FPM, HHVM, Memcached, Redis, Elasticsearch and RabbitMQ PHP Dockerized giv

Kasper Isager Dalsgarð 1.1k Dec 30, 2022