收集多个类的变量

收集多个类的变量

我想在 Puppet 中收集不同类别的变量。这可能吗?

例如我想为一个节点分配两个类:

class { "webapplication1": url => 'webapp1.example.com' }
class { "webapplication2": url => 'webapp2.example.com' }

然后我想包含一个不同的类,webserver它为这两个类分别设置两个虚拟主机。因此它应该从这两个类中获取两个 URL 变量。我不想将 URL 作为参数传递给新类。为了进一步增加乐趣,也许有时我只想添加一个类,或者有时我想添加一个完全不同的类(所有这些的相似之处只是它们都有一个 url 参数。

我该如何收集这些?我考虑过为每个类添加一个标签,然后通过资源收集器收集它们(好吧,不适用于类)。但我如何访问它们的参数?

因此,我宁愿为 Web 应用程序创建一个定义的资源,例如

webapplication { "webapplication1": url => 'webapp1.example.com' }
webapplication { "webapplication2": url => 'webapp2.example.com' }

但是我怎样才能收集所有 Web 应用程序的所有 URL?

Webapplication <| |>

看起来,这并没有给我带来任何功能。我是否应该在周围放置一个类,webapplications然后创建资源?

class webapps (
  Hash $webapps,
) {
  $webapps.each | String $appname, String $parameters | {
    webapp { $appname: 
      * => $parameters,
    }

    apache::vhost { $parameters["url"]:
      #...
    }
  }
}

class { webapps: 
    webapps => {
      'webapplication1' = {
        'url' => 'webapp1.example.com'
      },
      'webapplication2' = {
        'url' => 'webapp2.example.com'
      },
    }
}

(未经测试,在 YAML 中可能看起来更简单...)。如果能提供一些入门提示,我将不胜感激。只是不知道如何很好地做到这一点。

谢谢!

答案1

金宝博官方网站就是为此而设计的。它可能看起来不是最简单的解决方案,但您可以轻松扩展它以在多个节点上进行搜索等。

Puppetdb查询提供良好的 API 来访问 PuppetDB 中的数据。根据上面的示例,您可以使用类似以下内容:

query_resources('Class["webapps"]{ hostname = 'localhost' }', 'url')

puppet agent生成给定节点上使用的资源和事实列表,这些数据存储在 PuppetDB 中。因此,您没有执行本地查询(这在 AFIK 中是不可能的),因此传播某些更改可能需要一段时间(取决于代理的运行间隔)。

相关内容