module PagerDuty::ChefServer::SyncHelper

Public Instance Methods

chef_repo_dir() click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 34
def chef_repo_dir
  File.expand_path('..', cookbook_dir)
end
converge_by(msg) { || ... } click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 26
def converge_by(msg)
  if why_run
    ui.info(ui.color("Would ", :cyan)+ msg)
  else
    yield
  end
end
create_databag(data_bag_name) click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 130
def create_databag(data_bag_name)
  converge_by "Create data bag #{data_bag_name}" do
    knife Chef::Knife::DataBagCreate, data_bag_name
  end
end
data_bag_from_file(name, path) click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 51
def data_bag_from_file(name, path)
  converge_by "Create data bag #{name} from #{path}" do
    knife Chef::Knife::DataBagFromFile, name, path
  end
end
data_bag_from_hash(databag_name, data) click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 136
def data_bag_from_hash(databag_name, data)
  tmp = Tempfile.new(['restorechef', '.json'])
  begin
    tmp.write(JSON.dump(data))
    tmp.close
    converge_by "create data bag #{databag_name}" do
      data_bag_from_file(databag_name, tmp.path)
    end
  ensure
    tmp.unlink
  end
end
databag_dir() click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 42
def databag_dir
  File.join(chef_repo_dir, 'data_bags')
end
delete_cookbook(cb) click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 101
def delete_cookbook(cb)
  converge_by "Delete cookbook #{cb}" do
    knife Chef::Knife::CookbookDelete, cb do |config|
      config[:yes] = true
      config[:all] = true
    end
  end
end
environment_dir() click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 46
def environment_dir
  File.join(chef_repo_dir, 'environments')
end
ignore_file() click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 157
def ignore_file
  File.join(chef_repo_dir, '.pd-ignore')
end
ignored?(path) click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 22
def ignored?(path)
  ignore_patterns && ignore_patterns.any?{|pattern| File.fnmatch?(pattern, path)}
end
knife(klass, *name_args) { |config| ... } click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 149
def knife(klass, *name_args)
  klass.load_deps
  plugin = klass.new
  yield plugin.config if Kernel.block_given?
  plugin.name_args = name_args
  plugin.run
end
role_dir() click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 38
def role_dir
  File.join(chef_repo_dir, 'roles')
end
upload_all_cookbooks() click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 73
def upload_all_cookbooks
  converge_by 'Upload all cookbooks' do
    knife(Chef::Knife::CookbookUpload) do |config|
      config[:all] = true
      config[:cookbook_path] = cookbook_dir
    end
  end
end
upload_cookbook(cb) click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 82
def upload_cookbook(cb)
  converge_by "Upload cookbook #{cb}" do
    knife(Chef::Knife::CookbookUpload, cb) do |config|
      config[:cookbook_path] = cookbook_dir
      config[:depends] = false
    end
  end
end
upload_cookbooks(cbcb) click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 91
def upload_cookbooks(cbcb)
  sorted_cookbooks = cbcb.sort # definite order + nice printout for why_run
  converge_by "Upload cookbooks #{sorted_cookbooks.join(', ')}" do
    knife Chef::Knife::CookbookUpload, *sorted_cookbooks do |config|
      config[:cookbook_path] = cookbook_dir
      config[:depends] = false
    end
  end
end
upload_databags() click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 110
def upload_databags
  ui.info(ui.color('updating data bags in batch mode', :yellow))
  existing_databags = Chef::DataBag.list.keys
  Dir[databag_dir+'/*'].each do |db_path|
    if ignored?(db_path)
      ui.info(ui.color("Ignored:", :magenta) + db_path)
      next
    end
    db_name = File.basename(db_path)
    unless existing_databags.include?(db_name)
      create_databag(db_name)
    end
    Dir[db_path+'/*'].each do |path|
      unless ignored?(path)
        data_bag_from_file(File.basename(db_path), path)
      end
    end
  end
end
upload_environments() click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 57
def upload_environments
  Dir[environment_dir+'/*'].reject{|f| File.directory?(f)}.each do |path|
    converge_by "Create environment from #{path}" do
      knife Chef::Knife::EnvironmentFromFile, path
    end
  end
end
upload_roles() click to toggle source
# File lib/pagerduty/chef_server/sync_helper.rb, line 65
def upload_roles
  Dir[role_dir+'/*'].each do |path|
    converge_by "Create role from #{path}" do
      knife Chef::Knife::RoleFromFile, path
    end
  end
end