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