The key to writing Chef Recipes is clear structure, single responsibilities, and strong maintainability. Chef Recipes is a declarative configuration that defines the system status through resources, such as package installation software, service control services, file/template management files, and user management users. 1. Each Recipe should only be responsible for one task, such as installing Nginx and configuring the site; 2. Use include_recipe to control the dependency order, use notifies and subscribes to achieve event-driven; 3. Improve readability, use meaningful variable names, uniform indentation, avoid hard coding, and prioritize the use of attributes over direct values. Following these principles can improve the reliability and reusability of Recipe.
Writing a Chef recipe (Recipes) is a key step in building an automation infrastructure. The key is that the structure is clear, the logic is reasonable, and it is easy to maintain and reuse.
Understand the basic role of Recipe
Chef's Recipe is a collection of resources that describes the state you want the system to reach. It is not a script, but a declarative configuration. For example, if you want to install a software package, start a service, or deploy a code, you should express it through resources.
Common resources include:
-
package
: used to install system software packages -
service
: control service status (start, stop, restart) -
file
ortemplate
: manage file content -
user
: manage system user
Understanding how these resources work is the first step in writing an effective recipe.
Divided by responsibilities
Don't try to do too much in a recipe. A Recipe should only be responsible for one clear task, such as "installing Nginx and configuring the default site". This makes it easier to test, debug and reuse.
For example:
# recipes/webserver.rb package 'nginx' service 'nginx' do action [:enable, :start] end template '/etc/nginx/sites-available/default' do source 'default.conf.erb' notifies :restart, 'service[nginx]' end
This Recipe is only responsible for setting up the basic environment of the Web server, and its responsibilities are clear. If you need to add SSL configuration in the future, you can create a new recipe to handle it.
Reasonable use of dependency and sequential control
Sometimes you need to make sure that a Recipe runs before another, such as installing the database before configuring the application. At this time, you can use include_recipe
to introduce other recipes:
include_recipe 'mysql::server'
In addition, the event notification can be achieved between resources through notifies
and subscribes
, such as automatically restarting the service after the configuration file changes. This mechanism makes the process more flexible and controllable.
It should be noted that although Chef will try to execute resources in order, sometimes because the notification mechanism will cause the execution order to change, so you should avoid strong dependence on the order when designing logic.
Write code that is highly readable
Although Recipe is code, it should be as easy to read as possible. Details such as naming variables, annotation descriptions, and unified format will affect the efficiency of later maintenance.
Some tips:
- Use meaningful variable names
- Unified indentation style (2 spaces are commonly used in the Chef community)
- Add simple comments to complex logic to explain the intention
- Avoid hard-coded paths or values, try to use attributes (attributes)
For example:
app_dir = '/var/www/myapp' directory app_dir do owner 'www-data' group 'www-data' mode '0755' recursive true end
This is easier to understand and modify than writing the path directly.
Basically that's it. It is not difficult to write Chef Recipes well, but you need to carefully treat the relationship between the configuration logic and resources at each step.
The above is the detailed content of How to write Chef recipes. 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)

Hot Topics

Commands to properly close Linux systems include shutdown, halt, poweroff and reboot. Among them, shutdown is the most recommended, which can arrange shutdown time and send notifications; halt directly stops the system operation; poweroff cuts off the power supply based on halt; reboot is used for restart. To safely arrange a timed shutdown, you can use sudoshutdown-h 10 to indicate shutdown after 10 minutes, use sudoshutdown-c to cancel the timing, and add prompt information such as sudoshutdown-h23:00 "The system will be shut down at 11 o'clock tonight." Under the graphical interface, you can select Shutdown through the menu in the upper right corner.

The steps to add a new hard disk to the Linux system are as follows: 1. Confirm that the hard disk is recognized and use lsblk or fdisk-l to check; 2. Use fdisk or parted partitions, such as fdisk/dev/sdb and create and save; 3. Format the partition to a file system, such as mkfs.ext4/dev/sdb1; 4. Use the mount command for temporary mounts, such as mount/dev/sdb1/mnt/data; 5. Modify /etc/fstab to achieve automatic mount on the computer, and test the mount first to ensure correctness. Be sure to confirm data security before operation to avoid hardware connection problems.

Problems with device drivers will cause the hardware to not be used normally, such as peripherals not responding, system prompts "unknown device" or game stuttering. The solution is as follows: 1. Check the warning icon in the device manager. The yellow exclamation mark represents the driver outdated or compatibility problem. The red cross indicates that the hardware is disabled or the connection is poor. The question mark or "Otherdevices" means that the system has not found a suitable driver; 2. Right-click the device and select "Update Driver", try automatic search first, and manually download and install; 3. Uninstall the device and check delete driver software, and after restarting, let the system re-identify, or manually specify the driver path to install; 4. Use the driver identification tool to assist in finding models, but avoid downloading drivers from unknown sources; 5. Check Windows updates to obtain

The top command can view the Linux system resource usage in real time. 1. Enter top through the terminal to open the interface, and the top displays the system running status summary, including load, task number, CPU and memory usage; 2. The process list is sorted by CPU usage by default, which can identify highly occupant processes; 3. Shortcut keys such as P (CPU sort), M (memory sort), k (end process), r (adjust priority), and 1 (multi-core details) improve operation efficiency; 4. Use top-b-n1 to save output to a file; 5. Adding the -u parameter to filter specific user processes. Mastering these key points can quickly locate performance issues.

In Linux systems, network interface information can be viewed through ip, ifconfig and nmcli commands. 1. Use iplinkshow to list all network interfaces, add up parameters to display only active interfaces, and use ipaddr or ipad to view IP allocation status; 2. Use ifconfig-a to be suitable for old systems, and you can view all interfaces. Some new systems need to install net-tools package; 3. Use nmclidevicestatus to be suitable for systems managed by NetworkManager, which can view interface status and connection details, and supports filtering and query. Select the appropriate command according to the system environment to complete the network information viewing.

Managing AWSEC2 instances requires mastering life cycles, resource configuration and security settings. 1. When selecting an instance type, select C series for calculation-intensive tasks, and select M or R series for memory-sensitive applications, and start with small-scale testing; 2. Pay attention to security group rules, key pair storage and connection methods when starting the instance, and Linux uses SSH commands to connect; 3. Cost optimization can be achieved through reserved instances, Spot instances, automatic shutdown and budget warning. As long as you pay attention to the selection, configuration and maintenance, you can ensure stable and efficient operation of EC2.

Running Ansibleplaybook requires first ensuring that the structure is correct and the environment is prepared. 1. Write a playbook file, including hosts, tasks, etc.; 2. Ensure that the target host is in the inventory and can be connected through SSH, and can be tested by ansibleping module; 3. Use the ansible-playbook command to run, and you can add -i to specify the inventory path; 4. You can use -v, --check, --limit, --tags and other parameters to debug or control execution; 5. Pay attention to common error points such as YAML indentation, module parameters, permissions and inventory content. Using --check and -v will help troubleshoot errors

The management software RAID array can be maintained through several critical steps. First, use the mdadm command to view the status or view /proc/mdstat; secondly, replace the hard disk and remove the bad disk and add a new disk and rebuild the array; thirdly, expand the capacity to be suitable for RAID types that support capacity expansion by adding disks and adjusting the file system; finally configure daily monitoring to automatically detect abnormalities through scripts and email notifications to ensure the stable operation of the array.
