itamae で下記のように書いた時、対象のファイルの読み取り権限がないと失敗する。
file "/path/to/file" do
action :edit
block do |s|
# ...
end
end
内部では net-scp を使ってファイルを取得 → 変更してアップロードしているので、ファイル取得時に読み取り権限がないと失敗する。
net-scp にモンキーパッチをあてて、sudo を使うようにすればよい。
require "net/scp"
module Net
class SCP
module Sudo
def scp_command(*args)
command = super
"sudo " + command
end
end
end
end
Net::SCP.prepend Net::SCP::Sudo
下記のテンプレートでは lib/sudo_scp.rb にこのコードを保存し、roles/* から require している。