Sha256: 12d18b9403d378e53140f73cdbea3eebdef039a48f7132f3b6d8eb9e6d5de271

Contents?: true

Size: 1.72 KB

Versions: 1

Compression:

Stored size: 1.72 KB

Contents

# Description: Chef-Vault VaultShow class
# Copyright 2013, Nordstrom, Inc.

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

#     http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

require 'chef/knife/vault_base'

class Chef
  class Knife
    class VaultList < Knife
      include Chef::Knife::VaultBase

      banner "knife vault list (options)"

      def run
        vaultbags = []
        # iterate over all the data bags
        bags = Chef::DataBag.list
        bags.each_key do |bagname|
          vaultbags.push(bagname) if bag_is_vault?(bagname)
        end
        output vaultbags.join("\n")
      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 = bag.keys.partition { |k| k =~ /_keys$/ }
        # 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
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
chef-vault-2.5.0 lib/chef/knife/vault_list.rb