class TargetIO::Deploy

Public Instance Methods

create(file) click to toggle source
# File lib/chef/file_content_management/deploy/target_io.rb, line 3
def create(file)
  Chef::Log.trace("Touching #{file} to create it")
  TargetIO::FileUtils.touch(file)
end
deploy(src, dst) click to toggle source
# File lib/chef/file_content_management/deploy/target_io.rb, line 8
def deploy(src, dst)
  Chef::Log.trace("Reading modes from remote file #{dst}")
  stat = ::TargetIO::File.stat(dst)
  mode = stat.mode & 07777
  uid  = stat.uid
  gid  = stat.gid

  # TODO: Switch to TargetIO::File.open as soon as writing is implemented
  Chef::Log.trace("Uploading local temporary file #{src} as remote file #{dst}")
  connection = Chef.run_context&.transport_connection
  connection.upload(src, dst)

  Chef::Log.trace("Applying mode = #{mode.to_s(8)}, uid = #{uid}, gid = #{gid} to #{dst}")
  ::TargetIO::File.chown(uid, nil, dst)
  ::TargetIO::File.chown(nil, gid, dst)
  ::TargetIO::File.chmod(mode, dst)

  # Local clean up
  File.delete(src)
end