Class: HeadChef::Diff

Inherits:
Object
  • Object
show all
Defined in:
lib/head_chef/tasks/diff.rb

Class Method Summary collapse

Class Method Details

.diff(environment) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/head_chef/tasks/diff.rb', line 3

def self.diff(environment)
  HeadChef.ui.info("Loading environment #{environment} from chef server...")
  chef_environment = HeadChef.chef_server.environment.find(environment)

  if chef_environment
    chef_versions = chef_environment.cookbook_versions
  else
    HeadChef.ui.error("Environment #{environment} not found on chef server.")
    Kernel.exit(1337)
  end

  # Run berks install to populate cached cookbook list
  # @NOTE: for now it is up to user to maintain Berksfile
  HeadChef.ui.info('Loading cookbooks from berkshelf...')
  cached_cookbooks = Berkshelf.ui.mute { HeadChef.berksfile.install }

  HeadChef.ui.say('Calculating diff...', :cyan)
  cookbook_diff = CookbookDiff.new

  cached_cookbooks.each do |berkshelf_cookbook|
    cookbook_name = berkshelf_cookbook.name.chomp("-#{berkshelf_cookbook.version}")

    if chef_versions[cookbook_name]
      chef_version = chef_versions[cookbook_name]
    else
      chef_version = nil
    end

    cookbook_diff.add(Cookbook.new(cookbook_name, berkshelf_cookbook.version, chef_version))
    chef_versions.delete(cookbook_name)
  end

  chef_versions.each do |cookbook_name, cookbook_version|
    cookbook_diff.add(Cookbook.new(cookbook_name, nil, cookbook_version))
  end

  cookbook_diff
end