class ChefDK::PolicyfileServices::Push

Attributes

config[R]
policy_group[R]
root_dir[R]
storage_config[R]
ui[R]

Public Class Methods

new(policyfile: nil, ui: nil, policy_group: nil, config: nil, root_dir: nil) click to toggle source
# File lib/chef-dk/policyfile_services/push.rb, line 39
def initialize(policyfile: nil, ui: nil, policy_group: nil, config: nil, root_dir: nil)
  @root_dir = root_dir
  @ui = ui
  @config = config
  @policy_group = policy_group

  policyfile_rel_path = policyfile || "Policyfile.rb"
  policyfile_full_path = File.expand_path(policyfile_rel_path, root_dir)
  @storage_config = Policyfile::StorageConfig.new.use_policyfile(policyfile_full_path)

  @http_client = nil
  @policy_data = nil
end

Public Instance Methods

http_client() click to toggle source
# File lib/chef-dk/policyfile_services/push.rb, line 53
def http_client
  @http_client ||= Chef::ServerAPI.new(config.chef_server_url,
    signing_key_filename: config.client_key,
    client_name: config.node_name)
end
policy_data() click to toggle source
# File lib/chef-dk/policyfile_services/push.rb, line 59
def policy_data
  @policy_data ||= FFI_Yajl::Parser.parse(IO.read(policyfile_lock_expanded_path))
rescue => error
  raise PolicyfilePushError.new("Error reading lockfile #{policyfile_lock_expanded_path}", error)
end
policyfile_lock() click to toggle source
# File lib/chef-dk/policyfile_services/push.rb, line 82
def policyfile_lock
  @policyfile_lock || validate_lockfile
end
run() click to toggle source
# File lib/chef-dk/policyfile_services/push.rb, line 72
def run
  unless File.exist?(policyfile_lock_expanded_path)
    raise LockfileNotFound, "No lockfile at #{policyfile_lock_expanded_path} - you need to run `install` before `push`"
  end

  validate_lockfile
  write_updated_lockfile
  upload_policy
end
uploader() click to toggle source
# File lib/chef-dk/policyfile_services/push.rb, line 65
def uploader
  ChefDK::Policyfile::Uploader.new(policyfile_lock, policy_group,
    ui: ui,
    http_client: http_client,
    policy_document_native_api: config.policy_document_native_api)
end

Private Instance Methods

upload_policy() click to toggle source
# File lib/chef-dk/policyfile_services/push.rb, line 88
def upload_policy
  uploader.upload
rescue => error
  raise PolicyfilePushError.new("Failed to upload policy to policy group #{policy_group}", error)
end
validate_lockfile() click to toggle source
# File lib/chef-dk/policyfile_services/push.rb, line 100
def validate_lockfile
  return @policyfile_lock if @policyfile_lock

  @policyfile_lock = ChefDK::PolicyfileLock.new(storage_config).build_from_lock_data(policy_data)
  # TODO: enumerate any cookbook that have been updated
  @policyfile_lock.validate_cookbooks!
  @policyfile_lock
rescue => error
  raise PolicyfilePushError.new("Invalid lockfile data", error)
end
write_updated_lockfile() click to toggle source
# File lib/chef-dk/policyfile_services/push.rb, line 94
def write_updated_lockfile
  with_file(policyfile_lock_expanded_path) do |f|
    f.print(FFI_Yajl::Encoder.encode(policyfile_lock.to_lock, pretty: true ))
  end
end