lib/chef/knife/vault_base.rb in chef-vault-2.5.0 vs lib/chef/knife/vault_base.rb in chef-vault-2.6.0

- old
+ new

@@ -39,8 +39,30 @@ def show_usage super exit 1 end + + private + + def bag_is_vault?(bagname) + bag = Chef::DataBag.load(bagname) + # vaults have at even number of keys >= 2 + return false unless bag.keys.size >= 2 && 0 == bag.keys.size % 2 + # partition into those that end in _keys + keylike, notkeylike = split_vault_keys(bag) + # there must be an equal number of keyline and not-keylike items + return false unless keylike.size == notkeylike.size + # strip the _keys suffix and check if the sets match + keylike.map! { |k| k.gsub(/_keys$/, '') } + return false unless keylike.sort == notkeylike.sort + # it's (probably) a vault + true + end + + def split_vault_keys(bag) + # partition into those that end in _keys + bag.keys.partition { |k| k =~ /_keys$/ } + end end end end