Class: Promote::Uploader

Inherits:
Object
  • Object
show all
Includes:
ChefServer
Defined in:
lib/promote/uploader.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ChefServer

#with_chef_server

Constructor Details

#initialize(config) ⇒ Uploader

Returns a new instance of Uploader.



19
20
21
22
# File 'lib/promote/uploader.rb', line 19

def initialize(config)
  @config = config
  validate_config
end

Instance Attribute Details

#configObject

Returns the value of attribute config.



99
100
101
# File 'lib/promote/uploader.rb', line 99

def config
  @config
end

Instance Method Details

#upload_cookbook(cookbook_name) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/promote/uploader.rb', line 24

def upload_cookbook(cookbook_name)
  vendor_path='/tmp/promote_vendor'
  FileUtils.rm_rf(vendor_path) if Dir.exist?(vendor_path)

  berksfile_path = File.join(config.cookbook_directory, cookbook_name, "Berksfile")
  Berkshelf.set_format :null
  berksfile = Berkshelf::Berksfile.from_file(berksfile_path)
  berksfile.vendor(vendor_path)

  upload_filtered_cookbooks(Dir.glob(File.join(vendor_path,'*'))
    .select{|f| File.directory?(f)})
end

#upload_cookbook_directory(directory, ui = nil) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/promote/uploader.rb', line 44

def upload_cookbook_directory(directory, ui = nil)
  if !Dir.glob(File.join(directory, "*")).empty?
    if ui
      ui.info "Uploading cookbooks from #{directory} to #{config.chef_server_url}"
    end
    with_chef_server(@config) do
      knife = Chef::Knife::CookbookUpload.new()
      knife.config[:all] = true
      knife.config[:freeze] = true
      knife.config[:cookbook_path] = directory
      knife.run
    end

  elsif ui
    ui.info "No cookbooks found in #{directory}"
  end
end

#upload_cookbooks(environment = nil) ⇒ Object



37
38
39
40
41
42
# File 'lib/promote/uploader.rb', line 37

def upload_cookbooks(environment = nil)
  dirs = (Dir.glob(File.expand_path("~/.berkshelf/cookbooks/*")) <<
    Dir.glob(File.join(config.cookbook_directory, "*"))).flatten!

  upload_filtered_cookbooks(dirs, environment)
end

#upload_data_bagsObject



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/promote/uploader.rb', line 74

def upload_data_bags
  data_bag_directory = File.join(config.temp_directory, "data_bags")
  
  chef_fs_directory = nil
  with_chef_server(config) do
    chef_fs_directory = Chef::ChefFS::FileSystem::ChefRepositoryFileSystemRootDir.new(
      {
        'data_bags' => [data_bag_directory]
      }
    )
  end

  config.reset_temp_dir

  Dir.glob(File.join(config.data_bag_directory,'**/*.json')).
    reject{ |file| file.end_with?("_keys.json")}.each do |file|
      new_path = file.sub(config.repo_root, config.temp_directory)
      new_dir = File.dirname(new_path)
      FileUtils.mkdir_p(new_dir) unless Dir.exist?(new_dir)
      FileUtils.cp(file, new_path)
    end

  upload_file("/data_bags/**/*.json", chef_fs_directory)
end

#upload_environment(environment_name, ui = nil) ⇒ Object



62
63
64
# File 'lib/promote/uploader.rb', line 62

def upload_environment(environment_name, ui = nil)
  upload_file("/environments/#{environment_name}.json", nil, ui)
end

#upload_environmentsObject



66
67
68
# File 'lib/promote/uploader.rb', line 66

def upload_environments
  upload_file("/environments/*.json")
end

#upload_rolesObject



70
71
72
# File 'lib/promote/uploader.rb', line 70

def upload_roles
  upload_file("/roles/*.json")
end