Convenience function for ensuring a connection is established
(ctx context.Context, connName string)
| 1111 | |
| 1112 | // Convenience function for ensuring a connection is established |
| 1113 | func EnsureConnection(ctx context.Context, connName string) error { |
| 1114 | if IsLocalConnName(connName) { |
| 1115 | return nil |
| 1116 | } |
| 1117 | connOpts, err := remote.ParseOpts(connName) |
| 1118 | if err != nil { |
| 1119 | return fmt.Errorf("error parsing connection name: %w", err) |
| 1120 | } |
| 1121 | conn := GetConn(connOpts) |
| 1122 | if conn == nil { |
| 1123 | return fmt.Errorf("connection not found: %s", connName) |
| 1124 | } |
| 1125 | connStatus := conn.DeriveConnStatus() |
| 1126 | switch connStatus.Status { |
| 1127 | case Status_Connected: |
| 1128 | return nil |
| 1129 | case Status_Connecting: |
| 1130 | return conn.WaitForConnect(ctx) |
| 1131 | case Status_Init, Status_Disconnected: |
| 1132 | return conn.Connect(ctx, &wconfig.ConnKeywords{}) |
| 1133 | case Status_Error: |
| 1134 | return fmt.Errorf("connection error: %s", connStatus.Error) |
| 1135 | default: |
| 1136 | return fmt.Errorf("unknown connection status %q", connStatus.Status) |
| 1137 | } |
| 1138 | } |
| 1139 | |
| 1140 | func DisconnectClient(opts *remote.SSHOpts) error { |
| 1141 | conn := getConnInternal(opts, false) |
no test coverage detected