Skip to content

Instantly share code, notes, and snippets.

@fernandokbs
Created September 2, 2024 14:33
Show Gist options
  • Save fernandokbs/a53f4f3efd4f4e968fedc5d07f3546f3 to your computer and use it in GitHub Desktop.
Save fernandokbs/a53f4f3efd4f4e968fedc5d07f3546f3 to your computer and use it in GitHub Desktop.
test
require "sshkit"
require "sshkit/dsl"
class Shell
include SSHKit::DSL
def initialize(server, component)
@server = server
@base_dir = "/Users/fernando/test/.scripts"
@script_name = generate_script_name
@remote_dir = "/home/ubuntu/.ubuntu"
configure_ssh
copy_script(component)
end
def execute
on @server.public_address do
create_remote_dir
set_remote_permissions
upload_script
run_script
print_result_code
end
end
private
def configure_ssh
SSHKit::Backend::Netssh.configure do |ssh|
ssh.connection_timeout = 10
ssh.ssh_options = {
user: @server.user_server,
keys: %w[/Users/fernando/.ssh/id_rsa],
auth_methods: %w[publickey]
}
end
end
def generate_script_name
"#{SecureRandom.uuid}.sh"
end
def copy_script(component)
script_content = ApplicationController.render(component, layout: false)
File.write(script_path, script_content)
end
def script_path
File.join(@base_dir, @script_name)
end
def create_remote_dir
execute(:sudo, "mkdir -p #{@remote_dir}")
end
def set_remote_permissions
execute(:sudo, "chown #{@server.user_server} -R #{@remote_dir}")
end
def upload_script
upload!(script_path, @remote_dir)
end
def run_script
execute(:sudo, "bash #{@remote_dir}/#{@script_name}")
end
def print_result_code
result_code = capture("echo $?")
puts result_code.red
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment