@Override
  public RemoteConnection apply(VirtualMachine virtualMachine) {

    checkArgument(virtualMachine.publicIpAddress().isPresent());
    checkArgument(virtualMachine.loginName().isPresent());
    checkArgument(virtualMachine.loginPassword().isPresent());
    int remotePort = virtualMachine.remotePort();
    OSFamily osFamily = virtualMachine.osFamily();

    return connectionService.getRemoteConnection(
        HostAndPort.fromParts(virtualMachine.publicIpAddress().get().getIp(), remotePort),
        osFamily,
        LoginCredentialBuilder.newBuilder()
            .password(virtualMachine.loginPassword().get())
            .username(virtualMachine.loginName().get())
            .build());
  }