Puppet 操作员';[]和#x27;不适用于未定义的值

Puppet 操作员';[]和#x27;不适用于未定义的值,puppet,Puppet,当我运行上述代码时,我得到以下错误: [tom@pe-server] cat param.pp class base::common::param ( $repo_checkout_ps = 'C:/puppet/automation/scripts/infra/repo_checkout.ps1', $disable_uac = 'C:/puppet/automation/scripts/base/common/disable_uac.ps1', ) {} 需要注意的一点是

当我运行上述代码时,我得到以下错误:

[tom@pe-server] cat param.pp
class base::common::param (
    $repo_checkout_ps = 'C:/puppet/automation/scripts/infra/repo_checkout.ps1',
    $disable_uac = 'C:/puppet/automation/scripts/base/common/disable_uac.ps1',
) {}

需要注意的一点是,如果我将以下代码从
base::common::disable_uac
移动到
site.pp
,则一切正常:

Error:
Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Operator '[]' is not applicable to an Undef Value. 
at /etc/puppetlabs/code/environments/client/modules/base/manifests/common/svn/repo_checkout.pp:7:19 
at /etc/puppetlabs/code/environments/client/modules/base/manifests/common/disable_uac.pp:2 on node mynode.com
更新: 对不起,我没把那个部分放到帖子里。这是:

   base::common::svn::repo_checkout { 'Copy disable_uac PS script':
        svn_url_params => $svn_url_disable_uac,
    }


我花了几个小时研究它,但无法找出问题所在。

这里有一些意大利面代码。我建议重新设计以简化您的结构,这可能也会解决您的问题。你使用的是最新版本的木偶吗?模块数据还可以解决您的问题,并帮助您清除设计中的
params
继承。我完全同意这是一个混乱,但不幸的是,我们团队中很少有人认为它是
正确的
方法,我现在已经解释完了。在下一次迭代之前,我必须接受它。不过,我不明白的是为什么会出现
Undef
值错误?在
site.pp
中,我包括
setup
模块,该模块又包括
disable\u uac
模块。
setup
disable\u uac
模块都在各自的模块中继承参数,但值似乎仍然是未定义的。通过第7行向上显示
base::svn::repo\u checkout
以及随后关闭代码的任何操作可能有助于查看未定义的内容和原因。请检查更新部分。因此我突然想到的是,参数在
param.pp
中被指定为
$disable\u uac
,但在
disable\u uac.pp
中被引用为
$svn\u url\u disable\u uac
。这可能会导致
svn\u url\u params
的参数未定义。它可能被分配到参数之外的某个地方,因此当您将它放入
站点.pp
时,它在不同的范围内可用。
[tom@pe-server] cat param.pp
class base::common::param (
    $repo_checkout_ps = 'C:/puppet/automation/scripts/infra/repo_checkout.ps1',
    $disable_uac = 'C:/puppet/automation/scripts/base/common/disable_uac.ps1',
) {}
Error:
Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Operator '[]' is not applicable to an Undef Value. 
at /etc/puppetlabs/code/environments/client/modules/base/manifests/common/svn/repo_checkout.pp:7:19 
at /etc/puppetlabs/code/environments/client/modules/base/manifests/common/disable_uac.pp:2 on node mynode.com
   base::common::svn::repo_checkout { 'Copy disable_uac PS script':
        svn_url_params => $svn_url_disable_uac,
    }
[tom@pe-server] cat repo_checkout.pp
define base::common::svn::repo_checkout (
    $svn_url_params,
) {
    include base::common::param
    $repo_checkout_ps = $base::common::param::repo_checkout_ps

    $svn_co_dir = $svn_url_params[svn_co_dir]    # Line 7
    $svn_url = $svn_url_params[svn_url]

    util::executeps { "Checking out build packet for URL \"$svn_url\"":
        pspath   => $repo_checkout_ps,
        argument => "\"$svn_co_dir\" \"$svn_url\"",
    }
}