在puppet中以已定义的类型公开属性

时间:2016-05-03 01:44:22

标签: ruby scope puppet visibility

我想从其他类/实例访问定义类型实例内的属性。

这与之前提出的问题非常相似 - In Puppet, how can I access a variable/attribute inside a defined type?,但据我所知,答案与访问参数而非任意变量有关。

例如,给定以下定义的类型:

define server (
  $server_name = 'my_server'
){
  $server_history = 'A long story'
}

我可以成功使用getparam(...)来抓取server_name但我无法对server_history执行相同操作。

此外,如果server而不是定义的类型,那么使用类似server::serverhistory <的内容访问此变量非常简单/ p>

有没有人对如何公开这些变量有任何想法?或者我是以完全错误的方式接近这个?

编辑:对于我正在尝试做的某些更高级别的上下文,我的server类型会被其他3个类实例化。 server类型中的变量根据这些类提供给它的参数构建一些目录路径(当然,这些类特定于这些类)。还有一些其他类想要使用目录路径变量来放置文件。

1 个答案:

答案 0 :(得分:1)

你问

  

我想从其他类/实例访问定义类型实例内的属性。

然后你继续澄清你之后

  

任意变量。

实际上,定义类型正文中的普通变量是该类型的属性,也不是其任何实例。它们根本不属于此类类型的可访问持久状态。

更一般地说,Puppet几乎以每种可观察的方式处理定义类型,就像本机类型一样,但同样的道理,它并没有提供任何用于将定义类型区分为特殊情况的特性。您正在寻找这样的功能,但它不存在。

由于您的设计理念不起作用,您需要考虑替代方案。你说

  

我的服务器类型由其他3个类实例化。服务器类型中的变量根据这些类提供给它的参数构建一些目录路径(当然,这些特定于这些类)。还有一些其他类想使用目录路径变量将文件放在那里。

由于您之后的路径是特定类的特征,因此可以通过这些类直接访问它们。对我来说,你甚至想通过这些类声明的资源间接访问它们似乎很奇怪。