summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Keiser <john@johnkeiser.com>2016-08-02 12:37:22 -0700
committerJohn Keiser <john@johnkeiser.com>2016-08-03 10:39:53 -0700
commit5311384c4a35dc24b73e9d564ba1290910aecdcd (patch)
treee2da9f4a6c3949b6aa2294cf0e8af7b85abbd25b
parentaf65e95bb59223b6fb67133875b3e85cc83b4c78 (diff)
downloadchef-5311384c4a35dc24b73e9d564ba1290910aecdcd.tar.gz
Fix #4619: node.automatic[:foo] >= 10 sets node.automatic[:foo][">"] to 10
-rw-r--r--lib/chef/node/attribute.rb16
-rw-r--r--lib/chef/node/attribute_collections.rb8
-rw-r--r--lib/chef/resource/freebsd_package.rb2
3 files changed, 17 insertions, 9 deletions
diff --git a/lib/chef/node/attribute.rb b/lib/chef/node/attribute.rb
index f5fe89251d..91c7621074 100644
--- a/lib/chef/node/attribute.rb
+++ b/lib/chef/node/attribute.rb
@@ -523,12 +523,16 @@ class Chef
else
raise NoMethodError, "Undefined method or attribute `#{symbol}' on `node'"
end
- elsif symbol.to_s =~ /=$/
- Chef.log_deprecation %q{method setting of node attributes (node.foo="bar") is deprecated and will be removed in Chef 13, please use bracket syntax (node["foo"]="bar")}
- key_to_set = symbol.to_s[/^(.+)=$/, 1]
- self[key_to_set] = (args.length == 1 ? args[0] : args)
- else
- raise NoMethodError, "Undefined node attribute or method `#{symbol}' on `node'"
+ elsif symbol.to_s =~ /^\w/
+ if symbol.to_s.end_with?("=")
+ Chef.log_deprecation %q{method setting of node attributes (node.foo="bar") is deprecated and will be removed in Chef 13, please use bracket syntax (node["foo"]="bar")}
+ key_to_set = symbol.to_s[/^(.+)=$/, 1]
+ self[key_to_set] = (args.length == 1 ? args[0] : args)
+ else
+ raise NoMethodError, "Undefined node attribute or method `#{symbol}' on `node'. To set an attribute, use `#{symbol}=value' instead."
+ else
+ raise NoMethodError, "Undefined node attribute or method `#{symbol}' on `node'."
+ end
end
end
diff --git a/lib/chef/node/attribute_collections.rb b/lib/chef/node/attribute_collections.rb
index b739ea8490..d26ae5175a 100644
--- a/lib/chef/node/attribute_collections.rb
+++ b/lib/chef/node/attribute_collections.rb
@@ -164,11 +164,15 @@ class Chef
super
elsif args.empty?
self[symbol]
- elsif symbol.to_s =~ /=$/
+ elsif symbol.to_s =~ /^\w.*=$/
key_to_set = symbol.to_s[/^(.+)=$/, 1]
self[key_to_set] = (args.length == 1 ? args[0] : args)
else
- raise NoMethodError, "Undefined node attribute or method `#{symbol}' on `node'. To set an attribute, use `#{symbol}=value' instead."
+ if symbol.to_s =~ /\w/
+ raise NoMethodError, "Undefined node attribute or method `#{symbol}' on `node'. To set an attribute, use `#{symbol}=value' instead."
+ else
+ raise NoMethodError, "Undefined node attribute or method `#{symbol}' on `node'."
+ end
end
end
diff --git a/lib/chef/resource/freebsd_package.rb b/lib/chef/resource/freebsd_package.rb
index 540774e864..a94dd0a928 100644
--- a/lib/chef/resource/freebsd_package.rb
+++ b/lib/chef/resource/freebsd_package.rb
@@ -45,7 +45,7 @@ class Chef
def ships_with_pkgng?
# It was not until __FreeBSD_version 1000017 that pkgng became
# the default binary package manager. See '/usr/ports/Mk/bsd.port.mk'.
- node.automatic[:os_version].to_i >= 1000017
+ node[:os_version].to_i >= 1000017
end
def assign_provider