首页 > 解决方案 > 木偶清单:覆盖哈希中的默认变量

问题描述

我收到了由其他人编写的 Puppet 模块的代码。我的任务是让它在实际的 Puppet 环境中工作。

我正在努力覆盖manifest文件中模块中的默认值。希望这是一个语法问题,而不是 init 类的问题。

init.pp

class our_module(
  # Defaults to be overridden in the manifest file 
  Hash $config = {
    'id' => '38e18a',
    'secret' => 'donttellanyone',
    'path' => '/test/path'
  }
){
# Logic here...
}

如何覆盖这些属性?我尝试了以下方法,这给了我一个InvalidCredentialsException

node 'my_node' {
  class { 'our_module':
    config => {
      id => 'newid',
      secret => 'newsecret',
      path => '/newpath
  }
}

我是 Puppet 的新手,仍然对文档和语法有所了解。

标签: puppetmanifest

解决方案


给定our_module问题中提出的类,节点块的这种变体对于声明该类和自定义其config参数是有效的:

node 'my_node' {
  class { 'our_module':
    config => {
      id => 'newid',
      secret => 'newsecret',
      path => '/newpath'
    }
  }
}

希望这是一个语法问题,而不是 init 类的问题。

如果您真正使用的格式与上述相同,那么很抱歉不得不告诉您问题不在于您的类声明。如果您的 Puppet 对未声明 class 的节点运行成功our_module,那么我的结论是问题确实出在类实现上。

我尝试了以下方法,这给了我一个InvalidCredentialsException

我不愿意认为这是在目录构建过程中出现的。我不能完全排除这种可能性,但这确实看起来像一个 Java 异常,而目录构建器主要是在 Ruby 中实现的。它可能来自puppetserverPuppet 基于 Java 的服务器前端,但这并不取决于您的清单是否声明了特定的类。我的水晶球表明,当它应用于客户端时,该our_module实现是Exec一个 Java 程序,并且正是该程序引发了异常。

其中一些可能性可能与错误的类参数数据有关,但我看不出有任何理由认为问题是由语法错误引起的。


推荐阅读