访问先前声明的定义类型的实例中的变量

访问先前声明的定义类型的实例中的变量

我正在尝试定义一个使用常见网站布局(例如目录、、等)的静态媒体服务器,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 域名似乎是名称变量的完美候选者,因此在大多数情况下您可以省略该参数。

相关内容