The key to writing a Puppet list is modular structure, resource relationship management, flexible application of variable conditions and standardized grammar style. 1. Use a modular structure to split the functions into modules and store them in directories, place the main class init.pp, and respond to different scenarios through subclasses to improve reusability; 2. Reasonably declare resources and manage dependencies, use before, require, and notify to control the execution order, and ensure that the service restart is triggered after the configuration file is modified; 3. Use variables and condition judgments to improve flexibility, select paths according to the system type, and manage configuration data in combination with Hiera; 4. Pay attention to the code style, unify naming specifications, align indentation, add clear annotations, and use the Puppet Lint tool to ensure the correct format.
It is actually not difficult to write a Puppet list (Manifests), but you have to master a few key points. Puppet defines the system status through a list, so if it is well written, the automated configuration will be smooth; if it is written in a mess, it will be a headache to maintain. This article talks about some practical tips to help you write a clear and easy-to-maintain Puppet list.
1. Use a modular structure
Puppet's most recommended way is to split the configuration into a module. A module usually corresponds to a function or service, such as nginx
, mysql
, etc. This not only has a clear structure, but also facilitates reuse and testing.
- Each module should have its own directory, including subdirectories such as
manifests/
,files/
,templates/
etc. - The main class (main class) is placed in the
init.pp
file - If there are multiple configuration scenarios, you can use subclasses to organize them
For example: If you are deploying a web server, you can write Nginx, configure virtual hosts, and set up firewalls into different classes, and then call them in a "site.pp".
Another advantage of modularization is that it is convenient for parameterization. You can use parameters to adapt the same module to different environments (such as development, testing, and production).
2. Rational use of resource statements and relationship management
The core of Puppet is resources, such as package
, file
, and service
. When writing a list, you should not just simply write "install this package", but also pay attention to the dependencies between resources.
Common practices are:
- Use
ensure => present
orinstalled
to ensure the software is installed - Configuration files are managed with
file
resources and generated from templates (template()
function) - The service should be set to start and enable power-on self-start:
enable => true, ensure => running
What's more important is the order of processing resources. For example, you cannot start the service first and then change the configuration file. At this time, you can use before
, require
, and notify
to control the execution order.
file { '/etc/nginx/nginx.conf': ensure => file, source => 'puppet:///modules/nginx/nginx.conf', notify => Service['nginx'], } service { 'nginx': ensure => running, enable => true, hasrestart => true, }
In the above example, when the configuration file is modified, the restart service will be automatically triggered.
3. Use variables and conditional judgments to improve flexibility
Puppet supports variables and conditional statements. Use it reasonably can make your list more flexible.
For example, select different configuration paths according to the operating system type:
if $facts['os']['family'] == 'RedHat' { $config_path = '/etc/httpd/conf.d/' } elsif $facts['os']['family'] == 'Debian' { $config_path = '/etc/apache2/sites-available/' }
You can also extract common variables into module parameters, or centrally manage configuration data through Hiera, so that the list itself can be kept clean, only describe logic, and not put specific values.
4. Pay attention to syntax specifications and code styles
While Puppet's syntax is not as strict as programming languages, a good style will make your list easier to read and maintain.
A few suggestions:
- Class names and variable names are underlined in lowercase, such as
$nginx_config
- All resource attributes are aligned and indented, and two spaces are recommended
- Multi-line list or hash is expressed by newline indentation
- Comments should be clearly used, especially in complex logic
If teamwork, consider introducing the Puppet Lint tool to check format issues.
Basically that's it. Writing a Puppet manifest is not writing a script, but describing the expected state. As long as the structure is clear, the logic is clear, and the dependencies are correct, automated operation and maintenance can be much easier.
The above is the detailed content of How to write Puppet manifests. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

