class ChefZero::DataNormalizer

Public Class Methods

normalize_client(client, name) click to toggle source
# File lib/chef_zero/data_normalizer.rb, line 6
def self.normalize_client(client, name)
  client['name'] ||= name
  client['admin'] ||= false
  client['admin'] = !!client['admin']
  client['public_key'] ||= PUBLIC_KEY
  client['validator'] ||= false
  client['validator'] = !!client['validator']
  client['json_class'] ||= "Chef::ApiClient"
  client['chef_type'] ||= "client"
  client
end
normalize_cookbook(endpoint, org_prefix, cookbook, name, version, base_uri, method) click to toggle source
# File lib/chef_zero/data_normalizer.rb, line 64
    def self.normalize_cookbook(endpoint, org_prefix, cookbook, name, version, base_uri, method)
      # TODO I feel dirty
      if method != 'PUT'
        cookbook.each_pair do |key, value|
          if value.is_a?(Array)
            value.each do |file|
              if file.is_a?(Hash) && file.has_key?('checksum')
                file['url'] ||= endpoint.build_uri(base_uri, org_prefix + ['file_store', 'checksums', file['checksum']])
              end
            end
          end
        end
        cookbook['name'] ||= "#{name}-#{version}"
        # TODO this feels wrong, but the real chef server doesn't expand this default
  #      cookbook['version'] ||= version
        cookbook['cookbook_name'] ||= name
        cookbook['frozen?'] ||= false
        cookbook['metadata'] ||= {}
        cookbook['metadata']['version'] ||= version
        # Sad to not be expanding defaults just because Chef doesn't :(
#        cookbook['metadata']['name'] ||= name
#        cookbook['metadata']['description'] ||= "A fabulous new cookbook"
        cookbook['metadata']['long_description'] ||= ""
#        cookbook['metadata']['maintainer'] ||= "YOUR_COMPANY_NAME"
#        cookbook['metadata']['maintainer_email'] ||= "YOUR_EMAIL"
#        cookbook['metadata']['license'] ||= "none"
        cookbook['metadata']['dependencies'] ||= {}
        cookbook['metadata']['attributes'] ||= {}
        cookbook['metadata']['recipes'] ||= {}
      end
      cookbook['json_class'] ||= 'Chef::CookbookVersion'
      cookbook['chef_type'] ||= 'cookbook_version'
      if method == 'MIN'
        cookbook['metadata'].delete('attributes')
        cookbook['metadata'].delete('long_description')
      end
      cookbook
    end
normalize_data_bag_item(data_bag_item, data_bag_name, id, method) click to toggle source
# File lib/chef_zero/data_normalizer.rb, line 27
def self.normalize_data_bag_item(data_bag_item, data_bag_name, id, method)
  if method == 'DELETE'
    # TODO SERIOUSLY, WHO DOES THIS MANY EXCEPTIONS IN THEIR INTERFACE
    if !(data_bag_item['json_class'] == 'Chef::DataBagItem' && data_bag_item['raw_data'])
      data_bag_item['id'] ||= id
      data_bag_item = { 'raw_data' => data_bag_item }
      data_bag_item['chef_type'] ||= 'data_bag_item'
      data_bag_item['json_class'] ||= 'Chef::DataBagItem'
      data_bag_item['data_bag'] ||= data_bag_name
      data_bag_item['name'] ||= "data_bag_item_#{data_bag_name}_#{id}"
    end
  else
    # If it's not already wrapped with raw_data, wrap it.
    if data_bag_item['json_class'] == 'Chef::DataBagItem' && data_bag_item['raw_data']
      data_bag_item = data_bag_item['raw_data']
    end
    # Argh.  We don't do this on GET, but we do on PUT and POST????
    if %w(PUT POST).include?(method)
      data_bag_item['chef_type'] ||= 'data_bag_item'
      data_bag_item['data_bag'] ||= data_bag_name
    end
    data_bag_item['id'] ||= id
  end
  data_bag_item
end
normalize_environment(environment, name) click to toggle source
# File lib/chef_zero/data_normalizer.rb, line 53
def self.normalize_environment(environment, name)
  environment['name'] ||= name
  environment['description'] ||= ''
  environment['cookbook_versions'] ||= {}
  environment['json_class'] ||= "Chef::Environment"
  environment['chef_type'] ||= "environment"
  environment['default_attributes'] ||= {}
  environment['override_attributes'] ||= {}
  environment
end
normalize_node(node, name) click to toggle source
# File lib/chef_zero/data_normalizer.rb, line 103
def self.normalize_node(node, name)
  node['name'] ||= name
  node['json_class'] ||= 'Chef::Node'
  node['chef_type'] ||= 'node'
  node['chef_environment'] ||= '_default'
  node['override'] ||= {}
  node['normal'] ||= {}
  node['default'] ||= {}
  node['automatic'] ||= {}
  node['run_list'] ||= []
  node['run_list'] = normalize_run_list(node['run_list'])
  node
end
normalize_role(role, name) click to toggle source
# File lib/chef_zero/data_normalizer.rb, line 117
def self.normalize_role(role, name)
  role['name'] ||= name
  role['description'] ||= ''
  role['json_class'] ||= 'Chef::Role'
  role['chef_type'] ||= 'role'
  role['default_attributes'] ||= {}
  role['override_attributes'] ||= {}
  role['run_list'] ||= []
  role['run_list'] = normalize_run_list(role['run_list'])
  role['env_run_lists'] ||= {}
  role['env_run_lists'].each_pair do |env, run_list|
    role['env_run_lists'][env] = normalize_run_list(run_list)
  end
  role
end
normalize_run_list(run_list) click to toggle source
# File lib/chef_zero/data_normalizer.rb, line 133
def self.normalize_run_list(run_list)
  run_list.map{|item|
    case item
    when /^recipe\[.*\]$/
      item # explicit recipe
    when /^role\[.*\]$/
      item # explicit role
    else
      "recipe[#{item}]"
    end
  }.uniq
end
normalize_user(user, name) click to toggle source
# File lib/chef_zero/data_normalizer.rb, line 18
def self.normalize_user(user, name)
  user['name'] ||= name
  user['admin'] ||= false
  user['admin'] = !!user['admin']
  user['openid'] ||= nil
  user['public_key'] ||= PUBLIC_KEY
  user
end