模块清单与定义类型的模块化
1. 从定义类型中包含类
在某些场景下,之前定义的example_app_config类型有特定用途,它假定/etc/example_app及其子目录是在定义类型之外独立管理的。不过,很多定义类型需要在多个独立类或其他定义类型中使用,这就要求它们具备自包含性。
例如,要确保以下资源成为清单的一部分:
file { [ '/etc/example_app', '/etc/example_app/config.d.enabled' ]: ensure => 'directory'; }若直接将此声明放入定义体中,会导致重复资源错误。每个example_app_config实例都会尝试自行声明这些目录。为避免此问题,可使用组件类模式。将上述声明封装在一个类中(如example_app_config_directories),并在定义体中包含该类:
define example_app_config($regions = []) { include example_app_config_directories … }2. 类中嵌套定义
语言中有一个不太常见的特性,即类体中可以嵌套容器,类和定义类型都能成为类体的一部分。