共享单个配置文件的多个傀儡资源

roe*_*ijn 5 jboss puppet augeas

我正在开发用于管理 JBoss 应用服务器的自定义 puppet 模块。我认为应用服务器上部署的每个应用程序都是一个自包含的资源。但是一些应用程序需要在 JBoss 的配置文件中进行专门的配置更改。

每个应用程序也是一个傀儡资源,但大多数应用程序彼此不认识。

目前我使用 augeas 对 JBoss 的配置文件进行更改。即使许多资源需要更改该配置文件,它也能工作,但它非常复杂、容易出错且速度缓慢。

实际上,我想对配置文件使用模板,但问题是如何在触发模板机制之前聚合来自不同(子)模块的所有必需工件,而不必知道 man 配置工件有多少?

例子:

define jboss_config($config) {
  # do something with the config
}

jboss_config {
  config => 'some configuration for app 1'
}
jboss_config {
  config => 'some configuration for app 2'
}    
jboss_config {
  config => 'some configuration for app 3'
}    
jboss_config {
  config => 'some configuration for app 4'
}    
jboss_config {
  config => 'some configuration for app 5'
}

#now, as all calls to "jboss_config" are done, 
#perform templating of the configuration file.
Run Code Online (Sandbox Code Playgroud)

在完成所有“jboss_config”调用后,如何定义触发模板一次的依赖项?通知似乎不起作用,因为它会在每个配置步骤后触发模板。

asc*_*hil 4

对于此类事情,我的首选方法是使用concat模块,该模块将处理构建配置文件本身的所有通知,并将其包装在特定于应用程序的资源定义中。我最后一部分的意思是这样的:

class jboss {
  concat { '/path/to/jboss/config/file':
    owner => 'whoever',
    group => 'whoever',
    mode  => 'whatever',
  }
  concat::fragment { 'jboss header':
    target  => '/path/to/jboss/config/file',
    content => template('jboss/config.header.erb'),
    order   => 00,
  }
  concat::fragment { 'jboss footer':
    target  => '/path/to/jboss/config/file',
    content => template('jboss/config.footer.erb'),
    order   => 99,
  }
}
define jboss_config ($config) {
  concat::fragment { "jboss config ${title}":
    target  => '/path/to/jboss/config/file',
    content => template('jboss/config.item.erb'),
    # Alternately, if your needs are simple enough:
    #content => "${config}\n",
  }
}
Run Code Online (Sandbox Code Playgroud)

因为您正在包装文件串联,所以客户端模块不必知道您用于配置的确切机制,并且您可以根据需要向资源添加参数,以便以自然的方式描述它(即不是必须编写与配置文件语法匹配的字符串,但仅指定必要的配置数据。)

  • 你好 asciiphil,你的解决方案并不能直接解决我的问题,因为这最终会导致超过 50 个模板片段。但深入研究 concat 模块发现了这篇文章:http://richardc.unixbeard.net/2013/02/puppet-concat-patterns/。这让我找到了 datacat 模块(https://github.com/richardc/puppet-datacat),它完美地解决了我的问题。 (2认同)