Puppet 6中模板调用出现未定义局部变量`domain`错误排查求助
解决Puppet 6模板未定义变量的问题
嘿,这个版本升级的坑我之前也踩过!你遇到的问题核心是Puppet 3到6之间模板变量作用域的规则变化,导致原本能直接访问的变量在新版本里找不到了。
问题根源
在Puppet 3中,模板可以直接引用define或者类里的参数名(比如你用的domain);但从Puppet 4开始(包括你现在用的6),模板的作用域机制做了调整:define的参数会被作为实例变量传入模板,必须通过@变量名的形式才能访问,直接写变量名会被当成模板本地未定义的变量,所以才会抛出那个错误。
具体修复步骤
只需要修改你的resolv.conf.erb模板内容:
原来的模板代码:
domain <%= domain %>
改成:
domain <%= @domain %>
额外验证
你的define和类的参数传递逻辑是没问题的:
resolv::resolv_config定义时接收$domain参数- 调用时传入了
domain => "mydomain.local"
只要模板里改成@domain,就能正确获取到这个参数值了。
内容的提问来源于stack exchange,提问作者user630702
相关产品推荐
相关产品推荐

