32 lines
1.1 KiB
Ruby
32 lines
1.1 KiB
Ruby
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: BUSL-1.1
|
|
|
|
module Vagrant
|
|
module Util
|
|
module Remote
|
|
module SafePuts
|
|
# The SafePuts module is included in a few different places to
|
|
# provide a safe_puts method which does not error in the case that
|
|
# stdout is closed.
|
|
#
|
|
# When we are in remote mode, stdout is in fact closed as all I/O
|
|
# is happening over an RPC interface. Instead of having safe_puts
|
|
# just swallow output every time it's called, we want it to send
|
|
# the message somewhere it will eventually be output.
|
|
#
|
|
# To do this, we need to do some reflection to figure out what gets us
|
|
# to a UI::Remote.
|
|
def safe_puts(message=nil, opts=nil)
|
|
# When we're in a Command context, we can get a UI::Remote from the
|
|
# Environment
|
|
if instance_variable_defined?(:@env)
|
|
@env.ui.output(message)
|
|
else
|
|
raise "Cannot safe_puts in remote mode from #{self.class}; Remote::SafePuts must be updated to handle this context"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|