When encountering Docker problems, you should first locate the problem, which is problems such as image construction, container operation or network configuration, and then follow the steps to check. 1. Check the container log (dockerlogs or docker-composelogs) to obtain error information; 2. Check the container status (dockerps) and resource usage (dockerstats) to determine whether there is an exception due to insufficient memory or port problems; 3. Enter the inside of the container (dockerexec) to verify the path, permissions and dependencies; 4. Review whether there are configuration errors in the Dockerfile and compose files, such as environment variable spelling or volume mount path problems, and recommend that cleanbuild avoid cache dryness

To manage Linux user groups, you need to master the operation of viewing, creating, deleting, modifying, and user attribute adjustment. To view user group information, you can use cat/etc/group or getentgroup, use groups [username] or id [username] to view the group to which the user belongs; use groupadd to create a group, and use groupdel to specify the GID; use groupdel to delete empty groups; use usermod-aG to add users to the group, and use usermod-g to modify the main group; use usermod-g to remove users from the group by editing /etc/group or using the vigr command; use groupmod-n (change name) or groupmod-g (change GID) to modify group properties, and remember to update the permissions of relevant files.

The steps to install Docker include updating the system and installing dependencies, adding GPG keys and repositories, installing the Docker engine, configuring user permissions, and testing the run. 1. First execute sudoaptupdate and sudoaptupgrade to update the system; 2. Install apt-transport-https, ca-certificates and other dependency packages; 3. Add the official GPG key and configure the warehouse source; 4. Run sudoaptinstall to install docker-ce, docker-ce-cli and containerd.io; 5. Add the user to the docker group to avoid using sudo; 6. Finally, dock

Adjusting kernel parameters (sysctl) can effectively optimize system performance, improve network throughput, and enhance security. 1. Network connection: Turn on net.ipv4.tcp_tw_reuse to reuse TIME-WAIT connection to avoid enabling tcp_tw_recycle in NAT environment; appropriately lower net.ipv4.tcp_fin_timeout to 15 to 30 seconds to speed up resource release; adjust net.core.somaxconn and net.ipv4.tcp_max_syn_backlog according to the load to cope with the problem of full connection queue. 2. Memory management: reduce vm.swappiness to about 10 to reduce

To restart the service managed by systemctl in Linux, 1. First use the systemctlstatus service name to check the status and confirm whether it is necessary to restart; 2. Use the sudosystemctlrestart service name command to restart the service, and ensure that there is administrator privileges; 3. If the restart fails, you can check whether the service name is correct, whether the configuration file is wrong, or whether the service is installed successfully; 4. Further troubleshooting can be solved by viewing the log journalctl-u service name, stopping and starting the service first, or trying to reload the configuration.

Bash scripts handle command line parameters through special variables. Use $1, $2, etc. to get positional parameters, where $0 represents the script name; iterates through "$@" or "$*", the former retains space separation, and the latter is merged into a single string; use getopts to parse options with parameters (such as -a, -b:value), where the option is added to indicate the parameter value; at the same time, pay attention to referring to variables, using shift to move the parameter list, and obtaining the total number of parameters through $#.

Software RAID can realize disk arrays through the operating system's own tools to improve performance or fault tolerance. 1. Use mdadm tools to create and manage RAID arrays under Linux, including installing, viewing hard disks, creating arrays, formatting, mounting and configuration saving; 2. Windows can realize the basic functions of RAID0 and RAID1 through "disk management", such as creating new strip volumes or mirrored volumes and formatting; 3. Notes include adding hot spare disks, monitoring the status regularly, high data recovery risks require backup, and the performance impacts that may be caused by certain levels.

The shutdown command of Linux/macOS can be shut down, restarted, and timed operations through parameters. 1. Turn off the machine immediately and use sudoshutdownnow or -h/-P parameters; 2. Use the time or specific time point for the shutdown, cancel the use of -c; 3. Use the -r parameters to restart, support timed restart; 4. Pay attention to the need for sudo permissions, be cautious in remote operation, and avoid data loss.
