📅  最后修改于: 2023-12-03 15:03:53.444000             🧑  作者: Mango
当您开始使用 Puppet 写配置时,了解一些编码样式和最佳实践将非常有帮助。这篇文章包含一些建议和示例代码,旨在帮助您编写更好的 Puppet 代码。
良好的代码格式化使得代码可读性更强,更易于理解和维护。下面是一些建议的代码格式化规则:
缩进应该是两个空格。不要使用制表符或四个空格。
在语句结束时进行换行,例如:
file { '/etc/passwd':
ensure => 'present',
owner => 'root',
group => 'root',
mode => '0644',
}
在括号周围留有空格,例如:
if $enabled {
...
}
注释是非常有用的,它们可以帮助其他程序员理解您的代码,并阐述您的意图。在 Puppet 中,注释应该以 #
开头。
在编写 Puppet 代码时,请遵循以下命名规则:
_
);class FooBar
);$foo_bar
);MyCustomDataType
)。Puppet 的一个主要优势是其可维护性。您可以使用以下技术使得您的 Puppet 代码更易于维护:
不要重复自己(DRY)原则是软件开发中的一个基本原则。在编写 Puppet 代码时,请尽可能减少重复。
例如,如果您在多个地方使用相同的资源类型,请将它们抽象为模块或定义。
过多使用条件语句会使得代码难以阅读和维护。请尝试使用参数化和定义以减少条件语句的数量。
内部资源引用增加了代码的复杂度,使得代码更难以阅读和维护。请尝试使用参数化和同一模块中的资源引用来避免内部资源引用。
# 错误的示范
file { '/etc/foo.bar':
ensure => present,
notify => Service['foo'],
}
service { 'foo':
ensure => running,
}
# 正确的示范
class mymodule::foo {
File { 'foo.bar':
ensure => present,
}
file { '/etc/foo.bar':
notify => Service['mymodule::foo_service'],
}
service { 'mymodule::foo_service':
ensure => running,
}
}
下面是一些良好的样式示例代码:
当您需要对文件进行校验时,请使用 checksum
参数:
file { '/etc/foo.conf':
ensure => 'file',
source => "puppet:///modules/${module_name}/foo.conf",
checksum => 'md5lite',
}
当您需要使用 Hiera 中的值时,请使用 hiera
函数:
$foo_value = hiera('foo_value')
当您需要配置服务时,请确保在资源类型中正确地设置了 require
和 notify
参数:
class mymodule::foo {
class { 'mymodule::bar':
require => Class['mymodule::baz'],
}
class { 'mymodule::baz':
notify => Service['mymodule::foo_service'],
}
service { 'mymodule::foo_service':
ensure => running,
}
}
当您在调用提供的类或定义时,请始终使用小括号:
include mymodule::foo
mymodule::bar { 'baz':
some_param => 'value',
}
编写棒极了的 Puppet 代码需要一些技巧和经验,但通过遵循上述建议和最佳实践,您应该能够编写漂亮、可读性好、可维护性强的 Puppet 代码。
Happy Hacking!