我正在尝试定义一个使用常见网站布局(例如目录、、等)的静态媒体服务器,etc/
以及将包含在主机范围的 nginx 配置中的 nginx 配置。站点的 nginx 配置需要使用由声明的资源定义的文档根目录。log/
html/
layouts::website
所以,我想做的是这样的:
class sites::static ($sites_dir) {
$domain = "static.example.com"
layouts::website {$domain:
base_dir => $sites_dir,
name => $domain,
}
nginx::siteconfig {$domain:
domain => $domain,
doc_root => $layouts::website[$domain]::doc_root,
}
}
然后可以通过声明来使用:
class {'sites::static': sites_dir => "/opt/sites"}
$layouts::website[$domain]::doc_root
但是,由于该部分无效,上述操作失败。我尝试了各种替代方案,但均未成功。
这可能吗?如果不可能,您建议我如何实现使用基本布局的既定目标,然后需要由将在该基本布局中填充内容的各种位来使用该布局?
答案1
据我所知,您无法获取定义资源内的变量。
我将通过重新排序资源类型定义并将nginx::siteconfig
子句放入定义中来解决这个问题layouts::website
。(如果 的每个用途layouts::website
也应该有一个nginx::siteconfig
,那么将一个嵌套在另一个中是一种很好的 DRY 方法。)如果您需要在某些情况下 的用途layouts::website
没有 nginx 定义,您必须向 添加一个参数layouts::website
,例如$nginx = true
。
此外,还有以下代码:
layouts::website {$domain:
name => $domain,
}
nginx::siteconfig {$domain:
domain => $domain,
}
我觉得这像是不必要的重复。网站名称和 nginx 域名似乎是名称变量的完美候选者,因此在大多数情况下您可以省略该参数。