节点属性评估

Node attribute evalution

我遇到了这个奇怪的问题

NoMethodError
-------------
undefined method `split' for 3:Fixnum

Cookbook Trace:
---------------
  /var/chef/cache/cookbooks/maven/attributes/default.rb:27:in `from_file'

Relevant File Content:
----------------------
/var/chef/cache/cookbooks/maven/attributes/default.rb:

 20:  # See the License for the specific language governing permissions and
 21:  # limitations under the License.
 22:  #
 23:  
 24:  default['maven']['m2_home'] = '/usr/local/maven'
 25:  default['maven']['mavenrc']['opts'] = '-Dmaven.repo.local=$HOME/.m2/repository -Xmx384m'
 26:  default['maven']['version'] = '3.3.3'
 27>> default['maven']['url'] = "http://apache.mirrors.tds.net/maven/maven-#{node['maven']['version'].split('.')[0]}/#{node['maven']['version']}/binaries/apache-maven-#{node['maven']['version']}-bin.tar.gz"

第 26 行将属性定义为“3.3.3”,这是一个字符串,拆分应该有效。

当我检查节点时,它有一个值

maven
    version : 3

我把这个值改成

'3.3.3'

现在食谱可以 运行 成功了。

我假设节点属性被评估然后设置到节点。为什么我会遇到这个问题,值的变化是如何解决它的。

谢谢

您可能在过去的某个时间使用过 knife node edit 或类似的命令。直接在节点上设置的那些属性是永久性的,并且优先级高于 default,因此它会从食谱中隐藏您的默认属性。您可以再次使用 knife node edit 来简单地从节点的 normal 部分中删除该属性,食谱默认值将接管。