From 821a320b404041456c5753f1a6c47e9a6ede4c28 Mon Sep 17 00:00:00 2001 From: Justin Hiemstra Date: Tue, 6 Aug 2024 21:30:18 +0000 Subject: [PATCH 1/5] Gut client of Topology integration The purpose of this was to remove Topology integrations from the client and rely instead solely on the director. This was accomplished by getting rid of the `namespaces` package. The big picture change here is that instead of having the client construct and pass around namespace objects, it now constructs and passes around a director response object, which is designed to have all the information needed to perform various client actions. While working on this, I realized the Director also stopped responding with the `base-paths` key in the `X-Pelican-Token-Generation` header, so I lumped that into this (which I kind of had to do for some of the changes to make sense). That issue is tracked [here](https://github.com/PelicanPlatform/pelican/issues/1540), but I'll note this is only a partial, temporary fix to stop potential bleeding -- more thought should be given to it longterm. While reviewing, it's safe to ignore the many thousands of lines of deleted code from the `namespaces` module. This is all legacy, and the goal of this was to remove it all and replace it with director equivalents. I also fixed up a few duplicated Director requests I found, such as was the case with recursive downloads that called the Director twice -- once to construct namespace info, and once to get the collections URL. Now this is all done in the same query. --- client/acquire_token.go | 83 +- client/director.go | 254 +- client/director_test.go | 229 +- client/fed_linux_test.go | 2 +- client/get_best_cache.go | 197 - client/get_stashserver_caches.go | 198 - client/handle_http.go | 383 +- client/handle_http_test.go | 344 +- client/main.go | 206 +- client/main_test.go | 172 +- client/sharing_url.go | 4 +- client/sharing_url_test.go | 2 +- cmd/config_mgr.go | 23 +- cmd/object_copy.go | 41 +- cmd/plugin.go | 12 +- cmd/plugin_test.go | 2 +- director/director.go | 22 +- namespaces/namespaces.go | 242 - namespaces/namespaces_test.go | 318 -- namespaces/resources/itb-namespaces.json | 1 - namespaces/resources/namespaces.json | 5931 ---------------------- oauth2/oauth2.go | 30 +- server_structs/director.go | 139 + server_structs/director_test.go | 132 + 24 files changed, 875 insertions(+), 8092 deletions(-) delete mode 100644 client/get_best_cache.go delete mode 100644 client/get_stashserver_caches.go delete mode 100644 namespaces/namespaces.go delete mode 100644 namespaces/namespaces_test.go delete mode 100644 namespaces/resources/itb-namespaces.json delete mode 100644 namespaces/resources/namespaces.json diff --git a/client/acquire_token.go b/client/acquire_token.go index 766a43ed8..302d5cd23 100644 --- a/client/acquire_token.go +++ b/client/acquire_token.go @@ -32,12 +32,12 @@ import ( log "github.com/sirupsen/logrus" oauth2_upstream "golang.org/x/oauth2" - config "github.com/pelicanplatform/pelican/config" - namespaces "github.com/pelicanplatform/pelican/namespaces" + "github.com/pelicanplatform/pelican/config" oauth2 "github.com/pelicanplatform/pelican/oauth2" + "github.com/pelicanplatform/pelican/server_structs" ) -func TokenIsAcceptable(jwtSerialized string, osdfPath string, namespace namespaces.Namespace, opts config.TokenGenerationOpts) bool { +func TokenIsAcceptable(jwtSerialized string, osdfPath string, dirResp server_structs.DirectorResponse, opts config.TokenGenerationOpts) bool { parser := jwt.Parser{SkipClaimsValidation: true} token, _, err := parser.ParseUnverified(jwtSerialized, &jwt.MapClaims{}) if err != nil { @@ -52,7 +52,7 @@ func TokenIsAcceptable(jwtSerialized string, osdfPath string, namespace namespac } osdfPathCleaned := path.Clean(osdfPath) - if !strings.HasPrefix(osdfPathCleaned, namespace.Path) { + if !strings.HasPrefix(osdfPathCleaned, dirResp.XPelNsHdr.Namespace) { return false } @@ -63,9 +63,10 @@ func TokenIsAcceptable(jwtSerialized string, osdfPath string, namespace namespac // In this case, we want to strip out the issuer base path, not the // namespace one, in order to see if the token has the right privs. - targetResource := path.Clean("/" + osdfPathCleaned[len(namespace.Path):]) - if namespace.CredentialGen != nil && namespace.CredentialGen.BasePath != nil && len(*namespace.CredentialGen.BasePath) > 0 { - targetResource = path.Clean("/" + osdfPathCleaned[len(*namespace.CredentialGen.BasePath):]) + // TODO: Come back and figure out how to resolve this in the case that there are multiple issuers or multiple base paths. + targetResource := path.Clean("/" + osdfPathCleaned[len(dirResp.XPelNsHdr.Namespace):]) + if len(dirResp.XPelTokGenHdr.Issuers) >= 0 && len(dirResp.XPelTokGenHdr.BasePaths) > 0 && dirResp.XPelTokGenHdr.BasePaths[0] != "" { + targetResource = path.Clean("/" + osdfPathCleaned[len(dirResp.XPelTokGenHdr.BasePaths[0]):]) } scopes_iface := (*token.Claims.(*jwt.MapClaims))["scope"] @@ -115,13 +116,18 @@ func TokenIsExpired(jwtSerialized string) bool { return true } -func RegisterClient(namespace namespaces.Namespace) (*config.PrefixEntry, error) { - issuer, err := config.GetIssuerMetadata(*namespace.CredentialGen.Issuer) +func RegisterClient(dirResp server_structs.DirectorResponse) (*config.PrefixEntry, error) { + issuers := dirResp.XPelTokGenHdr.Issuers + if len(issuers) == 0 { + return nil, fmt.Errorf("no issuer information for prefix '%s' is provided", dirResp.XPelNsHdr.Namespace) + } + issuerUrl := issuers[0].String() + issuer, err := config.GetIssuerMetadata(issuerUrl) if err != nil { return nil, err } if issuer.RegistrationURL == "" { - return nil, fmt.Errorf("Issuer %s does not support dynamic client registration", *namespace.CredentialGen.Issuer) + return nil, fmt.Errorf("Issuer %s does not support dynamic client registration", issuerUrl) } drcp := oauth2.DCRPConfig{ClientRegistrationEndpointURL: issuer.RegistrationURL, Transport: config.GetTransport(), Metadata: oauth2.Metadata{ @@ -138,35 +144,38 @@ func RegisterClient(namespace namespaces.Namespace) (*config.PrefixEntry, error) return nil, err } newEntry := config.PrefixEntry{ - Prefix: namespace.Path, + Prefix: dirResp.XPelNsHdr.Namespace, ClientID: resp.ClientID, ClientSecret: resp.ClientSecret, } return &newEntry, nil } -// Given a URL and a piece of the namespace, attempt to acquire a valid +// Given a URL and a director Response, attempt to acquire a valid // token for that URL. -func AcquireToken(destination *url.URL, namespace namespaces.Namespace, opts config.TokenGenerationOpts) (string, error) { +func AcquireToken(destination *url.URL, dirResp server_structs.DirectorResponse, opts config.TokenGenerationOpts) (string, error) { + log.Debugln("Acquiring a token from configuration and OAuth2") - if namespace.CredentialGen == nil { - return "", errors.Errorf("Credential generation scheme information not provided for prefix %s", namespace.Path) - } - if namespace.CredentialGen.Strategy == nil { - return "", errors.Errorf("Credential generation strategy not provided for prefix %s", namespace.Path) - } - switch strategy := *namespace.CredentialGen.Strategy; strategy { - case "OAuth2": - case "Vault": - return "", fmt.Errorf("Vault credential generation strategy is not supported") + nsPrefix := dirResp.XPelNsHdr.Namespace + + switch tokStrategy := dirResp.XPelTokGenHdr.Strategy; tokStrategy { + case server_structs.OAuthStrategy: + case server_structs.VaultStrategy: + return "", fmt.Errorf("vault credential generation strategy is not supported") default: - return "", fmt.Errorf("Unknown credential generation strategy (%s) for prefix %s", - strategy, namespace.Path) + return "", fmt.Errorf("unknown credential generation strategy (%s) for prefix %s", + tokStrategy, nsPrefix) + } + + issuers := dirResp.XPelTokGenHdr.Issuers + if len(issuers) == 0 { + return "", fmt.Errorf("no issuer information for prefix '%s' is provided", nsPrefix) } - issuer := *namespace.CredentialGen.Issuer + + issuer := issuers[0].String() if len(issuer) == 0 { - return "", fmt.Errorf("Issuer for prefix %s is unknown", namespace.Path) + return "", fmt.Errorf("issuer URL for prefix %s is unknown", nsPrefix) } osdfConfig, err := config.GetCredentialConfigContents() @@ -176,7 +185,7 @@ func AcquireToken(destination *url.URL, namespace namespaces.Namespace, opts con prefixIdx := -1 for idx, entry := range osdfConfig.OSDF.OauthClient { - if entry.Prefix == namespace.Path { + if entry.Prefix == nsPrefix { prefixIdx = idx break } @@ -184,8 +193,8 @@ func AcquireToken(destination *url.URL, namespace namespaces.Namespace, opts con var prefixEntry *config.PrefixEntry newEntry := false if prefixIdx < 0 { - log.Infof("Prefix configuration for %s not in configuration file; will request new client", namespace.Path) - prefixEntry, err = RegisterClient(namespace) + log.Infof("Prefix configuration for %s not in configuration file; will request new client", nsPrefix) + prefixEntry, err = RegisterClient(dirResp) if err != nil { return "", err } @@ -195,8 +204,8 @@ func AcquireToken(destination *url.URL, namespace namespaces.Namespace, opts con } else { prefixEntry = &osdfConfig.OSDF.OauthClient[prefixIdx] if len(prefixEntry.ClientID) == 0 || len(prefixEntry.ClientSecret) == 0 { - log.Infof("Prefix configuration for %s missing OAuth2 client information", namespace.Path) - prefixEntry, err = RegisterClient(namespace) + log.Infof("Prefix configuration for %s missing OAuth2 client information", nsPrefix) + prefixEntry, err = RegisterClient(dirResp) if err != nil { return "", err } @@ -216,7 +225,7 @@ func AcquireToken(destination *url.URL, namespace namespaces.Namespace, opts con var acceptableToken *config.TokenEntry = nil acceptableUnexpiredToken := "" for idx, token := range prefixEntry.Tokens { - if !TokenIsAcceptable(token.AccessToken, destination.Path, namespace, opts) { + if !TokenIsAcceptable(token.AccessToken, destination.Path, dirResp, opts) { continue } if acceptableToken == nil { @@ -271,12 +280,12 @@ func AcquireToken(destination *url.URL, namespace namespaces.Namespace, opts con } } - token, err := oauth2.AcquireToken(issuer, prefixEntry, namespace.CredentialGen, destination.Path, opts) + token, err := oauth2.AcquireToken(issuer, prefixEntry, dirResp, destination.Path, opts) if errors.Is(err, oauth2.ErrUnknownClient) { // We use anonymously-registered clients; OA4MP can periodically garbage collect these to prevent DoS // In this case, we register a new client and try to acquire again. - log.Infof("Identity provider does not know the client for %s; registering a new one", namespace.Path) - prefixEntry, err = RegisterClient(namespace) + log.Infof("Identity provider does not know the client for %s; registering a new one", nsPrefix) + prefixEntry, err = RegisterClient(dirResp) if err != nil { return "", errors.Wrap(err, "re-registration error (identity provider does not recognize our client)") } @@ -285,7 +294,7 @@ func AcquireToken(destination *url.URL, namespace namespaces.Namespace, opts con log.Warningln("Failed to save new token to configuration file:", err) } - if token, err = oauth2.AcquireToken(issuer, prefixEntry, namespace.CredentialGen, destination.Path, opts); err != nil { + if token, err = oauth2.AcquireToken(issuer, prefixEntry, dirResp, destination.Path, opts); err != nil { return "", err } } else if err != nil { diff --git a/client/director.go b/client/director.go index 24dd6148a..2ad92faea 100644 --- a/client/director.go +++ b/client/director.go @@ -24,7 +24,6 @@ import ( "io" "net/http" "net/url" - "path" "sort" "strconv" "strings" @@ -33,80 +32,10 @@ import ( log "github.com/sirupsen/logrus" "github.com/pelicanplatform/pelican/config" - namespaces "github.com/pelicanplatform/pelican/namespaces" "github.com/pelicanplatform/pelican/server_structs" "github.com/pelicanplatform/pelican/utils" ) -// Given the Director response, create the ordered list of caches -// and store it as namespace.SortedDirectorCaches -func CreateNsFromDirectorResp(dirResp *http.Response) (namespace namespaces.Namespace, err error) { - pelicanNamespaceHdr := dirResp.Header.Values("X-Pelican-Namespace") - if len(pelicanNamespaceHdr) == 0 { - err = errors.New("Pelican director did not include mandatory X-Pelican-Namespace header in response") - return - } - xPelicanNamespace := utils.HeaderParser(pelicanNamespaceHdr[0]) - namespace.Path = xPelicanNamespace["namespace"] - namespace.UseTokenOnRead, _ = strconv.ParseBool(xPelicanNamespace["require-token"]) - namespace.ReadHTTPS, _ = strconv.ParseBool(xPelicanNamespace["readhttps"]) - namespace.DirListHost = xPelicanNamespace["collections-url"] - - xPelicanAuthorization := []string{} // map of header to x - single entry - want to create an array for issuer - if len(dirResp.Header.Values("X-Pelican-Authorization")) > 0 { - //For each entry,(which is an array of issuer=0) - //So it's a map entry - HeaderParser returns a max entry - //We want to appen the value - for _, authEntry := range dirResp.Header.Values("X-Pelican-Authorization") { - parsedEntry := utils.HeaderParser(authEntry) - xPelicanAuthorization = append(xPelicanAuthorization, parsedEntry["issuer"]) - } - namespace.Issuer = xPelicanAuthorization - } - - var xPelicanTokenGeneration map[string]string - if len(dirResp.Header.Values("X-Pelican-Token-Generation")) > 0 { - xPelicanTokenGeneration = utils.HeaderParser(dirResp.Header.Values("X-Pelican-Token-Generation")[0]) - - // Instantiate the cred gen struct - namespace.CredentialGen = &namespaces.CredentialGeneration{} - - // We wind up with a duplicate issuer here as the encapsulating ns also encodes this - issuer := xPelicanTokenGeneration["issuer"] - namespace.CredentialGen.Issuer = &issuer - - base_path := xPelicanTokenGeneration["base-path"] - namespace.CredentialGen.BasePath = &base_path - - if max_scope_depth, exists := xPelicanTokenGeneration["max-scope-depth"]; exists { - max_scope_depth_int, err := strconv.Atoi(max_scope_depth) - if err != nil { - log.Debugln("Server sent an invalid max scope depth; ignoring:", max_scope_depth) - } else { - namespace.CredentialGen.MaxScopeDepth = &max_scope_depth_int - } - } - - strategy := xPelicanTokenGeneration["strategy"] - namespace.CredentialGen.Strategy = &strategy - - // The Director only returns a vault server if the strategy is vault. - if vs, exists := xPelicanTokenGeneration["vault-server"]; exists { - namespace.CredentialGen.VaultServer = &vs - } - } - - // Create the caches slice - namespace.SortedDirectorCaches, err = getCachesFromDirectorResponse(dirResp, namespace.UseTokenOnRead || namespace.ReadHTTPS) - if err != nil { - log.Errorln("Unable to construct ordered cache list:", err) - return - } - log.Debugln("Namespace path constructed from Director:", namespace.Path) - - return -} - // Make a request to the director for a given verb/resource; return the // HTTP response object only if a 307 is returned. func queryDirector(ctx context.Context, verb, sourcePath, directorUrl string) (resp *http.Response, err error) { @@ -164,17 +93,7 @@ func queryDirector(ctx context.Context, verb, sourcePath, directorUrl string) (r } } - // If we get a 404, the director will hopefully tell us why. It might be that the namespace doesn't exist - if resp.StatusCode == 404 && verb == "PROPFIND" { - // If we get a 404 response from a PROPFIND, we are likely working with an old director so we should return a response - return resp, errors.New("404: " + errMsg) - } else if resp.StatusCode == 404 { - // If we get a 404 response when we are not doing a PROPFIND, just return the 404 error without a response - return nil, errors.New("404: " + errMsg) - } else if resp.StatusCode == http.StatusMethodNotAllowed && verb == "PROPFIND" { - // If we get a 405 with a PROPFIND, the client will handle it - return - } else if resp.StatusCode == http.StatusMultiStatus && verb == "PROPFIND" { + if resp.StatusCode == http.StatusMultiStatus && verb == "PROPFIND" { // This is a director >7.9 proxy the PROPFIND response instead of redirect to the origin return } else if resp.StatusCode != 307 { @@ -184,13 +103,18 @@ func queryDirector(ctx context.Context, verb, sourcePath, directorUrl string) (r return } -func getCachesFromDirectorResponse(resp *http.Response, needsToken bool) (caches []namespaces.DirectorCache, err error) { - // Get the Link header +type ServerPriority struct { + URL *url.URL + Priority int +} + +func parseServersFromDirectorResponse(resp *http.Response) (servers []*url.URL, err error) { linkHeader := resp.Header.Values("Link") if len(linkHeader) == 0 { - return []namespaces.DirectorCache{}, nil + return nil, nil } + serversPrio := make([]ServerPriority, 0) for _, linksStr := range strings.Split(linkHeader[0], ",") { links := strings.Split(strings.ReplaceAll(linksStr, " ", ""), ";") @@ -213,105 +137,93 @@ func getCachesFromDirectorResponse(resp *http.Response, needsToken bool) (caches // Construct the cache objects, getting endpoint and auth requirements from // Director - var cache namespaces.DirectorCache - cache.AuthedReq = needsToken - cache.EndpointUrl = endpoint - cache.Priority = pri - caches = append(caches, cache) + server, err := url.Parse(endpoint) + if err != nil { + log.Errorln("Failed to parse server:", endpoint, "error:", err) + continue + } + serversPrio = append(serversPrio, ServerPriority{URL: server, Priority: pri}) } // Making the assumption that the Link header doesn't already provide the caches // in order (even though it probably does). This sorts the caches and ensures // we're using the "pri" tag to order them - sort.Slice(caches, func(i, j int) bool { - val1 := caches[i].Priority - val2 := caches[j].Priority - return val1 < val2 + sort.Slice(serversPrio, func(i, j int) bool { + return serversPrio[i].Priority < serversPrio[j].Priority }) - return caches, err + servers = make([]*url.URL, len(serversPrio)) + for i, serverPrio := range serversPrio { + servers[i] = serverPrio.URL + } + + return } -// NewTransferDetails creates the TransferDetails struct with the given cache -func newTransferDetailsUsingDirector(cache namespaces.DirectorCache, opts transferDetailsOptions) []transferAttemptDetails { - details := make([]transferAttemptDetails, 0) - cacheEndpoint := cache.EndpointUrl +// Retrieve federation namespace information for a given URL. +func GetDirectorInfoForPath(ctx context.Context, resourcePath, directorUrl string, isPut bool, query string) (parsedResponse server_structs.DirectorResponse, err error) { + if directorUrl == "" { + return server_structs.DirectorResponse{}, + errors.Errorf("unable to retrieve information from a Director for object %s because no director URL was provided", resourcePath) + } - // Form the URL - cacheURL, err := url.Parse(cacheEndpoint) - if err != nil { - log.Errorln("Failed to parse cache:", cache, "error:", err) - return nil + log.Debugln("Will query director at", directorUrl, "for object", resourcePath) + verb := "GET" + if isPut { + verb = "PUT" } - if cacheURL.Scheme == "unix" && cacheURL.Host != "" { - cacheURL.Path = path.Clean("/" + path.Join(cacheURL.Host, cacheURL.Path)) - } else if cacheURL.Scheme != "unix" && cacheURL.Host == "" { - // Assume the cache is just a hostname - cacheURL.Host = cacheEndpoint - cacheURL.Path = "" - cacheURL.Scheme = "" - cacheURL.Opaque = "" + if query != "" { + resourcePath += "?" + query } - if opts.NeedsToken { - // Unless we're using the local Unix domain socket cache, force HTTPS - if cacheURL.Scheme != "unix" { - cacheURL.Scheme = "https" - if !hasPort(cacheURL.Host) { - // Add port 8444 and 8443 - urlCopy := *cacheURL - urlCopy.Host += ":8444" - details = append(details, transferAttemptDetails{ - Url: &urlCopy, - Proxy: false, - PackOption: opts.PackOption, - }) - // Strip the port off and add 8443 - cacheURL.Host = cacheURL.Host + ":8443" - } - } - det := transferAttemptDetails{ - Url: cacheURL, - Proxy: false, - PackOption: opts.PackOption, - } - if cacheURL.Scheme == "unix" { - det.UnixSocket = cacheURL.Path - } - // Whether port is specified or not, add a transfer without proxy - details = append(details, det) - } else if cacheURL.Scheme == "" || cacheURL.Scheme == "http" { - // Assume a transfer not needing a token and not specifying a scheme is HTTP - // WARNING: This is legacy code; we should always specify a scheme - cacheURL.Scheme = "http" - if !hasPort(cacheURL.Host) { - cacheURL.Host += ":8000" - } - isProxyEnabled := isProxyEnabled() - details = append(details, transferAttemptDetails{ - Url: cacheURL, - Proxy: isProxyEnabled, - PackOption: opts.PackOption, - }) - if isProxyEnabled && CanDisableProxy() { - details = append(details, transferAttemptDetails{ - Url: cacheURL, - Proxy: false, - PackOption: opts.PackOption, - }) - } - } else { - // A non-HTTP scheme is specified and a token is not needed; this wasn't possible - // in the legacy cases. Simply use the provided config - det := transferAttemptDetails{ - Url: cacheURL, - Proxy: false, - PackOption: opts.PackOption, - } - if cacheURL.Scheme == "unix" { - det.UnixSocket = cacheURL.Path + var dirResp *http.Response + dirResp, err = queryDirector(ctx, verb, resourcePath, directorUrl) + if err != nil { + if isPut && dirResp != nil && dirResp.StatusCode == 405 { + err = errors.New("error 405: No writeable origins were found") + return + } else { + err = errors.Wrapf(err, "error while querying the director at %s", directorUrl) + return } - details = append(details, det) } - return details + parsedResponse, err = ParseDirectorInfo(dirResp) + if err != nil { + err = errors.Wrap(err, "failed to parse director response") + return + } + + return +} + +// Given the Director response, parse the headers and construct the ordered list of object +// servers. +func ParseDirectorInfo(dirResp *http.Response) (server_structs.DirectorResponse, error) { + var xPelNs server_structs.XPelNs + if err := (&xPelNs).ParseRawResponse(dirResp); err != nil { + return server_structs.DirectorResponse{}, errors.Wrapf(err, "failed to parse %s header", xPelNs.GetName()) + } + log.Debugln("Namespace path constructed from Director:", xPelNs.Namespace) + + var xPelAuth server_structs.XPelAuth + if err := (&xPelAuth).ParseRawResponse(dirResp); err != nil { + return server_structs.DirectorResponse{}, errors.Wrapf(err, "failed to parse %s header", xPelAuth.GetName()) + } + + var xPelTokGen server_structs.XPelTokGen + if err := (&xPelTokGen).ParseRawResponse(dirResp); err != nil { + return server_structs.DirectorResponse{}, errors.Wrapf(err, "failed to parse %s header", xPelTokGen.GetName()) + } + + sortedObjectServers, err := parseServersFromDirectorResponse(dirResp) + if err != nil { + return server_structs.DirectorResponse{}, errors.Wrap(err, "failed to determine object servers from Director's response") + } + + return server_structs.DirectorResponse{ + ObjectServers: sortedObjectServers, + XPelAuthHdr: xPelAuth, + XPelNsHdr: xPelNs, + XPelTokGenHdr: xPelTokGen, + }, nil } diff --git a/client/director_test.go b/client/director_test.go index 71dbabfbd..e9e0f0e5d 100644 --- a/client/director_test.go +++ b/client/director_test.go @@ -24,17 +24,15 @@ import ( "io" "net/http" "net/http/httptest" - "os" "testing" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - namespaces "github.com/pelicanplatform/pelican/namespaces" + "github.com/pelicanplatform/pelican/server_structs" "github.com/pelicanplatform/pelican/utils" ) -func TestGetCachesFromDirectorResponse(t *testing.T) { +func TestParseServersFromDirectorResponse(t *testing.T) { // Construct the Director's Response, comprising headers and a body directorHeaders := make(map[string][]string) directorHeaders["Link"] = []string{"; rel=\"duplicate\"; pri=1, ; rel=\"duplicate\"; pri=2"} @@ -46,27 +44,19 @@ func TestGetCachesFromDirectorResponse(t *testing.T) { Body: io.NopCloser(bytes.NewReader(directorBody)), } - // Call the function in question - caches, err := getCachesFromDirectorResponse(directorResponse, true) - - // Test for expected outputs - assert.NoError(t, err, "Error getting caches from the Director's response") - - assert.Equal(t, "my-cache.edu:8443", caches[0].EndpointUrl) - assert.Equal(t, 1, caches[0].Priority) - assert.Equal(t, true, caches[0].AuthedReq) - - assert.Equal(t, "another-cache.edu:8443", caches[1].EndpointUrl) - assert.Equal(t, 2, caches[1].Priority) - assert.Equal(t, true, caches[1].AuthedReq) + sortedServers, err := parseServersFromDirectorResponse(directorResponse) + assert.NoError(t, err, "Error getting sortedServers from the Director's response") + assert.Equal(t, "my-cache.edu:8443", sortedServers[0].String()) + assert.Equal(t, "another-cache.edu:8443", sortedServers[1].String()) } -func TestCreateNsFromDirectorResp(t *testing.T) { - //Craft the Director's response +func TestParseDirectorInfo(t *testing.T) { + // Craft the Director's response directorHeaders := make(map[string][]string) directorHeaders["Link"] = []string{"; rel=\"duplicate\"; pri=1, ; rel=\"duplicate\"; pri=2"} - directorHeaders["X-Pelican-Namespace"] = []string{"namespace=/foo/bar, readhttps=True, require-token=True"} - directorHeaders["X-Pelican-Authorization"] = []string{"issuer=https://get-your-tokens.org", "issuer=https://get-your-tokens2.org"} + directorHeaders["X-Pelican-Namespace"] = []string{"namespace=/foo/bar, require-token=True, collections-url=https://my-collections.com"} + directorHeaders["X-Pelican-Authorization"] = []string{"issuer=https://get-your-tokens.org, issuer=https://get-your-tokens2.org"} + directorHeaders["X-Pelican-Token-Generation"] = []string{"issuer=https://get-your-tokens.org, base-path=/foo/bar, max-scope-depth=2, strategy=OAuth2"} directorBody := []byte(`{"key": "value"}`) directorResponse := &http.Response{ @@ -75,41 +65,21 @@ func TestCreateNsFromDirectorResp(t *testing.T) { Body: io.NopCloser(bytes.NewReader(directorBody)), } - // Create a namespace instance to test against - cache1 := namespaces.DirectorCache{ - EndpointUrl: "my-cache.edu:8443", - Priority: 1, - AuthedReq: true, - } - cache2 := namespaces.DirectorCache{ - EndpointUrl: "another-cache.edu:8443", - Priority: 2, - AuthedReq: true, - } - - caches := []namespaces.DirectorCache{} - caches = append(caches, cache1) - caches = append(caches, cache2) - - constructedNamespace := &namespaces.Namespace{ - SortedDirectorCaches: caches, - Path: "/foo/bar", - Issuer: []string{"https://get-your-tokens.org", "https://get-your-tokens2.org"}, - ReadHTTPS: true, - UseTokenOnRead: true, - } + parsed, err := ParseDirectorInfo(directorResponse) + assert.NoError(t, err, "Error parsing Director response") - // Call the function in question - ns, err := CreateNsFromDirectorResp(directorResponse) + assert.Equal(t, "/foo/bar", parsed.XPelNsHdr.Namespace) + assert.Equal(t, true, parsed.XPelNsHdr.RequireToken) + assert.NotNil(t, parsed.XPelNsHdr.CollectionsUrl) + assert.Equal(t, "https://my-collections.com", parsed.XPelNsHdr.CollectionsUrl.String()) - // Test for expected outputs - assert.NoError(t, err, "Error creating Namespace from Director response") + assert.Equal(t, "https://get-your-tokens.org", parsed.XPelAuthHdr.Issuers[0].String()) + assert.Equal(t, "https://get-your-tokens2.org", parsed.XPelAuthHdr.Issuers[1].String()) - assert.Equal(t, constructedNamespace.SortedDirectorCaches, ns.SortedDirectorCaches) - assert.Equal(t, constructedNamespace.Path, ns.Path) - assert.Equal(t, constructedNamespace.Issuer, ns.Issuer) - assert.Equal(t, constructedNamespace.ReadHTTPS, ns.ReadHTTPS) - assert.Equal(t, constructedNamespace.UseTokenOnRead, ns.UseTokenOnRead) + assert.Equal(t, "https://get-your-tokens.org", parsed.XPelTokGenHdr.Issuers[0].String()) + assert.Equal(t, "/foo/bar", parsed.XPelTokGenHdr.BasePaths[0]) + assert.Equal(t, uint(2), parsed.XPelTokGenHdr.MaxScopeDepth) + assert.Equal(t, server_structs.OAuthStrategy, parsed.XPelTokGenHdr.Strategy) // Test the old version of parsing the issuer from the director to ensure backwards compatibility with a V1 client and a V2 director var xPelicanAuthorization map[string]string @@ -119,73 +89,7 @@ func TestCreateNsFromDirectorResp(t *testing.T) { issuer = xPelicanAuthorization["issuer"] } - assert.Equal(t, "https://get-your-tokens.org", issuer) - -} - -func TestNewTransferDetailsUsingDirector(t *testing.T) { - os.Setenv("http_proxy", "http://proxy.edu:3128") - t.Cleanup(func() { - require.NoError(t, os.Unsetenv("http_proxy")) - }) - - // Construct the input caches - // Cache with http - nonAuthCache := namespaces.DirectorCache{ - ResourceName: "mycache", - EndpointUrl: "my-cache-url:8000", - Priority: 99, - AuthedReq: false, - } - - // Cache with https - authCache := namespaces.DirectorCache{ - ResourceName: "mycache", - EndpointUrl: "my-cache-url:8443", - Priority: 99, - AuthedReq: true, - } - - // Case 1: cache with http - - transfers := newTransferDetailsUsingDirector(nonAuthCache, transferDetailsOptions{nonAuthCache.AuthedReq, ""}) - assert.Equal(t, 2, len(transfers)) - assert.Equal(t, "my-cache-url:8000", transfers[0].Url.Host) - assert.Equal(t, "http", transfers[0].Url.Scheme) - assert.Equal(t, true, transfers[0].Proxy) - assert.Equal(t, 2, len(transfers)) - assert.Equal(t, "my-cache-url:8000", transfers[1].Url.Host) - assert.Equal(t, "http", transfers[1].Url.Scheme) - assert.Equal(t, false, transfers[1].Proxy) - - // Case 2: cache with https - transfers = newTransferDetailsUsingDirector(authCache, transferDetailsOptions{authCache.AuthedReq, ""}) - assert.Equal(t, 1, len(transfers)) - assert.Equal(t, "my-cache-url:8443", transfers[0].Url.Host) - assert.Equal(t, "https", transfers[0].Url.Scheme) - assert.Equal(t, false, transfers[0].Proxy) - - // Case 3: cache without port with http - nonAuthCache.EndpointUrl = "my-cache-url" - transfers = newTransferDetailsUsingDirector(nonAuthCache, transferDetailsOptions{nonAuthCache.AuthedReq, ""}) - assert.Equal(t, 2, len(transfers)) - assert.Equal(t, "my-cache-url:8000", transfers[0].Url.Host) - assert.Equal(t, "http", transfers[0].Url.Scheme) - assert.Equal(t, true, transfers[0].Proxy) - assert.Equal(t, "my-cache-url:8000", transfers[1].Url.Host) - assert.Equal(t, "http", transfers[1].Url.Scheme) - assert.Equal(t, false, transfers[1].Proxy) - - // Case 4. cache without port with https - authCache.EndpointUrl = "my-cache-url" - transfers = newTransferDetailsUsingDirector(authCache, transferDetailsOptions{authCache.AuthedReq, ""}) - assert.Equal(t, 2, len(transfers)) - assert.Equal(t, "my-cache-url:8444", transfers[0].Url.Host) - assert.Equal(t, "https", transfers[0].Url.Scheme) - assert.Equal(t, false, transfers[0].Proxy) - assert.Equal(t, "my-cache-url:8443", transfers[1].Url.Host) - assert.Equal(t, "https", transfers[1].Url.Scheme) - assert.Equal(t, false, transfers[1].Proxy) + assert.Equal(t, "https://get-your-tokens2.org", issuer) } func TestQueryDirector(t *testing.T) { @@ -215,3 +119,88 @@ func TestQueryDirector(t *testing.T) { t.Errorf("Expected HTTP status code %d, but got %d", http.StatusFound, actualResp.StatusCode) } } + +func TestGetDirectorInfoForPath(t *testing.T) { + // Craft the Director's response + directorHeaders := make(map[string]string) + directorHeaders["Link"] = "; rel=\"duplicate\"; pri=1, ; rel=\"duplicate\"; pri=2" + directorHeaders["X-Pelican-Namespace"] = "namespace=/foo/bar, require-token=True, collections-url=https://my-collections.com" + directorHeaders["X-Pelican-Authorization"] = "issuer=https://get-your-tokens.org, issuer=https://get-your-tokens2.org" + directorHeaders["X-Pelican-Token-Generation"] = "issuer=https://get-your-tokens.org, base-path=/foo/bar, max-scope-depth=2, strategy=OAuth2" + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "GET" { + queryParams := r.URL.Query() + if _, ok := queryParams["directread"]; ok { + // Prove the query made it through the various function calls. This is NOT + // how the director would actually respond (but it's easier to mock in a test) + // and it effectively shows preservation of the query. + w.WriteHeader(http.StatusOK) + _, _ = w.Write([]byte(`{"status": "direct read"}`)) + return + } + for key, value := range directorHeaders { + w.Header().Add(key, value) + } + w.WriteHeader(http.StatusTemporaryRedirect) + } else if r.Method == "PUT" { + w.WriteHeader(http.StatusMethodNotAllowed) + } + })) + defer ts.Close() + + tests := []struct { + name string + resourcePath string + directorUrl string + isPut bool + query string + expectedError string + }{ + { + name: "No director URL", + resourcePath: "/test", + directorUrl: "", + isPut: false, + query: "", + expectedError: "unable to retrieve information from a Director for object /test because no director URL was provided", + }, + { + name: "Successful GET request", + resourcePath: "/test", + directorUrl: ts.URL, + isPut: false, + query: "", + expectedError: "", + }, + { + name: "PUT request changes verb", // also generates 405, although this is a feauture of the director + resourcePath: "/test", + directorUrl: ts.URL, + isPut: true, + query: "", + expectedError: "error 405: No writeable origins were found", + }, + { + name: "Queries are propagated", // also generates 405, although this is a feauture of the director + resourcePath: "/test", + directorUrl: ts.URL, + isPut: false, + query: "directread", + expectedError: "200: {\"status\": \"direct read\"}", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + ctx := context.Background() + _, err := GetDirectorInfoForPath(ctx, tt.resourcePath, tt.directorUrl, tt.isPut, tt.query) + if tt.expectedError != "" { + assert.Error(t, err) + assert.Contains(t, err.Error(), tt.expectedError) + } else { + assert.NoError(t, err) + } + }) + } +} diff --git a/client/fed_linux_test.go b/client/fed_linux_test.go index 950fb29c6..3129605bd 100644 --- a/client/fed_linux_test.go +++ b/client/fed_linux_test.go @@ -455,5 +455,5 @@ func TestFailureOnOriginDisablingListings(t *testing.T) { _, err = client.DoGet(fed.Ctx, downloadURL, t.TempDir(), true) assert.Error(t, err) - assert.Contains(t, err.Error(), "origin and/or namespace does not support directory listings") + assert.Contains(t, err.Error(), "no collections URL found in director response") } diff --git a/client/get_best_cache.go b/client/get_best_cache.go deleted file mode 100644 index e52240db8..000000000 --- a/client/get_best_cache.go +++ /dev/null @@ -1,197 +0,0 @@ -/*************************************************************** - * - * Copyright (C) 2024, University of Nebraska-Lincoln - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You may - * obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ***************************************************************/ - -package client - -import ( - "bytes" - "errors" - "io" - "math/rand" - "net" - "net/http" - "net/url" - "strconv" - "strings" - - log "github.com/sirupsen/logrus" -) - -func GetBestCache(cacheListName string) ([]string, error) { - - if cacheListName == "" { - cacheListName = "xroot" - } - - GeoIpUrl := url.URL{} - // Use the geo ip service on the WLCG Web Proxy Auto Discovery machines - geo_ip_sites := [...]string{"wlcg-wpad.cern.ch", "wlcg-wpad.fnal.gov"} - - // randomize the geo ip sitess - rand.Shuffle(len(geo_ip_sites), func(i, j int) { - geo_ip_sites[i], geo_ip_sites[j] = geo_ip_sites[j], geo_ip_sites[i] - }) - - var caches_list []string - //Use Stashservers.dat api - - //api_text = "stashservers.dat" - GeoIpUrl.Path = "stashservers.dat" - - if cacheListName != "" { - queryParams := GeoIpUrl.Query() - queryParams.Set("list", cacheListName) - GeoIpUrl.RawQuery = queryParams.Encode() - } - - var responselines_b [][]byte - - type header struct { - Host string - } - - i := 0 - - for i = 0; i < len(geo_ip_sites); i++ { - - cur_site := geo_ip_sites[i] - var headers header - headers.Host = cur_site - log.Debugf("Trying server site of %s", cur_site) - - for _, ip := range getIPs(cur_site) { - GeoIpUrl.Host = ip - GeoIpUrl.Scheme = "http" - - // Headers for the HTTP request - // Create an HTTP client - var resp *http.Response - disableProxy := false - skipResponse := false - for { - defaultTransport := http.DefaultTransport.(*http.Transport).Clone() - if disableProxy { - log.Debugln("Querying (without proxy)", GeoIpUrl.String()) - defaultTransport.Proxy = nil - } else { - log.Debugln("Querying", GeoIpUrl.String()) - } - client := &http.Client{Transport: defaultTransport} - req, err := http.NewRequest(http.MethodGet, GeoIpUrl.String(), nil) - if err != nil { - log.Errorln("Failed to create HTTP request:", err) - skipResponse = true - break - } - req.Header.Add("Cache-control", "max-age=0") - req.Header.Add("User-Agent", getUserAgent("")) - resp, err = client.Do(req) - if err == nil { - break - } - if urle, ok := err.(*url.Error); ok && urle.Unwrap() != nil { - if ope, ok := urle.Unwrap().(*net.OpError); ok && ope.Op == "proxyconnect" { - log.Warnln("Failed to connect to proxy; will retry without. ", ope) - if !disableProxy { - disableProxy = true - continue - } - } - } - log.Errorln("Could not open URL", err) - skipResponse = true - break - } - if skipResponse { - continue - } - - if resp.StatusCode == 200 { - log.Debugf("Got OK code 200 from %s", cur_site) - responsetext_b, err := io.ReadAll(resp.Body) - if err != nil { - log.Errorln("Could not acquire http response text") - } - //responsetext_s := string(responsetext_b) - //log.Debugln("Recieved from GeoIP server:", responsetext_s) - responselines_b = bytes.Split(responsetext_b, []byte("\n")) - defer resp.Body.Close() - break - } - } - - // If we got a response, then stop trying other geoip servers - if len(responselines_b) > 0 { - break - } - - } - order_str := "" - - if len(responselines_b) > 0 { - order_str = string(responselines_b[0]) - } - - if order_str == "" { - if len(caches_list) == 0 { - log.Errorln("unable to get list of caches") - return nil, errors.New("Unable to get the list of caches") - } - //Unable to find a geo_ip server to user, return random choice from caches - rand.Shuffle(len(caches_list), func(i, j int) { - caches_list[i], caches_list[j] = caches_list[j], caches_list[i] - }) - minsite := caches_list[0] - log.Debugf("Unable to use Geoip to find closest cache! Returning random cache %s", minsite) - log.Debugf("Randomized list of nearest caches: %s", strings.Join(caches_list, ",")) - return caches_list, nil - } else { - // The order string should be something like: 3,1,2 - ordered_list := strings.Split(strings.TrimSpace(order_str), ",") - log.Debugln("Ordered list of caches:", ordered_list) - - //Used the stashservers.dat api - var err error - cachesList, err := get_stashservers_caches(responselines_b) - - if err != nil { - log.Errorln("Error from getting stashcache caches:", err) - return nil, err - } - - // Ordered list is an array of index values which are used - // to index into caches_list - minIndex, err := strconv.Atoi(ordered_list[0]) - if err != nil { - log.Errorln("Received a non integer min site from the WPAD servers") - return nil, errors.New("Received a non integer min site from the WPAD servers") - } - minsite := cachesList[cacheListName][minIndex-1] - log.Debugln("Closest cache:", minsite) - - finalCacheList := make([]string, 0, len(ordered_list)) - for _, ordered_index := range ordered_list { - orderedIndex, _ := strconv.Atoi(ordered_index) - finalCacheList = append(finalCacheList, cachesList[cacheListName][orderedIndex-1]) - } - - log.Debugf("Returning closest cache: %s", minsite) - log.Debugf("Ordered list of nearest caches: %s", finalCacheList) - return finalCacheList, nil - } -} diff --git a/client/get_stashserver_caches.go b/client/get_stashserver_caches.go deleted file mode 100644 index b3abb1331..000000000 --- a/client/get_stashserver_caches.go +++ /dev/null @@ -1,198 +0,0 @@ -/*************************************************************** - * - * Copyright (C) 2024, University of Nebraska-Lincoln - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You may - * obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ***************************************************************/ - -package client - -import ( - "bytes" - "crypto/rsa" - "crypto/sha1" - "crypto/x509" - _ "embed" - "encoding/hex" - "encoding/pem" - "errors" - "os" - "path" - "path/filepath" - "strings" - - log "github.com/sirupsen/logrus" -) - -//go:embed resources/opensciencegrid.org.pub -var osgpubkey []byte - -func get_stashservers_caches(responselines_b [][]byte) (map[string][]string, error) { - - /** - After the geo order of the selected server list on line zero, - the rest of the response is in .cvmfswhitelist format. - This is done to avoid using https for every request on the - wlcg-wpad servers and takes advantage of conveniently - existing infrastructure. - The format contains the following lines: - 1. Creation date stamp, e.g. 20200414170005. For debugging - only. - 2. Expiration date stamp, e.g. E20200421170005. cvmfs clients - check this to avoid replay attacks, but for this api that - is not much of a risk so it is ignored. - 3. "Repository" name, e.g. Nstash-servers. cvmfs clients - also check this but it is not important here. - 4. With cvmfs the 4th line has a repository fingerprint, but - for this api it instead contains a semi-colon separated list - of named server lists. Each server list is of the form - name=servers where servers is comma-separated. Ends with - "hash=-sha1" because cvmfs_server expects the hash name - to be there. e.g. - xroot=stashcache.t2.ucsd.edu,sg-gftp.pace.gatech.edu;xroots=xrootd-local.unl.edu,stashcache.t2.ucsd.edu;hash=-sha1 - 5. A two-dash separator, i.e "--" - 6. The sha1 hash of lines 1 through 4. - 7. The signature, i.e. an RSA encryption of the hash that can - be decrypted by the OSG cvmfs public key. Contains binary - information so it may contain a variable number of newlines - which would have caused it to have been split into multiple - response "lines". - **/ - - if len(responselines_b) < 8 { - - log.Errorln("stashservers response too short, less than 8 lines:", len(responselines_b)) - return nil, errors.New("stashservers response too short, less than 8 lines") - } - - // Get the 5th row (4th index), the last 5 characters - hashname_b := string(responselines_b[4][len(responselines_b[4])-5:]) - - if hashname_b != "-sha1" { - - log.Error("stashservers response does not have sha1 hash:", string(hashname_b)) - return nil, errors.New("stashservers response does not have sha1 hash") - } - - sha1Hash := sha1.New() - sha1Hash.Write(bytes.Join(responselines_b[1:5], []byte("\n"))) - sha1Hash.Write([]byte("\n")) - hashed := sha1Hash.Sum(nil) - hashStr := hex.EncodeToString(hashed) - - log.Debugln("Hashed:", hashStr, "From CVMFS:", string(responselines_b[6])) - if string(responselines_b[6]) != hashStr { - log.Debugln("stashservers hash", string(responselines_b[6]), "does not match expected hash ", hashname_b) - log.Debugln("hashed text:\n", string(hashname_b)) - log.Errorln("stashservers response hash does not match expected hash") - return nil, errors.New("stashservers response hash does not match expected hash") - } - - var pubKey *rsa.PublicKey - var err error - if pubKey, err = readPublicKey(); err != nil { - // The signature check isn't critical to be done everywhere; - // any tampering will likely to be caught somewhere and - // investigated. - log.Warnln("Public Key not found, will not verify caches") - } else { - sig := bytes.Join(responselines_b[7:], []byte("\n")) - err = rsa.VerifyPKCS1v15(pubKey, 0, []byte(hashStr), sig) - if err != nil { - log.Errorln("Error from public key verification of cache list:", err) - //return nil, err - } else { - log.Debugln("Signature Matched") - } - - } - - // Split the caches by type (xroot, xroots) in the returned by the GeoIP service - var toReturn = make(map[string][]string) - log.Debugf("Cache list: %s", string(responselines_b[4])) - for _, transferType := range strings.Split(string(responselines_b[4]), ";") { - splitType := strings.Split(transferType, "=") - toReturn[splitType[0]] = strings.Split(splitType[1], ",") - } - - return toReturn, nil - -} - -func getKeyLocation() string { - osgpub := "opensciencegrid.org.pub" - var checkedLocation string = path.Join("/etc/cvmfs/keys/opensciencegrid.org/", osgpub) - if _, err := os.Stat(checkedLocation); err == nil { - return checkedLocation - } - prefix := os.Getenv("OSG_LOCATION") - if prefix != "" { - checkedLocation = path.Join(prefix, "etc/stashcache", osgpub) - if _, err := os.Stat(checkedLocation); err == nil { - return checkedLocation - } - checkedLocation = path.Join(prefix, "usr/share/stashcache", osgpub) - if _, err := os.Stat(checkedLocation); err == nil { - return checkedLocation - } - - } - - // Try the current directory - checkedLocation, _ = filepath.Abs(osgpub) - if _, err := os.Stat(checkedLocation); err == nil { - return checkedLocation - } - - return "" - -} - -// Largely adapted from https://gist.github.com/jshap70/259a87a7146393aab5819873a193b88c -func readPublicKey() (*rsa.PublicKey, error) { - var err error - publicKeyPath := getKeyLocation() - var pubkeyContents []byte - if publicKeyPath == "" { - pubkeyContents = osgpubkey - } else { - var err error - pubkeyContents, err = os.ReadFile(publicKeyPath) - if err != nil { - log.Errorln("Error reading public key:", err) - return nil, err - } - } - - pubPem, rest := pem.Decode(pubkeyContents) - if pubPem.Type != "PUBLIC KEY" { - log.WithFields(log.Fields{"PEM Type": pubPem.Type}).Error("RSA public key is of the wrong type") - return nil, errors.New("RSA public key is of the wrong type") - } - var parsedKey interface{} - if parsedKey, err = x509.ParsePKIXPublicKey(pubPem.Bytes); err != nil { - log.Errorln("Unable to parse RSA public key:", err) - return nil, errors.New("Unable to parse RSA public key") - } - log.Debugf("Got a %T, with remaining data: %q", parsedKey, rest) - - var pubKey *rsa.PublicKey - var ok bool - if pubKey, ok = parsedKey.(*rsa.PublicKey); !ok { - log.Errorln("Failed to convert RSA public key") - } - - return pubKey, nil - -} diff --git a/client/handle_http.go b/client/handle_http.go index 19b2d04d4..6aa16454d 100644 --- a/client/handle_http.go +++ b/client/handle_http.go @@ -54,9 +54,8 @@ import ( "github.com/pelicanplatform/pelican/config" "github.com/pelicanplatform/pelican/error_codes" - "github.com/pelicanplatform/pelican/namespaces" "github.com/pelicanplatform/pelican/param" - "github.com/pelicanplatform/pelican/utils" + "github.com/pelicanplatform/pelican/server_structs" ) var ( @@ -223,26 +222,25 @@ type ( // long time and all the transfers generated by this job will // use the same namespace and token. TransferJob struct { - ctx context.Context - cancel context.CancelFunc - callback TransferCallbackFunc - uuid uuid.UUID - remoteURL *url.URL - lookupDone atomic.Bool - lookupErr error - activeXfer atomic.Int64 - totalXfer int - localPath string - upload bool - recursive bool - skipAcquire bool - caches []*url.URL - useDirector bool - directorUrl string - tokenLocation string - token string - project string - namespace namespaces.Namespace + ctx context.Context + cancel context.CancelFunc + callback TransferCallbackFunc + uuid uuid.UUID + remoteURL *url.URL + lookupDone atomic.Bool + lookupErr error + activeXfer atomic.Int64 + totalXfer int + localPath string + upload bool + recursive bool + skipAcquire bool + prefObjServers []*url.URL // holds any client-requested caches/origins + dirResp server_structs.DirectorResponse + directorUrl string + tokenLocation string + token string + project string } // A TransferJob associated with a client's request @@ -285,20 +283,20 @@ type ( // A client to the transfer engine. TransferClient struct { - id uuid.UUID - ctx context.Context - cancel context.CancelFunc - callback TransferCallbackFunc - engine *TransferEngine - skipAcquire bool // Enable/disable the token acquisition logic. Defaults to acquiring a token - tokenLocation string // Location of a token file to use for transfers - token string // Token that should be used for transfers - work chan *TransferJob - closed bool - caches []*url.URL - results chan *TransferResults - finalResults chan TransferResults - setupResults sync.Once + id uuid.UUID + ctx context.Context + cancel context.CancelFunc + callback TransferCallbackFunc + engine *TransferEngine + skipAcquire bool // Enable/disable the token acquisition logic. Defaults to acquiring a token + tokenLocation string // Location of a token file to use for transfers + token string // Token that should be used for transfers + work chan *TransferJob + closed bool + prefObjServers []*url.URL // holds any client-requested caches/origins + results chan *TransferResults + finalResults chan TransferResults + setupResults sync.Once } TransferOption = option.Interface @@ -577,7 +575,6 @@ func (te *TransferEngine) newPelicanURL(remoteUrl *url.URL) (pelicanURL pelicanU // If we have a host and url is pelican, we need to extract federation data from the host log.Debugln("Detected pelican:// url, getting federation metadata from specified host", remoteUrl.Host) federationUrl := &url.URL{} - // federationUrl, _ := url.Parse(remoteUrl.String()) federationUrl.Scheme = "https" federationUrl.Path = "" federationUrl.Host = remoteUrl.Host @@ -761,7 +758,7 @@ func (te *TransferEngine) NewClient(options ...TransferOption) (client *Transfer for _, option := range options { switch option.Ident() { case identTransferOptionCaches{}: - client.caches = option.Value().([]*url.URL) + client.prefObjServers = option.Value().([]*url.URL) case identTransferOptionCallback{}: client.callback = option.Value().(TransferCallbackFunc) case identTransferOptionTokenLocation{}: @@ -1103,7 +1100,7 @@ func (tc *TransferClient) NewTransferJob(ctx context.Context, remoteUrl *url.URL copyUrl := *remoteUrl // Make a copy of the input URL to avoid concurrent issues. tj = &TransferJob{ - caches: tc.caches, + prefObjServers: tc.prefObjServers, recursive: recursive, localPath: localPath, remoteURL: ©Url, @@ -1132,7 +1129,7 @@ func (tc *TransferClient) NewTransferJob(ctx context.Context, remoteUrl *url.URL for _, option := range options { switch option.Ident() { case identTransferOptionCaches{}: - tj.caches = option.Value().([]*url.URL) + tj.prefObjServers = option.Value().([]*url.URL) case identTransferOptionCallback{}: tj.callback = option.Value().(TransferCallbackFunc) case identTransferOptionTokenLocation{}: @@ -1144,20 +1141,17 @@ func (tc *TransferClient) NewTransferJob(ctx context.Context, remoteUrl *url.URL } } - if pelicanURL.directorUrl != "" { - tj.useDirector = true - tj.directorUrl = pelicanURL.directorUrl - } - ns, err := getNamespaceInfo(tj.ctx, remoteUrl.Path, pelicanURL.directorUrl, upload, remoteUrl.RawQuery) + tj.directorUrl = pelicanURL.directorUrl + dirResp, err := GetDirectorInfoForPath(tj.ctx, remoteUrl.Path, pelicanURL.directorUrl, upload, remoteUrl.RawQuery) if err != nil { log.Errorln(err) err = errors.Wrapf(err, "failed to get namespace information for remote URL %s", remoteUrl.String()) return } - tj.namespace = ns + tj.dirResp = dirResp - if (upload || ns.UseTokenOnRead) && tj.token == "" { - tj.token, err = getToken(remoteUrl, ns, true, "", tc.tokenLocation, !tj.skipAcquire) + if (upload || dirResp.XPelNsHdr.RequireToken) && tj.token == "" { + tj.token, err = getToken(remoteUrl, dirResp, true, "", tc.tokenLocation, !tj.skipAcquire) if err != nil { return nil, fmt.Errorf("failed to get token for transfer: %v", err) } @@ -1165,12 +1159,11 @@ func (tc *TransferClient) NewTransferJob(ctx context.Context, remoteUrl *url.URL // If we are a recursive download and using the director, we want to attempt to get directory listings from // PROPFINDing the director - if recursive && !upload && tj.useDirector { - dirListHost, err := getCollectionsUrl(tj.ctx, remoteUrl, tj.namespace, tj.directorUrl) - if err != nil { - return nil, err + if recursive && !upload { + collUrl := dirResp.XPelNsHdr.CollectionsUrl + if collUrl == nil { + return nil, errors.New("no collections URL found in director response") } - tj.namespace.DirListHost = dirListHost.String() } log.Debugf("Created new transfer job, ID %s client %s, for URL %s", tj.uuid.String(), tc.id.String(), remoteUrl.String()) @@ -1275,84 +1268,63 @@ func (tj *TransferJob) ID() string { return tj.uuid.String() } -// newTransferDetails creates the TransferDetails struct with the given cache -func newTransferDetails(cache namespaces.Cache, opts transferDetailsOptions) []transferAttemptDetails { +// generateTransferDetails creates the TransferDetails struct with the given remote object server +func generateTransferDetails(remoteOServer string, opts transferDetailsOptions) []transferAttemptDetails { details := make([]transferAttemptDetails, 0) - var cacheEndpoint string - if opts.NeedsToken { - cacheEndpoint = cache.AuthEndpoint - } else { - cacheEndpoint = cache.Endpoint - } // Form the URL - cacheURL, err := url.Parse(cacheEndpoint) + remoteUrl, err := url.Parse(remoteOServer) if err != nil { - log.Errorln("Failed to parse cache:", cache, "error:", err) + log.Errorln("Failed to parse remote object server:", remoteUrl.String(), "error:", err) return nil } - if cacheURL.Scheme == "unix" && cacheURL.Host != "" { - cacheURL.Path = path.Clean("/" + cacheURL.Host + "/" + cacheURL.Path) - cacheURL.Host = "" - } else if cacheURL.Scheme != "unix" && cacheURL.Host == "" { + if remoteUrl.Scheme == "unix" && remoteUrl.Host != "" { + remoteUrl.Path = path.Clean("/" + remoteUrl.Host + "/" + remoteUrl.Path) + remoteUrl.Host = "" + } else if remoteUrl.Scheme != "unix" && remoteUrl.Host == "" { // Assume the cache is just a hostname - cacheURL.Host = cacheEndpoint - cacheURL.Path = "" - cacheURL.Scheme = "" - cacheURL.Opaque = "" + remoteUrl.Host = remoteOServer + remoteUrl.Path = "" + remoteUrl.Scheme = "" + remoteUrl.Opaque = "" } if opts.NeedsToken { - if cacheURL.Scheme != "unix" { - cacheURL.Scheme = "https" - if !hasPort(cacheURL.Host) { - // Add port 8444 and 8443 - urlCopy := *cacheURL - urlCopy.Host += ":8444" - details = append(details, transferAttemptDetails{ - Url: &urlCopy, - Proxy: false, - PackOption: opts.PackOption, - }) - // Strip the port off and add 8443 - cacheURL.Host = cacheURL.Host + ":8443" - } + if remoteUrl.Scheme != "unix" { + remoteUrl.Scheme = "https" } det := transferAttemptDetails{ - Url: cacheURL, + Url: remoteUrl, Proxy: false, PackOption: opts.PackOption, } - if cacheURL.Scheme == "unix" { - det.UnixSocket = cacheURL.Path + if remoteUrl.Scheme == "unix" { + det.UnixSocket = remoteUrl.Path } // Whether port is specified or not, add a transfer without proxy details = append(details, det) - } else if cacheURL.Scheme == "" || cacheURL.Scheme == "http" { - cacheURL.Scheme = "http" - if !hasPort(cacheURL.Host) { - cacheURL.Host += ":8000" - } + } else if remoteUrl.Scheme == "" || remoteUrl.Scheme == "http" { + remoteUrl.Scheme = "http" isProxyEnabled := isProxyEnabled() details = append(details, transferAttemptDetails{ - Url: cacheURL, + Url: remoteUrl, Proxy: isProxyEnabled, PackOption: opts.PackOption, }) if isProxyEnabled && CanDisableProxy() { details = append(details, transferAttemptDetails{ - Url: cacheURL, + Url: remoteUrl, Proxy: false, PackOption: opts.PackOption, }) } } else { det := transferAttemptDetails{ - Url: cacheURL, + Url: remoteUrl, Proxy: false, PackOption: opts.PackOption, } - if cacheURL.Scheme == "unix" { - det.UnixSocket = cacheURL.Path + if remoteUrl.Scheme == "unix" { + det.UnixSocket = remoteUrl.Path } details = append(details, det) } @@ -1360,47 +1332,32 @@ func newTransferDetails(cache namespaces.Cache, opts transferDetailsOptions) []t return details } -type CacheInterface interface{} - -func generateTransferDetailsUsingCache(cache CacheInterface, opts transferDetailsOptions) []transferAttemptDetails { - if directorCache, ok := cache.(namespaces.DirectorCache); ok { - return newTransferDetailsUsingDirector(directorCache, opts) - } else if cache, ok := cache.(namespaces.Cache); ok { - return newTransferDetails(cache, opts) - } - return nil -} - -// This function gets the amount of caches we will try equal to the configured "cachesToTry". It sets up our transfer attempt details for us and returns it. -// This function also ensures that we do not try any duplicate caches -func getCachesToTry(closestNamespaceCaches []CacheInterface, job *TransferJob, cachesToTry int, packOption string) (transfers []transferAttemptDetails) { - // The counter for the amount of caches we currently have listed to try - cachesListed := 0 - // This list keeps track of the caches we have seen to ensure we do not have any duplicates - cacheList := make(map[CacheInterface]bool) - // Caches is just the list of caches we want to try (we print this out in debug logs) - caches := make([]CacheInterface, 0) +// Generate the unique list of object servers (caches or origins) that will be attempted for a single transfer job and populate this info +// in the slice of transferAttemptDetails structs +func getObjectServersToTry(sortedObjectServers []string, job *TransferJob, oServersToTry int, packOption string) (transfers []transferAttemptDetails) { + oServersListed := 0 + oServerList := make(map[string]bool) + oServers := make([]string, 0) - for _, cache := range closestNamespaceCaches { - // If we listed the amount of caches we want to try, we can end our loop - if cachesListed == cachesToTry { + for _, oServer := range sortedObjectServers { + if oServersListed == oServersToTry { break } - // if the current cache is already a cache we are trying, skip it - if cacheList[cache] { + // Handle deduplication of any object servers + if oServerList[oServer] { continue } else { - cachesListed++ - caches = append(caches, cache) - cacheList[cache] = true + oServersListed++ + oServers = append(oServers, oServer) + oServerList[oServer] = true td := transferDetailsOptions{ - NeedsToken: job.namespace.ReadHTTPS || job.namespace.UseTokenOnRead, + NeedsToken: !job.dirResp.XPelNsHdr.RequireToken, PackOption: packOption, } - transfers = append(transfers, generateTransferDetailsUsingCache(cache, td)...) + transfers = append(transfers, generateTransferDetails(oServer, td)...) } } - log.Debugln("Trying the caches:", caches) + log.Debugln("Trying the object servers:", oServers) return transfers } @@ -1426,34 +1383,37 @@ func (te *TransferEngine) createTransferFiles(job *clientTransferJob) (err error var transfers []transferAttemptDetails if job.job.upload { // Uploads use the redirected endpoint directly - endpoint, err := url.Parse(job.job.namespace.WriteBackHost) - if err != nil { - return errors.Wrap(err, "Invalid URL returned by director for PUT") + if len(job.job.dirResp.ObjectServers) == 0 { + err = errors.New("No origins found for upload") + return } transfers = append(transfers, transferAttemptDetails{ - Url: endpoint, + Url: job.job.dirResp.ObjectServers[0], PackOption: packOption, }) } else { - var closestNamespaceCaches []CacheInterface - closestNamespaceCaches, err = getCachesFromNamespace(job.job.namespace, job.job.useDirector, job.job.caches) + var sortedServers []*url.URL + sortedServers, err = generateSortedObjServers(job.job.dirResp, job.job.prefObjServers) if err != nil { log.Errorln("Failed to get namespaced caches (treated as non-fatal):", err) } + var sortedServerStrings []string + for _, serverUrl := range sortedServers { + sortedServerStrings = append(sortedServerStrings, serverUrl.String()) + } - // Make sure we only try as many caches as we have - cachesToTry := CachesToTry - if cachesToTry > len(closestNamespaceCaches) { - cachesToTry = len(closestNamespaceCaches) + // Make sure we only try as many object servers as we have + objectServersToTry := ObjectServersToTry + if objectServersToTry > len(sortedServers) { + objectServersToTry = len(sortedServers) } - log.Debugf("Trying the first %d caches", cachesToTry) - transfers = getCachesToTry(closestNamespaceCaches, job.job, cachesToTry, packOption) + log.Debugf("Trying the first %d object servers", objectServersToTry) + transfers = getObjectServersToTry(sortedServerStrings, job.job, objectServersToTry, packOption) if len(transfers) > 0 { log.Traceln("First transfer in list:", transfers[0].Url) } else { - log.Debugln("No transfers possible as no caches are found") - err = errors.New("No transfers possible as no caches are found") + err = errors.New("No transfers possible as no object servers were found") return } } @@ -2427,87 +2387,6 @@ func runPut(request *http.Request, responseChan chan<- *http.Response, errorChan } -// This function queries the director with a PROPFIND to attempt to get the 'collections url'. If a propfind is not allowed on the director -// We fall back to the deprecated dirlisthost in the namespace -func getCollectionsUrl(ctx context.Context, remoteObjectUrl *url.URL, namespace namespaces.Namespace, directorUrl string) (collectionsUrl *url.URL, err error) { - // If we are a recursive download and using the director, we want to attempt to get directory listings from - // PROPFINDing the director - if directorUrl != "" { - // Query the director a PROPFIND to see if we can get our directory listing - resp, err := queryDirector(ctx, "PROPFIND", remoteObjectUrl.Path, directorUrl) - if err != nil { - // If we have an issue querying the director, we want to fallback to the deprecated dirlisthost from the namespace - // At this point, we have already queried the director (and it should have succeeded if we are here) so the error - // we get is most likely an issue with PROPFIND (and an outdated director). Therefore, we should continue if we get a 404 - if resp == nil || !(resp.StatusCode == http.StatusNotFound) { - // We did not get a 404 so we should return the error - return nil, err - } - } - if resp.StatusCode == http.StatusMethodNotAllowed || resp.StatusCode == http.StatusNotFound { - // If the director responds with 405 (method not allowed) or a 404 (not found), we're working with an old Director. - // In that event, we try to fallback and use the deprecated dirlisthost - log.Debugln("Failed to find collections url from director, attempting to find directory listings host in namespace") - // Check for a dir list host in namespace - if namespace.DirListHost == "" { - // Both methods to get directory listings failed - err = &dirListingNotSupportedError{Err: errors.New("origin and/or namespace does not support directory listings")} - return nil, err - } else { - collectionsUrl, err = url.Parse(namespace.DirListHost) - if err != nil { - return nil, err - } - return collectionsUrl, nil - } - } else if resp.StatusCode == http.StatusTemporaryRedirect { - // If the director responds with a 307 (temporary redirect), we're working with a new Director. - // In that event, we can get the collections URL from our redirect - collections := resp.Header.Get("Location") - if collections == "" { - return nil, errors.New("collections URL not found in director response") - } - collectionsUrl, err = url.Parse(collections) - if err != nil { - return nil, errors.Wrap(err, "failed to parse collections URL from the Location header") - } - // We don't want anything in path for the collections url - collectionsUrl.Path = "" - return collectionsUrl, nil - } else if resp.StatusCode == http.StatusMultiStatus { - // In 7.10, we plan to proxy PROPFIND at the director for origins enabled connection broker, - // which will respond with 207 instead of redirect client to the origin. - // In this case, read from X-Pelican-Namespace header - pelicanNamespaceHdr := resp.Header.Values("X-Pelican-Namespace") - if len(pelicanNamespaceHdr) == 0 { - err = errors.New("collections URL not found in director response: X-Pelican-Namespace header is missing in 207 response") - return nil, err - } - xPelicanNamespace := utils.HeaderParser(pelicanNamespaceHdr[0]) - dirCollectionsUrl := xPelicanNamespace["collections-url"] - - collectionsUrl, err = url.Parse(dirCollectionsUrl) - if err != nil { - return nil, errors.Wrap(err, "failed to parse collections URL from the X-Pelican-Namespace header") - } - return collectionsUrl, nil - } else { - return nil, errors.Errorf("unexpected response from director when requesting collections url from origin: %v", resp.Status) - } - } else if namespace.DirListHost != "" { - // If we're not using the director and are using topology, we should check for a dirlisthost from the namespace - collectionsUrl, err = url.Parse(namespace.DirListHost) - if err != nil { - return nil, errors.Wrap(err, "failed to parse directory listing host as a url") - } - } else { - // If we hit this point, we are not using the director and the namespace does not have a DirListHost therefore, the origin and/or namespace does not support it - err = &dirListingNotSupportedError{Err: errors.New("origin and/or namespace does not support directory listings")} - return nil, err - } - return -} - // This helper function creates a web dav client to walkDavDir's. Used for recursive downloads and lists func createWebDavClient(collectionsUrl *url.URL, token string, project string) (client *gowebdav.Client) { auth := &bearerAuth{token: token} @@ -2521,22 +2400,13 @@ func createWebDavClient(collectionsUrl *url.URL, token string, project string) ( // Walk a remote directory in a WebDAV server, emitting the files discovered func (te *TransferEngine) walkDirDownload(job *clientTransferJob, transfers []transferAttemptDetails, files chan *clientTransferFile, url *url.URL) error { // Create the client to walk the filesystem - rootUrl := *url - if job.job.namespace.DirListHost != "" { - dirListURL, err := url.Parse(job.job.namespace.DirListHost) - if err != nil { - log.Errorln("Failed to parse dirlisthost from namespaces into URL:", err) - return err - } - rootUrl = *dirListURL - - } else { - log.Errorln("Host for directory listings is unknown") - return errors.New("Host for directory listings is unknown") + collUrl := job.job.dirResp.XPelNsHdr.CollectionsUrl + if collUrl == nil { + return errors.New("Collections URL not found in director response") } - log.Debugln("Dir list host: ", rootUrl.String()) + log.Debugln("Trying collections URL: ", collUrl.String()) - client := createWebDavClient(&rootUrl, job.job.token, job.job.project) + client := createWebDavClient(collUrl, job.job.token, job.job.project) return te.walkDirDownloadHelper(job, transfers, files, url.Path, client) } @@ -2638,12 +2508,9 @@ func (te *TransferEngine) walkDirUpload(job *clientTransferJob, transfers []tran } // This function performs the ls command by walking through the specified directory and printing the contents of the files -func listHttp(ctx context.Context, remoteObjectUrl *url.URL, directorUrl string, namespace namespaces.Namespace, token string) (fileInfos []FileInfo, err error) { +func listHttp(remoteObjectUrl *url.URL, dirResp server_structs.DirectorResponse, token string) (fileInfos []FileInfo, err error) { // Get our directory listing host - collectionsUrl, err := getCollectionsUrl(ctx, remoteObjectUrl, namespace, directorUrl) - if err != nil { - return - } + collectionsUrl := dirResp.XPelNsHdr.CollectionsUrl log.Debugln("Collections URL: ", collectionsUrl.String()) project := searchJobAd(projectName) @@ -2675,7 +2542,7 @@ func listHttp(ctx context.Context, remoteObjectUrl *url.URL, directorUrl string, } } else if gowebdav.IsErrCode(err, http.StatusMethodNotAllowed) { // We replace the error from gowebdav with our own because gowebdav returns: "ReadDir /prefix/different-path/: 405" which is not very user friendly - return nil, errors.Errorf("405: object listings are not supported by the discovered origin. Contact your federation admin at %s for help", directorUrl) + return nil, errors.Errorf("405: object listings are not supported by the discovered origin") } // Otherwise, a different error occurred and we should return it return nil, errors.Wrap(err, "failed to read remote directory") @@ -2701,35 +2568,21 @@ func listHttp(ctx context.Context, remoteObjectUrl *url.URL, directorUrl string, // Otherwise, the first three caches are queried simultaneously. // For any of the queries, if the attempt with the proxy fails, a second attempt // is made without. -func statHttp(ctx context.Context, dest *url.URL, namespace namespaces.Namespace, directorUrl, token string) (info FileInfo, err error) { +func statHttp(dest *url.URL, dirResp server_structs.DirectorResponse, token string) (info FileInfo, err error) { statHosts := make([]url.URL, 0, 3) - var dirListNotSupported *dirListingNotSupportedError - collectionsUrl, err := getCollectionsUrl(ctx, dest, namespace, directorUrl) - // If we have a dirListingNotSupported error, we can attempt to stat the caches instead - if err != nil && !errors.As(err, &dirListNotSupported) { - return - } + collectionsUrl := dirResp.XPelNsHdr.CollectionsUrl + if collectionsUrl != nil { endpoint := collectionsUrl statHosts = append(statHosts, *endpoint) - } else if len(namespace.SortedDirectorCaches) > 0 { - for idx, cache := range namespace.SortedDirectorCaches { + } else if len(dirResp.ObjectServers) > 0 { + for idx, oServer := range dirResp.ObjectServers { if idx > 2 { break } - endpoint, err := url.Parse(cache.EndpointUrl) - if err != nil { - return info, err - } - endpoint.Path = "" - statHosts = append(statHosts, *endpoint) + oServer.Path = "" + statHosts = append(statHosts, *oServer) } - } else if namespace.WriteBackHost != "" { - endpoint, err := url.Parse(namespace.WriteBackHost) - if err != nil { - return info, err - } - statHosts = append(statHosts, *endpoint) } type statResults struct { info FileInfo diff --git a/client/handle_http_test.go b/client/handle_http_test.go index e708b8992..6be699257 100644 --- a/client/handle_http_test.go +++ b/client/handle_http_test.go @@ -32,7 +32,6 @@ import ( "net/url" "os" "path/filepath" - "strconv" "strings" "testing" "time" @@ -46,7 +45,7 @@ import ( "github.com/pelicanplatform/pelican/config" "github.com/pelicanplatform/pelican/error_codes" "github.com/pelicanplatform/pelican/mock" - "github.com/pelicanplatform/pelican/namespaces" + "github.com/pelicanplatform/pelican/server_structs" "github.com/pelicanplatform/pelican/test_utils" ) @@ -82,49 +81,49 @@ func TestNewTransferDetails(t *testing.T) { require.NoError(t, os.Unsetenv("http_proxy")) }) - // Case 1: cache with http - testCache := namespaces.Cache{ - AuthEndpoint: "cache.edu:8443", - Endpoint: "cache.edu:8000", - Resource: "Cache", - } - transfers := newTransferDetails(testCache, transferDetailsOptions{false, ""}) - assert.Equal(t, 2, len(transfers)) - assert.Equal(t, "cache.edu:8000", transfers[0].Url.Host) - assert.Equal(t, "http", transfers[0].Url.Scheme) - assert.Equal(t, true, transfers[0].Proxy) - assert.Equal(t, "cache.edu:8000", transfers[1].Url.Host) - assert.Equal(t, "http", transfers[1].Url.Scheme) - assert.Equal(t, false, transfers[1].Proxy) + t.Run("ServerWithHTTPAndPort", func(t *testing.T) { + server := "http://cache.edu:8000" + transfers := generateTransferDetails(server, transferDetailsOptions{false, ""}) + assert.Equal(t, 2, len(transfers)) + assert.Equal(t, "cache.edu:8000", transfers[0].Url.Host) + assert.Equal(t, "http", transfers[0].Url.Scheme) + assert.Equal(t, true, transfers[0].Proxy) + assert.Equal(t, "cache.edu:8000", transfers[1].Url.Host) + assert.Equal(t, "http", transfers[1].Url.Scheme) + assert.Equal(t, false, transfers[1].Proxy) + }) - // Case 2: cache with https - transfers = newTransferDetails(testCache, transferDetailsOptions{true, ""}) - assert.Equal(t, 1, len(transfers)) - assert.Equal(t, "cache.edu:8443", transfers[0].Url.Host) - assert.Equal(t, "https", transfers[0].Url.Scheme) - assert.Equal(t, false, transfers[0].Proxy) + t.Run("ServerWithHTTPSAndPort", func(t *testing.T) { + server := "https://cache.edu:8443" + transfers := generateTransferDetails(server, transferDetailsOptions{true, ""}) + assert.Equal(t, 1, len(transfers)) + assert.Equal(t, "cache.edu:8443", transfers[0].Url.Host) + assert.Equal(t, "https", transfers[0].Url.Scheme) + assert.Equal(t, false, transfers[0].Proxy) + }) - testCache.Endpoint = "cache.edu" - // Case 3: cache without port with http - transfers = newTransferDetails(testCache, transferDetailsOptions{false, ""}) - assert.Equal(t, 2, len(transfers)) - assert.Equal(t, "cache.edu:8000", transfers[0].Url.Host) - assert.Equal(t, "http", transfers[0].Url.Scheme) - assert.Equal(t, true, transfers[0].Proxy) - assert.Equal(t, "cache.edu:8000", transfers[1].Url.Host) - assert.Equal(t, "http", transfers[1].Url.Scheme) - assert.Equal(t, false, transfers[1].Proxy) + t.Run("ServerWithHTTPAndNoPort", func(t *testing.T) { + server := "http://cache.edu" + // Case 3: cache without port with http + transfers := generateTransferDetails(server, transferDetailsOptions{false, ""}) + assert.Equal(t, 2, len(transfers)) + assert.Equal(t, "cache.edu", transfers[0].Url.Host) + assert.Equal(t, "http", transfers[0].Url.Scheme) + assert.Equal(t, true, transfers[0].Proxy) + assert.Equal(t, "cache.edu", transfers[1].Url.Host) + assert.Equal(t, "http", transfers[1].Url.Scheme) + assert.Equal(t, false, transfers[1].Proxy) + }) - // Case 4. cache without port with https - testCache.AuthEndpoint = "cache.edu" - transfers = newTransferDetails(testCache, transferDetailsOptions{true, ""}) - assert.Equal(t, 2, len(transfers)) - assert.Equal(t, "cache.edu:8444", transfers[0].Url.Host) - assert.Equal(t, "https", transfers[0].Url.Scheme) - assert.Equal(t, false, transfers[0].Proxy) - assert.Equal(t, "cache.edu:8443", transfers[1].Url.Host) - assert.Equal(t, "https", transfers[1].Url.Scheme) - assert.Equal(t, false, transfers[1].Proxy) + t.Run("ServerWithHTTPSAndNoPort", func(t *testing.T) { + // Case 4. cache without port with https + server := "https://cache.edu" + transfers := generateTransferDetails(server, transferDetailsOptions{true, ""}) + assert.Equal(t, 1, len(transfers)) + assert.Equal(t, "cache.edu", transfers[0].Url.Host) + assert.Equal(t, "https", transfers[0].Url.Scheme) + assert.Equal(t, false, transfers[0].Proxy) + }) } func TestNewTransferDetailsEnv(t *testing.T) { @@ -133,22 +132,18 @@ func TestNewTransferDetailsEnv(t *testing.T) { require.NoError(t, os.Unsetenv("http_proxy")) }) - testCache := namespaces.Cache{ - AuthEndpoint: "cache.edu:8443", - Endpoint: "cache.edu:8000", - Resource: "Cache", - } + testCache := "http://cache.edu:8000" os.Setenv("OSG_DISABLE_PROXY_FALLBACK", "") test_utils.InitClient(t, map[string]any{}) - transfers := newTransferDetails(testCache, transferDetailsOptions{}) + transfers := generateTransferDetails(testCache, transferDetailsOptions{}) assert.Equal(t, 1, len(transfers)) assert.Equal(t, true, transfers[0].Proxy) os.Unsetenv("http_proxy") - transfers = newTransferDetails(testCache, transferDetailsOptions{true, ""}) + transfers = generateTransferDetails(testCache, transferDetailsOptions{true, ""}) assert.Equal(t, 1, len(transfers)) assert.Equal(t, "https", transfers[0].Url.Scheme) assert.Equal(t, false, transfers[0].Proxy) @@ -194,18 +189,13 @@ func TestSlowTransfers(t *testing.T) { defer svr.CloseClientConnections() defer svr.Close() - testCache := namespaces.Cache{ - AuthEndpoint: svr.URL, - Endpoint: svr.URL, - Resource: "Cache", - } - + testCache := svr.URL os.Setenv("http_proxy", "http://proxy.edu:3128") t.Cleanup(func() { require.NoError(t, os.Unsetenv("http_proxy")) }) - transfers := newTransferDetails(testCache, transferDetailsOptions{false, ""}) + transfers := generateTransferDetails(testCache, transferDetailsOptions{false, ""}) assert.Equal(t, 2, len(transfers)) assert.Equal(t, svr.URL, transfers[0].Url.String()) @@ -286,12 +276,8 @@ func TestStoppedTransfer(t *testing.T) { defer svr.CloseClientConnections() defer svr.Close() - testCache := namespaces.Cache{ - AuthEndpoint: svr.URL, - Endpoint: svr.URL, - Resource: "Cache", - } - transfers := newTransferDetails(testCache, transferDetailsOptions{false, ""}) + testCache := svr.URL + transfers := generateTransferDetails(testCache, transferDetailsOptions{false, ""}) assert.Equal(t, 2, len(transfers)) assert.Equal(t, svr.URL, transfers[0].Url.String()) @@ -362,12 +348,8 @@ func TestTrailerError(t *testing.T) { require.NoError(t, os.Unsetenv("http_proxy")) }) - testCache := namespaces.Cache{ - AuthEndpoint: svr.URL, - Endpoint: svr.URL, - Resource: "Cache", - } - transfers := newTransferDetails(testCache, transferDetailsOptions{false, ""}) + testCache := svr.URL + transfers := generateTransferDetails(testCache, transferDetailsOptions{false, ""}) assert.Equal(t, 2, len(transfers)) assert.Equal(t, svr.URL, transfers[0].Url.String()) @@ -848,43 +830,30 @@ func TestNewPelicanURL(t *testing.T) { }) } -// Tests the functionality of getCachesToTry, ensuring that the function returns the correct number of caches and removes duplicates -func TestGetCachesToTry(t *testing.T) { - directorCaches := make([]namespaces.DirectorCache, 3) - for i := 0; i < 3; i++ { - directorCache := namespaces.DirectorCache{ - EndpointUrl: "https://some/cache/" + strconv.Itoa(i), - Priority: 0, - AuthedReq: false, - } - directorCaches[i] = directorCache +// The test should prove that the function getObjectServersToTry returns the correct number of servers, +// and that any duplicates are removed +func TestGetObjectServersToTry(t *testing.T) { + sortedServers := []string{ + "https://cache-1.com", + "https://cache-2.com", + "https://cache-2.com", // make sure duplicates are removed + "https://cache-3.com", + "https://cache-4.com", + "https://cache-5.com", } - // Add a duplicate to the list --> check for its removal - directorCaches = append(directorCaches, namespaces.DirectorCache{ - EndpointUrl: "https://some/cache/0", - Priority: 0, - AuthedReq: false, - }) - - // Make our namespace: - namespace := namespaces.Namespace{ - SortedDirectorCaches: directorCaches, - ReadHTTPS: false, - UseTokenOnRead: false, + directorResponse := server_structs.DirectorResponse{ + XPelNsHdr: server_structs.XPelNs{ + RequireToken: false, + }, } - - caches, err := getCachesFromNamespace(namespace, true, nil) - assert.NoError(t, err) - job := &TransferJob{ - namespace: namespace, + dirResp: directorResponse, } - - transfers := getCachesToTry(caches, job, 4, "") + transfers := getObjectServersToTry(sortedServers, job, 3, "") // Check that there are no duplicates in the result - cacheSet := make(map[CacheInterface]bool) + cacheSet := make(map[string]bool) for _, transfer := range transfers { if cacheSet[transfer.Url.String()] { t.Errorf("Found duplicate cache: %v", transfer.Url.String()) @@ -893,9 +862,9 @@ func TestGetCachesToTry(t *testing.T) { } // Verify we got the correct caches in our transfer attempt details require.Len(t, transfers, 3) - assert.Equal(t, "https://some/cache/0", transfers[0].Url.String()) - assert.Equal(t, "https://some/cache/1", transfers[1].Url.String()) - assert.Equal(t, "https://some/cache/2", transfers[2].Url.String()) + assert.Equal(t, "https://cache-1.com", transfers[0].Url.String()) + assert.Equal(t, "https://cache-2.com", transfers[1].Url.String()) + assert.Equal(t, "https://cache-3.com", transfers[2].Url.String()) } // Test that the project name is correctly extracted from the job ad file @@ -1174,176 +1143,3 @@ func TestNewTransferEngine(t *testing.T) { assert.NoError(t, err) }) } - -// Test the functionality of getting the collections URL from the director or from the namespace ad. -// Tests different responses from the director with and without 'dirlisthost' specified in the namespace. -func TestGetCollectionsUrl(t *testing.T) { - viper.Reset() - defer viper.Reset() - viper.Set("ConfigDir", t.TempDir()) - config.InitConfig() - ctx := context.Background() - err := config.InitClient() - assert.NoError(t, err) - - // Test we get dirlisthost with valid PROPFIND on test server - t.Run("testValidPropfind", func(t *testing.T) { - expectedLocation := "http://some/origin/path/to/object" - handler := func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Location", expectedLocation) - w.WriteHeader(http.StatusTemporaryRedirect) - } - server := httptest.NewServer(http.HandlerFunc(handler)) - defer server.Close() - testObjectUrl, err := url.Parse("pelican://federation/some/object") - require.NoError(t, err) - - dirListHost, err := getCollectionsUrl(ctx, testObjectUrl, namespaces.Namespace{}, server.URL) - require.NoError(t, err) - assert.Equal(t, "http://some", dirListHost.String()) - }) - - // Test we get dirlist host when PROPFIND returns 405 but dirlisthost set in namespace - t.Run("testInvalidPropfindValidDirListInNamespace", func(t *testing.T) { - expectedLocation := "http://origin" - handler := func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusMethodNotAllowed) - } - server := httptest.NewServer(http.HandlerFunc(handler)) - defer server.Close() - testObjectUrl, err := url.Parse("pelican://federation/some/object") - require.NoError(t, err) - - dirListHost, err := getCollectionsUrl(ctx, testObjectUrl, namespaces.Namespace{DirListHost: expectedLocation}, server.URL) - require.NoError(t, err) - assert.Equal(t, expectedLocation, dirListHost.String()) - }) - - // Test we get dirlist host when PROPFIND returns 404 but dirlisthost set in namespace - t.Run("test404PropfindValidDirListInNamespace", func(t *testing.T) { - expectedLocation := "http://origin" - handler := func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusNotFound) - } - server := httptest.NewServer(http.HandlerFunc(handler)) - defer server.Close() - testObjectUrl, err := url.Parse("pelican://federation/some/object") - require.NoError(t, err) - - dirListHost, err := getCollectionsUrl(ctx, testObjectUrl, namespaces.Namespace{DirListHost: expectedLocation}, server.URL) - require.NoError(t, err) - assert.Equal(t, expectedLocation, dirListHost.String()) - }) - - // Test we get dirlisthost when we are not using a director and namespace has dirlisthost set - t.Run("testNoDirectorValidDirListInNamespace", func(t *testing.T) { - expectedLocation := "http://origin" - testObjectUrl, err := url.Parse("pelican://federation/some/object") - require.NoError(t, err) - dirListHost, err := getCollectionsUrl(ctx, testObjectUrl, namespaces.Namespace{DirListHost: expectedLocation}, "") - require.NoError(t, err) - assert.Equal(t, expectedLocation, dirListHost.String()) - }) - - // Test if PROPFIND and ns.dirlisthost fail, we get dirListingNotSupported error - t.Run("testInvalidPropfindNoDirListInNamespace", func(t *testing.T) { - handler := func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusMethodNotAllowed) - } - server := httptest.NewServer(http.HandlerFunc(handler)) - defer server.Close() - testObjectUrl, err := url.Parse("pelican://federation/some/object") - require.NoError(t, err) - - _, err = getCollectionsUrl(ctx, testObjectUrl, namespaces.Namespace{}, server.URL) - require.Error(t, err) - assert.IsType(t, &dirListingNotSupportedError{}, err) - }) - - // Test if PROPFIND if 404 and ns.dirlisthost fail, we get dirListingNotSupported error - t.Run("test404PropfindNoDirListInNamespace", func(t *testing.T) { - handler := func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusNotFound) - } - server := httptest.NewServer(http.HandlerFunc(handler)) - defer server.Close() - testObjectUrl, err := url.Parse("pelican://federation/some/object") - require.NoError(t, err) - _, err = getCollectionsUrl(ctx, testObjectUrl, namespaces.Namespace{}, server.URL) - require.Error(t, err) - assert.IsType(t, &dirListingNotSupportedError{}, err) - }) - - // Test if no director and namespace doesn't contain dirlisthost, we get dirListingNotSupported error - t.Run("testNoDirectorNoDirListInNamespace", func(t *testing.T) { - testObjectUrl, err := url.Parse("pelican://federation/some/object") - require.NoError(t, err) - _, err = getCollectionsUrl(ctx, testObjectUrl, namespaces.Namespace{}, "") - require.Error(t, err) - assert.IsType(t, &dirListingNotSupportedError{}, err) - }) - - // Test when director does not return 'location' header (just blank response), we fail - t.Run("testNoLocationHeaderReturned", func(t *testing.T) { - handler := func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusTemporaryRedirect) - } - server := httptest.NewServer(http.HandlerFunc(handler)) - defer server.Close() - testObjectUrl, err := url.Parse("pelican://federation/some/object") - require.NoError(t, err) - - _, err = getCollectionsUrl(ctx, testObjectUrl, namespaces.Namespace{}, server.URL) - require.Error(t, err) - assert.Contains(t, err.Error(), "collections URL not found in director response") - }) - - // Test when director returns 200 with X-Pelican-Namespace header - t.Run("test207ResponseWPelicanNamespaceHeader", func(t *testing.T) { - expectedLocation := "https://example-origin.com" - handler := func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("X-Pelican-Namespace", "namespace=federation, require-token=false, collections-url="+expectedLocation) - w.WriteHeader(http.StatusMultiStatus) - } - server := httptest.NewServer(http.HandlerFunc(handler)) - defer server.Close() - testObjectUrl, err := url.Parse("pelican://federation/some/object") - require.NoError(t, err) - - res, err := getCollectionsUrl(ctx, testObjectUrl, namespaces.Namespace{}, server.URL) - require.NoError(t, err) - assert.Equal(t, expectedLocation, res.String()) - }) - - t.Run("test200ResponseWOPelicanNamespaceHeader", func(t *testing.T) { - handler := func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusMultiStatus) - } - server := httptest.NewServer(http.HandlerFunc(handler)) - defer server.Close() - testObjectUrl, err := url.Parse("pelican://federation/some/object") - require.NoError(t, err) - - _, err = getCollectionsUrl(ctx, testObjectUrl, namespaces.Namespace{}, server.URL) - require.Error(t, err) - assert.Contains(t, err.Error(), "collections URL not found in director response: X-Pelican-Namespace header is missing in 207 response") - }) - - // Test if failure to connect to director we handle that properly - t.Run("testDirectorFailedToConnect", func(t *testing.T) { - handler := func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusServiceUnavailable) - err := json.NewEncoder(w).Encode(map[string]string{"status": "error", "msg": "some server error"}) - require.NoError(t, err) - } - server := httptest.NewServer(http.HandlerFunc(handler)) - defer server.Close() - testObjectUrl, err := url.Parse("pelican://federation/some/object") - require.NoError(t, err) - - _, err = getCollectionsUrl(ctx, testObjectUrl, namespaces.Namespace{}, server.URL) - require.Error(t, err) - assert.Contains(t, err.Error(), "some server error") - }) -} diff --git a/client/main.go b/client/main.go index 02eee9ecd..8117988ad 100644 --- a/client/main.go +++ b/client/main.go @@ -23,7 +23,6 @@ import ( "encoding/json" "fmt" "net" - "net/http" "net/url" "runtime/debug" "strconv" @@ -39,12 +38,12 @@ import ( log "github.com/sirupsen/logrus" "github.com/pelicanplatform/pelican/config" - "github.com/pelicanplatform/pelican/namespaces" + "github.com/pelicanplatform/pelican/server_structs" "github.com/pelicanplatform/pelican/utils" ) // Number of caches to attempt to use in any invocation -var CachesToTry int = 3 +var ObjectServersToTry int = 3 // Our own FileInfo structure to hold information about a file // NOTE: this was created to provide more flexibility to information on a file. The fs.FileInfo interface was causing some issues like not always returning a Name attribute @@ -73,7 +72,7 @@ func getTokenName(destination *url.URL) (scheme, tokenName string) { // // If tokenName is not empty, it will be used as the token name. // If tokenName is empty, the token name will be determined from the destination URL (if possible) using getTokenName -func getToken(destination *url.URL, namespace namespaces.Namespace, isWrite bool, tokenName string, tokenLocation string, acquireToken bool) (string, error) { +func getToken(destination *url.URL, dirResp server_structs.DirectorResponse, isWrite bool, tokenName string, tokenLocation string, acquireToken bool) (string, error) { if tokenName == "" { _, tokenName = getTokenName(destination) } @@ -136,7 +135,7 @@ func getToken(destination *url.URL, namespace namespaces.Namespace, isWrite bool if isWrite { opts.Operation = config.TokenSharedWrite } - value, err := AcquireToken(destination, namespace, opts) + value, err := AcquireToken(destination, dirResp, opts) if err == nil { return value, nil } @@ -209,7 +208,7 @@ func DoStat(ctx context.Context, destination string, options ...TransferOption) return nil, errors.Wrap(err, "Failed to generate pelicanURL object") } - ns, err := getNamespaceInfo(ctx, destUri.Path, pelicanURL.directorUrl, false, "") + dirResp, err := GetDirectorInfoForPath(ctx, destUri.Path, pelicanURL.directorUrl, false, "") if err != nil { return nil, err } @@ -228,48 +227,32 @@ func DoStat(ctx context.Context, destination string, options ...TransferOption) } } - if ns.UseTokenOnRead && token == "" { - token, err = getToken(destUri, ns, true, "", tokenLocation, acquire) + if dirResp.XPelNsHdr.RequireToken && token == "" { + token, err = getToken(destUri, dirResp, true, "", tokenLocation, acquire) if err != nil { return nil, fmt.Errorf("failed to get token for transfer: %v", err) } } - if statInfo, err := statHttp(ctx, destUri, ns, pelicanURL.directorUrl, token); err != nil { + if statInfo, err := statHttp(destUri, dirResp, token); err != nil { return nil, errors.Wrap(err, "failed to do the stat") } else { return &statInfo, nil } } -func GetCacheHostnames(ctx context.Context, testFile string) (urls []string, err error) { +func GetObjectServerHostnames(ctx context.Context, testFile string) (urls []string, err error) { fedInfo, err := config.GetFederation(ctx) if err != nil { return } - ns, err := getNamespaceInfo(ctx, testFile, fedInfo.DirectorEndpoint, false, "") - if err != nil { - return - } - caches, err := getCachesFromNamespace(ns, fedInfo.DirectorEndpoint != "", make([]*url.URL, 0)) + parsedDirResp, err := GetDirectorInfoForPath(ctx, testFile, fedInfo.DirectorEndpoint, false, "") if err != nil { return } - - for _, cacheGeneric := range caches { - if cache, ok := cacheGeneric.(namespaces.Cache); ok { - url_string := cache.AuthEndpoint - host := strings.Split(url_string, ":")[0] - urls = append(urls, host) - } else if cache, ok := cacheGeneric.(namespaces.DirectorCache); ok { - cacheUrl, err := url.Parse(cache.EndpointUrl) - if err != nil { - log.Debugln("Failed to parse returned cache as a URL:", cacheUrl) - continue - } - urls = append(urls, cacheUrl.Hostname()) - } + for _, objectServer := range parsedDirResp.ObjectServers { + urls = append(urls, objectServer.Hostname()) } return @@ -283,113 +266,65 @@ func getUserAgent(project string) (agent string) { return } -func getCachesFromNamespace(namespace namespaces.Namespace, useDirector bool, preferredCaches []*url.URL) (caches []CacheInterface, err error) { +// Given a response from the director with sorted object servers, incorporate any "preferred" servers (origins/caches) that +// may be passed in from the command line. This should handle the special '+' logic -- if the user provides a list of servers +// and no +, it means they ONLY want to use the provided servers. Otherwise, we prefer those servers, but also incorporate the +// servers provided by the Director. +func generateSortedObjServers(dirResp server_structs.DirectorResponse, preferredCaches []*url.URL) (objectServers []*url.URL, err error) { var appendCaches bool // The global cache override is set if len(preferredCaches) > 0 { - var preferredCacheList []CacheInterface + var preferredObjectServers []*url.URL for idx, preferredCache := range preferredCaches { cacheUrl := preferredCache.String() // If the preferred cache is empty, return an error if cacheUrl == "" { - err = errors.New("Preferred cache was specified as an empty string") + err = errors.New("Preferred server was specified as an empty string") return } else if cacheUrl == "+" { // If we have a '+' in our list, the user wants to prepend the preferred caches to the "normal" list of caches // if the cache is a '+', verify it is at the end of our list, if not, return an error if idx != len(preferredCaches)-1 { - err = errors.New("The special character '+' must be the last item in the list of preferred caches") + err = errors.New("The special character '+' must be the last item in the list of preferred servers") return } // We want to signify that we want to append the "normal" cache list appendCaches = true } else { // We have a normal item in the preferred cache list - log.Debugf("Using the cache (%s) from the config override\n", preferredCache) - cache := namespaces.DirectorCache{ - EndpointUrl: cacheUrl, - } - // append to our list of preferred caches - preferredCacheList = append(preferredCacheList, cache) + log.Debugf("Using the server (%s) from the config override\n", preferredCache) + preferredObjectServers = append(preferredObjectServers, preferredCache) } } - - // If we are not appending any more caches, we return with the caches we have + objectServers = preferredObjectServers + // No +, no mo problems -- err, I mean, no more object servers if !appendCaches { - caches = preferredCacheList return } - caches = preferredCacheList } - if useDirector { - log.Debugln("Using the returned sources from the director") - directorCaches := make([]CacheInterface, len(namespace.SortedDirectorCaches)) - for idx, val := range namespace.SortedDirectorCaches { - directorCaches[idx] = val - } + log.Debugln("Using the returned sources from the director") + // We may have some servers from the preferred list + objectServers = append(objectServers, dirResp.ObjectServers...) - // If appendCaches is set, prepend it to the list of caches and return - if appendCaches { - caches = append(caches, directorCaches...) - } else { - caches = directorCaches - } - if log.IsLevelEnabled(log.DebugLevel) || log.IsLevelEnabled(log.TraceLevel) { - cacheHosts := make([]string, len(caches)) - for idx, entry := range caches { - cacheStr := entry.(namespaces.DirectorCache).EndpointUrl - cacheUrl, err := url.Parse(cacheStr) - if err != nil { - cacheHosts[idx] = cacheStr - } - cacheSimpleUrl := url.URL{ - Scheme: cacheUrl.Scheme, - Host: cacheUrl.Host, - } - cacheHosts[idx] = cacheSimpleUrl.String() - } - if len(cacheHosts) <= 6 { - log.Debugln("Matched caches:", strings.Join(cacheHosts, ", ")) - } else { - log.Debugf("Matched caches: %s ... (plus %d more)", strings.Join(cacheHosts[0:6], ", "), len(cacheHosts)-6) - log.Traceln("matched caches continued:", cacheHosts[6:]) + if log.IsLevelEnabled(log.DebugLevel) || log.IsLevelEnabled(log.TraceLevel) { + oHosts := make([]string, len(objectServers)) + for idx, oServer := range objectServers { + simpleUrl := url.URL{ + Scheme: oServer.Scheme, + Host: oServer.Host, } + oHosts[idx] = simpleUrl.String() } - return - } - - var bestCaches []string - if len(preferredCaches) == 0 { - cacheListName := "xroot" - if namespace.ReadHTTPS || namespace.UseTokenOnRead { - cacheListName = "xroots" - } - bestCaches, err = GetBestCache(cacheListName) - if err != nil { - log.Errorln("Failed to get best caches:", err) - return + if len(oHosts) <= 6 { + log.Debugln("Matched object servers:", strings.Join(oHosts, ", ")) + } else { + log.Debugf("Matched object servers: %s ... (plus %d more)", strings.Join(oHosts[0:6], ", "), len(oHosts)-6) + log.Traceln("matched object servers continued:", oHosts[6:]) } } - - log.Debugln("Nearest cache list:", bestCaches) - log.Debugln("Cache list name:", namespace.Caches) - - matchedCaches := namespace.MatchCaches(bestCaches) - log.Debugln("Matched caches:", matchedCaches) - matchedCachesList := make([]CacheInterface, len(matchedCaches)) - for idx, val := range matchedCaches { - matchedCachesList[idx] = val - } - - // If usingPreferredCache is set, prepend it to the list of caches and return - if appendCaches { - caches = append(caches, matchedCachesList...) - } else { - caches = matchedCachesList - } - return + } func correctURLWithUnderscore(sourceFile string) (string, string) { @@ -438,58 +373,6 @@ func discoverHTCondorToken(tokenName string) string { return tokenLocation } -// Retrieve federation namespace information for a given URL. -// If OSDFDirectorUrl is non-empty, then the namespace information will be pulled from the director; -// otherwise, it is pulled from topology. -func getNamespaceInfo(ctx context.Context, resourcePath, OSDFDirectorUrl string, isPut bool, query string) (ns namespaces.Namespace, err error) { - // If we have a director set, go through that for namespace info, otherwise use topology - if OSDFDirectorUrl != "" { - log.Debugln("Will query director at", OSDFDirectorUrl, "for object", resourcePath) - verb := "GET" - if isPut { - verb = "PUT" - } - if query != "" { - resourcePath += "?" + query - } - var dirResp *http.Response - dirResp, err = queryDirector(ctx, verb, resourcePath, OSDFDirectorUrl) - if err != nil { - if isPut && dirResp != nil && dirResp.StatusCode == 405 { - err = errors.New("Error 405: No writeable origins were found") - return - } else { - log.Errorln("Error while querying the Director:", err) - return - } - } - ns, err = CreateNsFromDirectorResp(dirResp) - if err != nil { - return - } - - // if we are doing a PUT, we need to get our endpoint from the director - if isPut { - var writeBackUrl *url.URL - location := dirResp.Header.Get("Location") - writeBackUrl, err = url.Parse(location) - if err != nil { - log.Errorf("The director responded with an invalid location (does not parse as URL: %v): %s", err, location) - return - } - ns.WriteBackHost = "https://" + writeBackUrl.Host - } - return - } else { - log.Debugln("Director URL not found, searching in topology") - ns, err = namespaces.MatchNamespace(ctx, resourcePath) - if err != nil { - return - } - return - } -} - func schemeUnderstood(scheme string) error { understoodSchemes := []string{"file", "osdf", "pelican", "stash", ""} @@ -540,7 +423,7 @@ func DoList(ctx context.Context, remoteObject string, options ...TransferOption) return nil, errors.Wrap(err, "failed to generate pelicanURL object") } - ns, err := getNamespaceInfo(ctx, remoteObjectUrl.Path, pelicanURL.directorUrl, false, "") + dirResp, err := GetDirectorInfoForPath(ctx, remoteObjectUrl.Path, pelicanURL.directorUrl, false, "") if err != nil { return nil, err } @@ -560,14 +443,14 @@ func DoList(ctx context.Context, remoteObject string, options ...TransferOption) } } - if ns.UseTokenOnRead && token == "" { - token, err = getToken(remoteObjectUrl, ns, true, "", tokenLocation, acquire) + if dirResp.XPelNsHdr.RequireToken && token == "" { + token, err = getToken(remoteObjectUrl, dirResp, true, "", tokenLocation, acquire) if err != nil { return nil, errors.Wrap(err, "failed to get token for transfer") } } - fileInfos, err = listHttp(ctx, remoteObjectUrl, pelicanURL.directorUrl, ns, token) + fileInfos, err = listHttp(remoteObjectUrl, dirResp, token) if err != nil { return nil, errors.Wrap(err, "failed to do the list") } @@ -793,7 +676,6 @@ func DoGet(ctx context.Context, remoteObject string, localDestination string, re // Start the transfer, whether read or write back. Primarily used for backwards compatibility func DoCopy(ctx context.Context, sourceFile string, destination string, recursive bool, options ...TransferOption) (transferResults []TransferResults, err error) { - // First, create a handler for any panics that occur defer func() { if r := recover(); r != nil { diff --git a/client/main_test.go b/client/main_test.go index c4beb9600..30295693f 100644 --- a/client/main_test.go +++ b/client/main_test.go @@ -19,7 +19,6 @@ package client import ( - "context" "net" "net/url" "os" @@ -34,7 +33,7 @@ import ( "github.com/pelicanplatform/pelican/config" "github.com/pelicanplatform/pelican/mock" - "github.com/pelicanplatform/pelican/namespaces" + "github.com/pelicanplatform/pelican/server_structs" ) // TestGetIps calls main.get_ips with a hostname, checking @@ -59,105 +58,74 @@ func TestGetIps(t *testing.T) { } -func TestGetCachesFromNamespace(t *testing.T) { - // Get our list of caches for our namespace: - directorCaches := make([]namespaces.DirectorCache, 3) - for i := 0; i < 3; i++ { - directorCache := namespaces.DirectorCache{ - EndpointUrl: "https://some/cache/" + strconv.Itoa(i), - Priority: 0, - AuthedReq: false, - } - directorCaches[i] = directorCache - } - - // Make our namespace: - namespace := namespaces.Namespace{ - SortedDirectorCaches: directorCaches, - ReadHTTPS: false, - UseTokenOnRead: false, +func TestGenerateSortedObjectServers(t *testing.T) { + dirResp := server_structs.DirectorResponse{ + ObjectServers: []*url.URL{ + {Scheme: "https", Host: "server1.com", Path: "/foo"}, + {Scheme: "https", Host: "server2.com", Path: "/foo"}, + {Scheme: "https", Host: "server3.com", Path: "/foo"}, + }, } - // Check getCachesFromNamespace works with a director - t.Run("testNoPreferredCache", func(t *testing.T) { - caches, err := getCachesFromNamespace(namespace, true, nil) + t.Run("testNoPreferredServers", func(t *testing.T) { + oServers, err := generateSortedObjServers(dirResp, []*url.URL{}) assert.NoError(t, err) - require.Len(t, caches, 3) - assert.Equal(t, "https://some/cache/0", caches[0].(namespaces.DirectorCache).EndpointUrl) - assert.Equal(t, "https://some/cache/1", caches[1].(namespaces.DirectorCache).EndpointUrl) - assert.Equal(t, "https://some/cache/2", caches[2].(namespaces.DirectorCache).EndpointUrl) + require.Len(t, oServers, 3) + assert.Equal(t, "https://server1.com/foo", oServers[0].String()) + assert.Equal(t, "https://server2.com/foo", oServers[1].String()) + assert.Equal(t, "https://server3.com/foo", oServers[2].String()) }) - // Test that the function fails if the preferred cache is "" + // Test that the function fails if the preferred server is "" t.Run("testPreferredCacheEmpty", func(t *testing.T) { - preferredCacheURL, _ := url.Parse("") - someEmptyUrlList := []*url.URL{preferredCacheURL} - _, err := getCachesFromNamespace(namespace, true, someEmptyUrlList) + preferredUrl, _ := url.Parse("") + someEmptyUrlList := []*url.URL{preferredUrl} + _, err := generateSortedObjServers(dirResp, someEmptyUrlList) assert.Error(t, err) - assert.Contains(t, err.Error(), "Preferred cache was specified as an empty string") + assert.Contains(t, err.Error(), "Preferred server was specified as an empty string") }) // Test we work with multiple preferred caches t.Run("testMultiplePreferredCaches", func(t *testing.T) { - preferredCache1, _ := url.Parse("https://I/like/this/cache") - preferredCache2, _ := url.Parse("https://I/like/this/cache/too") - preferredCacheList := []*url.URL{preferredCache1, preferredCache2} - caches, err := getCachesFromNamespace(namespace, true, preferredCacheList) + preferredOServers := []*url.URL{ + {Scheme: "https", Host: "preferred1.com", Path: "/foo"}, + {Scheme: "https", Host: "preferred2.com", Path: "/foo"}, + } + oServers, err := generateSortedObjServers(dirResp, preferredOServers) assert.NoError(t, err) - require.Len(t, caches, 2) - assert.Equal(t, "https://I/like/this/cache", caches[0].(namespaces.DirectorCache).EndpointUrl) - assert.Equal(t, "https://I/like/this/cache/too", caches[1].(namespaces.DirectorCache).EndpointUrl) + require.Len(t, oServers, 2) + assert.Equal(t, "https://preferred1.com/foo", oServers[0].String()) + assert.Equal(t, "https://preferred2.com/foo", oServers[1].String()) }) // Test our prepend works with multiple preferred caches t.Run("testMutliPreferredCachesPrepend", func(t *testing.T) { - preferredCache1, _ := url.Parse("https://I/like/this/cache") - preferredCache2, _ := url.Parse("https://I/like/this/cache/too") - preferredCache3, _ := url.Parse("+") - preferredCacheList := []*url.URL{preferredCache1, preferredCache2, preferredCache3} - caches, err := getCachesFromNamespace(namespace, true, preferredCacheList) + preferredOServers := []*url.URL{ + {Scheme: "https", Host: "preferred1.com", Path: "/foo"}, + {Scheme: "https", Host: "preferred2.com", Path: "/foo"}, + {Scheme: "", Host: "", Path: "+"}, + } + oServers, err := generateSortedObjServers(dirResp, preferredOServers) assert.NoError(t, err) - require.Len(t, caches, 5) - assert.Equal(t, "https://I/like/this/cache", caches[0].(namespaces.DirectorCache).EndpointUrl) - assert.Equal(t, "https://I/like/this/cache/too", caches[1].(namespaces.DirectorCache).EndpointUrl) - assert.Equal(t, "https://some/cache/0", caches[2].(namespaces.DirectorCache).EndpointUrl) - assert.Equal(t, "https://some/cache/1", caches[3].(namespaces.DirectorCache).EndpointUrl) - assert.Equal(t, "https://some/cache/2", caches[4].(namespaces.DirectorCache).EndpointUrl) + require.Len(t, oServers, 5) + assert.Equal(t, "https://preferred1.com/foo", oServers[0].String()) + assert.Equal(t, "https://preferred2.com/foo", oServers[1].String()) + assert.Equal(t, "https://server1.com/foo", oServers[2].String()) + assert.Equal(t, "https://server2.com/foo", oServers[3].String()) + assert.Equal(t, "https://server3.com/foo", oServers[4].String()) }) // Test the function fails if the + character is not at the end of the list t.Run("testPlusNotAtEnd", func(t *testing.T) { - preferredCache1, _ := url.Parse("https://I/like/this/cache") - preferredCache2, _ := url.Parse("+") - preferredCache3, _ := url.Parse("https://I/like/this/cache/too") - preferredCacheList := []*url.URL{preferredCache1, preferredCache2, preferredCache3} - _, err := getCachesFromNamespace(namespace, true, preferredCacheList) - assert.Error(t, err) - assert.Contains(t, err.Error(), "The special character '+' must be the last item in the list of preferred caches") - }) - - // Test that the list of caches we get back has more than just the preferred cache when a + is at the end of the list - t.Run("testPreferredCachePrepend", func(t *testing.T) { - preferredCacheURL, _ := url.Parse("https://I/Like/This/Cache/The/Most") - preferredPlusURL, _ := url.Parse("+") - preferredCacheList := []*url.URL{preferredCacheURL, preferredPlusURL} - caches, err := getCachesFromNamespace(namespace, true, preferredCacheList) - assert.NoError(t, err) - require.Len(t, caches, 4) - assert.Equal(t, "https://I/Like/This/Cache/The/Most", caches[0].(namespaces.DirectorCache).EndpointUrl) - assert.Equal(t, "https://some/cache/0", caches[1].(namespaces.DirectorCache).EndpointUrl) - assert.Equal(t, "https://some/cache/1", caches[2].(namespaces.DirectorCache).EndpointUrl) - assert.Equal(t, "https://some/cache/2", caches[3].(namespaces.DirectorCache).EndpointUrl) - }) + preferredOServers := []*url.URL{ + {Scheme: "https", Host: "preferred1.com", Path: "/foo"}, + {Scheme: "", Host: "", Path: "+"}, + {Scheme: "https", Host: "preferred2.com", Path: "/foo"}, - // Test that we only get the preferred cache back when it is specified without a "+" at the end - t.Run("testPreferredCacheNoPrepend", func(t *testing.T) { - preferredCacheURL, _ := url.Parse("https://I/Like/This/Cache/The/Most") - preferredCacheList := []*url.URL{preferredCacheURL} - caches, err := getCachesFromNamespace(namespace, true, preferredCacheList) - assert.NoError(t, err) - require.Len(t, caches, 1) - assert.Equal(t, "https://I/Like/This/Cache/The/Most", caches[0].(namespaces.DirectorCache).EndpointUrl) + } + _, err := generateSortedObjServers(dirResp, preferredOServers) + assert.Error(t, err) + assert.Contains(t, err.Error(), "The special character '+' must be the last item in the list of preferred servers") }) } @@ -172,15 +140,18 @@ func TestGetToken(t *testing.T) { mock.MockTopology(t, config.GetTransport()) - namespace, err := namespaces.MatchNamespace(context.Background(), "/user/foo") - assert.NoError(t, err) + dirResp := server_structs.DirectorResponse{ + XPelNsHdr: server_structs.XPelNs{ + Namespace: "/user/foo", + }, + } url, err := url.Parse("osdf:///user/foo") assert.NoError(t, err) // ENVs to test: BEARER_TOKEN, BEARER_TOKEN_FILE, XDG_RUNTIME_DIR/bt_u, TOKEN, _CONDOR_CREDS/scitoken.use, .condor_creds/scitokens.use os.Setenv("BEARER_TOKEN", "bearer_token_contents") - token, err := getToken(url, namespace, true, "", "", false) + token, err := getToken(url, dirResp, true, "", "", false) assert.NoError(t, err) assert.Equal(t, "bearer_token_contents", token) os.Unsetenv("BEARER_TOKEN") @@ -193,7 +164,7 @@ func TestGetToken(t *testing.T) { err = os.WriteFile(bearer_token_file, tmpFile, 0644) assert.NoError(t, err) os.Setenv("BEARER_TOKEN_FILE", bearer_token_file) - token, err = getToken(url, namespace, true, "", "", false) + token, err = getToken(url, dirResp, true, "", "", false) assert.NoError(t, err) assert.Equal(t, token_contents, token) os.Unsetenv("BEARER_TOKEN_FILE") @@ -205,7 +176,7 @@ func TestGetToken(t *testing.T) { err = os.WriteFile(bearer_token_file, tmpFile, 0644) assert.NoError(t, err) os.Setenv("XDG_RUNTIME_DIR", tmpDir) - token, err = getToken(url, namespace, true, "", "", false) + token, err = getToken(url, dirResp, true, "", "", false) assert.NoError(t, err) assert.Equal(t, token_contents, token) os.Unsetenv("XDG_RUNTIME_DIR") @@ -217,7 +188,7 @@ func TestGetToken(t *testing.T) { err = os.WriteFile(bearer_token_file, tmpFile, 0644) assert.NoError(t, err) os.Setenv("TOKEN", bearer_token_file) - token, err = getToken(url, namespace, true, "", "", false) + token, err = getToken(url, dirResp, true, "", "", false) assert.NoError(t, err) assert.Equal(t, token_contents, token) os.Unsetenv("TOKEN") @@ -229,7 +200,7 @@ func TestGetToken(t *testing.T) { err = os.WriteFile(bearer_token_file, tmpFile, 0644) assert.NoError(t, err) os.Setenv("_CONDOR_CREDS", tmpDir) - token, err = getToken(url, namespace, true, "", "", false) + token, err = getToken(url, dirResp, true, "", "", false) assert.NoError(t, err) assert.Equal(t, token_contents, token) os.Unsetenv("_CONDOR_CREDS") @@ -244,9 +215,12 @@ func TestGetToken(t *testing.T) { os.Setenv("_CONDOR_CREDS", tmpDir) renamedUrl, err := url.Parse("renamed+osdf:///user/ligo/frames") assert.NoError(t, err) - renamedNamespace, err := namespaces.MatchNamespace(context.Background(), "/user/ligo/frames") - assert.NoError(t, err) - token, err = getToken(renamedUrl, renamedNamespace, false, "", "", false) + ligoDirResp := server_structs.DirectorResponse{ + XPelNsHdr: server_structs.XPelNs{ + Namespace: "/user/ligo/frames", + }, + } + token, err = getToken(renamedUrl, ligoDirResp, false, "", "", false) assert.NoError(t, err) assert.Equal(t, token_contents, token) os.Unsetenv("_CONDOR_CREDS") @@ -263,9 +237,7 @@ func TestGetToken(t *testing.T) { renamedUrl, err = url.Parse("renamed.handle1+osdf:///user/ligo/frames") renamedUrl.Scheme = "renamed_handle1+osdf" assert.NoError(t, err) - renamedNamespace, err = namespaces.MatchNamespace(context.Background(), "/user/ligo/frames") - assert.NoError(t, err) - token, err = getToken(renamedUrl, renamedNamespace, false, "", "", false) + token, err = getToken(renamedUrl, ligoDirResp, false, "", "", false) assert.NoError(t, err) assert.Equal(t, token_contents, token) os.Unsetenv("_CONDOR_CREDS") @@ -280,9 +252,7 @@ func TestGetToken(t *testing.T) { os.Setenv("_CONDOR_CREDS", tmpDir) renamedUrl, err = url.Parse("renamed.handle2+osdf:///user/ligo/frames") assert.NoError(t, err) - renamedNamespace, err = namespaces.MatchNamespace(context.Background(), "/user/ligo/frames") - assert.NoError(t, err) - token, err = getToken(renamedUrl, renamedNamespace, false, "", "", false) + token, err = getToken(renamedUrl, ligoDirResp, false, "", "", false) assert.NoError(t, err) assert.Equal(t, token_contents, token) os.Unsetenv("_CONDOR_CREDS") @@ -297,9 +267,7 @@ func TestGetToken(t *testing.T) { os.Setenv("_CONDOR_CREDS", tmpDir) renamedUrl, err = url.Parse("renamed.handle3+osdf:///user/ligo/frames") assert.NoError(t, err) - renamedNamespace, err = namespaces.MatchNamespace(context.Background(), "/user/ligo/frames") - assert.NoError(t, err) - token, err = getToken(renamedUrl, renamedNamespace, false, "", "", false) + token, err = getToken(renamedUrl, ligoDirResp, false, "", "", false) assert.NoError(t, err) assert.Equal(t, token_contents, token) os.Unsetenv("_CONDOR_CREDS") @@ -314,9 +282,7 @@ func TestGetToken(t *testing.T) { os.Setenv("_CONDOR_CREDS", tmpDir) renamedUrl, err = url.Parse("/user/ligo/frames") assert.NoError(t, err) - renamedNamespace, err = namespaces.MatchNamespace(context.Background(), "/user/ligo/frames") - assert.NoError(t, err) - token, err = getToken(renamedUrl, renamedNamespace, false, "renamed", "", false) + token, err = getToken(renamedUrl, ligoDirResp, false, "renamed", "", false) assert.NoError(t, err) assert.Equal(t, token_contents, token) os.Unsetenv("_CONDOR_CREDS") @@ -333,13 +299,13 @@ func TestGetToken(t *testing.T) { assert.NoError(t, err) err = os.Chdir(tmpDir) assert.NoError(t, err) - token, err = getToken(url, namespace, true, "", "", false) + token, err = getToken(url, dirResp, true, "", "", false) assert.NoError(t, err) assert.Equal(t, token_contents, token) err = os.Chdir(currentDir) assert.NoError(t, err) - _, err = getToken(url, namespace, true, "", "", false) + _, err = getToken(url, dirResp, true, "", "", false) assert.EqualError(t, err, "Credential is required for osdf:///user/foo but is currently missing") } diff --git a/client/sharing_url.go b/client/sharing_url.go index de0f40eca..5149e3205 100644 --- a/client/sharing_url.go +++ b/client/sharing_url.go @@ -94,7 +94,7 @@ func CreateSharingUrl(ctx context.Context, objectUrl *url.URL, isWrite bool) (st log.Errorln("Error while querying the Director:", err) return "", errors.Wrapf(err, "Error while querying the director at %s", directorUrl) } - namespace, err := CreateNsFromDirectorResp(dirResp) + parsedDirResp, err := ParseDirectorInfo(dirResp) if err != nil { return "", errors.Wrapf(err, "Unable to parse response from director at %s", directorUrl) } @@ -103,7 +103,7 @@ func CreateSharingUrl(ctx context.Context, objectUrl *url.URL, isWrite bool) (st if isWrite { opts.Operation = config.TokenSharedWrite } - token, err := AcquireToken(objectUrl, namespace, opts) + token, err := AcquireToken(objectUrl, parsedDirResp, opts) if err != nil { err = errors.Wrap(err, "Failed to acquire token") } diff --git a/client/sharing_url_test.go b/client/sharing_url_test.go index 531c13477..7861d0bb7 100644 --- a/client/sharing_url_test.go +++ b/client/sharing_url_test.go @@ -138,7 +138,7 @@ func TestSharingUrl(t *testing.T) { w.Header().Set("Location", *myUrlRef) w.Header().Set("X-Pelican-Namespace", "namespace=/test, require-token=true") w.Header().Set("X-Pelican-Authorization", fmt.Sprintf("issuer=%s", issuerLoc)) - w.Header().Set("X-Pelican-Token-Generation", fmt.Sprintf("issuer=%s, base-path=/test, strategy=OAuth2", issuerLoc)) + w.Header().Set("X-Pelican-Token-Generation", fmt.Sprintf("issuer=%s, base-path=/test, strategy=OAuth2, max-scope-depth=3", issuerLoc)) w.WriteHeader(http.StatusTemporaryRedirect) } else if r.URL.Path == "/issuer/.well-known/openid-configuration" { w.WriteHeader(http.StatusOK) diff --git a/cmd/config_mgr.go b/cmd/config_mgr.go index 4fb692508..cfb4abee1 100644 --- a/cmd/config_mgr.go +++ b/cmd/config_mgr.go @@ -22,15 +22,12 @@ import ( "fmt" "net/url" "os" - "path" "github.com/spf13/cobra" - "gopkg.in/yaml.v3" "github.com/pelicanplatform/pelican/client" "github.com/pelicanplatform/pelican/config" - "github.com/pelicanplatform/pelican/namespaces" ) var ( @@ -130,7 +127,7 @@ func printOauthConfig() { func addTokenSubcommands(tokenCmd *cobra.Command) { tokenCmd.AddCommand(&cobra.Command{ - Use: "get ", + Use: "get ", Short: "Get a new token for a given prefix", Long: "Get a new token for a given prefix", Args: cobra.ExactArgs(2), @@ -145,11 +142,21 @@ func addTokenSubcommands(tokenCmd *cobra.Command) { fmt.Fprintln(os.Stderr, "Unknown value for operation type (must be 'read' or 'write')", args[0]) os.Exit(1) } - dest := url.URL{Path: path.Clean("/" + args[1])} - namespace, err := namespaces.MatchNamespace(cmd.Context(), args[1]) + dest, err := url.Parse(args[1]) + if err != nil { + fmt.Fprintln(os.Stderr, "Failed to parse URL:", err) + os.Exit(1) + } + fedInfo, err := config.DiscoverUrlFederation(cmd.Context(), dest.Host) + if err != nil { + fmt.Fprintln(os.Stderr, "Failed to discover federation metadata:", err) + os.Exit(1) + } + + dirResp, err := client.GetDirectorInfoForPath(cmd.Context(), dest.Path, fedInfo.DirectorEndpoint, isWrite, "") if err != nil { - fmt.Fprintln(os.Stderr, "Failed to get namespace for path:", err) + fmt.Fprintln(os.Stderr, "Failed to get director info for path:", err) os.Exit(1) } @@ -157,7 +164,7 @@ func addTokenSubcommands(tokenCmd *cobra.Command) { if isWrite { opts.Operation = config.TokenWrite } - token, err := client.AcquireToken(&dest, namespace, opts) + token, err := client.AcquireToken(dest, dirResp, opts) if err != nil { fmt.Fprintln(os.Stderr, "Failed to get a token:", err) os.Exit(1) diff --git a/cmd/object_copy.go b/cmd/object_copy.go index e5678017e..bc5984390 100644 --- a/cmd/object_copy.go +++ b/cmd/object_copy.go @@ -19,7 +19,6 @@ package main import ( - "fmt" "net/url" "os" "path/filepath" @@ -31,7 +30,6 @@ import ( "github.com/pelicanplatform/pelican/client" "github.com/pelicanplatform/pelican/config" - "github.com/pelicanplatform/pelican/namespaces" "github.com/pelicanplatform/pelican/param" "github.com/pelicanplatform/pelican/utils" ) @@ -64,9 +62,7 @@ func init() { copyCmd.Short = "Copy a file to/from the OSDF" flagSet.Lookup("cache-list-name").Hidden = false // Expose the help for this option flagSet.StringP("caches-json", "j", "", "A JSON file containing the list of caches") - flagSet.Bool("closest", false, "Return the closest cache and exit") flagSet.BoolP("debug", "d", false, "Enable debug logs") // Typically set by the root command (which doesn't exist in stashcp mode) - flagSet.Bool("list-names", false, "Return the names of pre-configured cache lists and exit") flagSet.String("methods", "http", "Comma separated list of methods to try, in order") flagSet.Bool("namespaces", false, "Print the namespace information and exit") flagSet.Bool("plugininterface", false, "Output in HTCondor plugin format. Turned on if executable is named stash_plugin") @@ -122,40 +118,9 @@ func copyMain(cmd *cobra.Command, args []string) { } if val, err := cmd.Flags().GetBool("namespaces"); err == nil && val { - namespaces, err := namespaces.GetNamespaces(ctx) - if err != nil { - fmt.Println("Failed to get namespaces:", err) - os.Exit(1) - } - fmt.Printf("%+v\n", namespaces) - os.Exit(0) - } - - // Just return all the caches that it knows about - // Print out all of the caches and exit - if val, err := cmd.Flags().GetBool("list-names"); err == nil && val { - listName, _ := cmd.Flags().GetString("cache-list-name") - cacheList, err := client.GetBestCache(listName) - if err != nil { - log.Errorln("Failed to get best caches:", err) - os.Exit(1) - } - // Print the caches, comma separated, - fmt.Println(strings.Join(cacheList[:], ",")) - os.Exit(0) - } - - if val, err := cmd.Flags().GetBool("closest"); err == nil && val { - listName, err := cmd.Flags().GetString("cache-list-name") - if err != nil { - log.Errorln("Failed to determine correct cache list") - os.Exit(1) - } - cacheList, err := client.GetBestCache(listName) - if err != nil { - log.Errorln("Failed to get best cache: ", err) - } - fmt.Println(cacheList[0]) + // NOTE: The value returned by this no longer conforms to the old-style stashcp namespaces JSON. + // Instead, it now returns the struct provided by the registry + listAllNamespaces(cmd, args) os.Exit(0) } diff --git a/cmd/plugin.go b/cmd/plugin.go index a955fb558..2c6d49159 100644 --- a/cmd/plugin.go +++ b/cmd/plugin.go @@ -198,18 +198,18 @@ func stashPluginMain(args []string) { } if getCaches { - urls, err := client.GetCacheHostnames(context.Background(), testCachePath) + urls, err := client.GetObjectServerHostnames(context.Background(), testCachePath) if err != nil { - log.Errorln("Failed to get cache URLs:", err) + log.Errorln("Failed to get object server URLs:", err) os.Exit(1) } - cachesToTry := client.CachesToTry - if cachesToTry > len(urls) { - cachesToTry = len(urls) + serversToTry := client.ObjectServersToTry + if serversToTry > len(urls) { + serversToTry = len(urls) } - for _, url := range urls[:cachesToTry] { + for _, url := range urls[:serversToTry] { fmt.Println(url) } os.Exit(0) diff --git a/cmd/plugin_test.go b/cmd/plugin_test.go index 85d092ff4..9dbc9087c 100644 --- a/cmd/plugin_test.go +++ b/cmd/plugin_test.go @@ -774,7 +774,7 @@ func TestPluginRecursiveDownload(t *testing.T) { results := make(chan *classads.ClassAd, 5) err = runPluginWorker(fed.Ctx, false, workChan, results) assert.Error(t, err) - assert.Contains(t, err.Error(), "failed to read remote directory: PROPFIND /test/SomeDirectoryThatDoesNotExist:)/: 404") + assert.Contains(t, err.Error(), "Failed to create new transfer job: no collections URL found in director response") }) } diff --git a/director/director.go b/director/director.go index 91df8c7c3..9da710389 100644 --- a/director/director.go +++ b/director/director.go @@ -208,8 +208,23 @@ func generateXTokenGenHeader(ginCtx *gin.Context, namespaceAd server_structs.Nam if len(namespaceAd.Generation) != 0 { tokenGen := "" first := true + // TODO: At some point, the director stopped sending the `base-path` key in the token gen header. I'm unsure of the _proper_ way + // to fix this because the token gen header uses the issuer URL from NamespaceAdV2.Generation.CredentialIssuer, whereas basepaths + // come from NamespaceAdV2.Issuer.BasePaths. For now, connecting these two means checking if they have the same issuer URL. This + // really needs to be cleaned up in the future, and maybe we need to give more thought to why we have these two structs in the + // ad. See https://github.com/PelicanPlatform/pelican/issues/1540 + var basePath string + for _, issuer := range namespaceAd.Issuer { + if issuer.IssuerUrl.String() == namespaceAd.Generation[0].CredentialIssuer.String() { + if len(issuer.BasePaths) > 0 { + basePath = issuer.BasePaths[0] + } + break + } + } + hdrVals := []string{namespaceAd.Generation[0].CredentialIssuer.String(), fmt.Sprint(namespaceAd.Generation[0].MaxScopeDepth), - string(namespaceAd.Generation[0].Strategy)} + string(namespaceAd.Generation[0].Strategy), basePath} for idx, hdrKey := range []string{"issuer", "max-scope-depth", "strategy"} { hdrVal := hdrVals[idx] if hdrVal == "" { @@ -221,6 +236,11 @@ func generateXTokenGenHeader(ginCtx *gin.Context, namespaceAd server_structs.Nam first = false tokenGen += hdrKey + "=" + hdrVal } + + if basePath != "" { + tokenGen += ", base-path=" + basePath + } + if tokenGen != "" { ginCtx.Writer.Header()["X-Pelican-Token-Generation"] = []string{tokenGen} } diff --git a/namespaces/namespaces.go b/namespaces/namespaces.go deleted file mode 100644 index 1de440840..000000000 --- a/namespaces/namespaces.go +++ /dev/null @@ -1,242 +0,0 @@ -/*************************************************************** - * - * Copyright (C) 2024, Pelican Project, Morgridge Institute for Research - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You may - * obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ***************************************************************/ - -// Package namespaces implements namespace lookups and matches for legacy [stashcp] and [osdf-client] -// to maintain backward compatibility. -// -// The namespaces package should not be used for any new features Pelican introduces. -// -// [stashcp]: https://github.com/opensciencegrid/stashcp -// [osdf-client]: https://github.com/htcondor/osdf-client -package namespaces - -import ( - "bytes" - "context" - _ "embed" - "encoding/json" - "errors" - "fmt" - "io" - "net/http" - "strings" - - log "github.com/sirupsen/logrus" - - "github.com/pelicanplatform/pelican/config" - "github.com/pelicanplatform/pelican/param" -) - -// I don't think we actually want pelican to download the namespace every build -// Doesn't make for reproducible builds -// //go:generate curl -s https://topology-itb.opensciencegrid.org/stashcache/namespaces.json -o resources/namespaces.json - -//go:embed resources/namespaces.json -var namespacesJson []byte - -// defaultCaches is list of caches to use if no caches are specified in the namespace -var defaultCaches = []Cache{} - -// namespaces is a global list of namespaces -var namespaces []Namespace - -// Cache -type Cache struct { - AuthEndpoint string `json:"auth_endpoint"` - Endpoint string `json:"endpoint"` - Resource string `json:"resource"` -} - -// Cache information from the Director service -type DirectorCache struct { - ResourceName string - EndpointUrl string - Priority int - AuthedReq bool -} - -// Credential generation information -type CredentialGeneration struct { - Issuer *string `json:"issuer"` - BasePath *string `json:"base_path"` - MaxScopeDepth *int `json:"max_scope_depth"` - Strategy *string `json:"strategy"` - VaultServer *string `json:"vault_server"` -} - -// Namespace holds the structure of stash namespaces -type Namespace struct { - Caches []Cache `json:"caches"` - SortedDirectorCaches []DirectorCache - Path string `json:"path"` - CredentialGen *CredentialGeneration `json:"credential_generation"` - Issuer []string `json:"issuer"` - ReadHTTPS bool `json:"readhttps"` - UseTokenOnRead bool `json:"usetokenonread"` - WriteBackHost string `json:"writebackhost"` - DirListHost string `json:"dirlisthost"` -} - -// GetCaches returns the list of caches for the namespace -func (ns *Namespace) GetCaches() []Cache { - if ns.Caches == nil || len(ns.Caches) == 0 { - return defaultCaches - } - return ns.Caches -} - -func (ns *Namespace) GetCacheHosts() []string { - var caches []string - for _, cache := range ns.GetCaches() { - host := strings.Split(cache.Endpoint, ":")[0] - caches = append(caches, host) - } - return caches -} - -// MatchCaches compares the caches passed in (presumably from an ordered list of caches) -// to the caches for the namespace, and returns the intersection of the two -func (ns *Namespace) MatchCaches(caches []string) []Cache { - // Get the caches for the namespace - nsCaches := ns.GetCacheHosts() - - // Find the intersection of the two - intersectedCaches := intersect(caches, nsCaches) - - // map the intersectedCaches back to the endpoints (with ports) - var intersectedCachesWithEndpoints []Cache - // For each of the caches in the intersection - for _, cache := range intersectedCaches { - // Match to the caches in the namespace - for _, nsCache := range ns.GetCaches() { - host := strings.Split(nsCache.Endpoint, ":")[0] - if host == cache { - intersectedCachesWithEndpoints = append(intersectedCachesWithEndpoints, nsCache) - } - } - } - return intersectedCachesWithEndpoints -} - -// intersect returns the intersection of two slices -// in the order of a -func intersect(a, b []string) []string { - m := make(map[string]bool) - var intersect []string - for _, x := range b { - m[x] = true - } - for _, x := range a { - if _, ok := m[x]; ok { - intersect = append(intersect, x) - } - } - return intersect -} - -type NamespaceFull struct { - Caches []Cache `json:"caches"` - Namespaces []Namespace `json:"namespaces"` -} - -// GetNamespaces returns the list of namespaces -func GetNamespaces(ctx context.Context) ([]Namespace, error) { - // Allocate the namespaces - var nsfull NamespaceFull - // Try downloading the namespaces, if it fails, use the embedded namespaces - namespacesFromUrl, err := downloadNamespace(ctx) - if err != nil { - log.Debugf("Failed to download namespaces: %s", err) - if config.GetPreferredPrefix() == config.PelicanPrefix { - return nil, err - } else { - log.Debug("Continuing using built-in namespace configuration") - } - } else { - namespacesJson = namespacesFromUrl - } - if len(namespacesJson) > 40 { - log.Debugf("Parsing namespaces: %s ... (%d characters total)", - strings.ReplaceAll(string(namespacesJson[:40]), "\n", " "), - len(namespacesJson)) - } else { - log.Debugln("Parsing namespaces: ", strings.ReplaceAll(string(namespacesJson), "\n", " ")) - } - err = json.Unmarshal(namespacesJson, &nsfull) - if err != nil { - fmt.Println(err) - return nil, err - } - - defaultCaches = nsfull.Caches - - return nsfull.Namespaces, nil -} - -// downloadNamespace downloads the namespace information with timeouts -func downloadNamespace(ctx context.Context) ([]byte, error) { - // Get the namespace url from the environment - topoNamespaceUrl := param.Federation_TopologyNamespaceUrl.GetString() - if len(topoNamespaceUrl) == 0 { - return nil, errors.New("Federation.TopologyNamespaceUrl is not set; unable to locate valid caches") - } - log.Debugln("Downloading namespaces information from", topoNamespaceUrl) - - req, err := http.NewRequestWithContext(ctx, "GET", topoNamespaceUrl, nil) - if err != nil { - return nil, err - } - client := http.Client{Transport: config.GetTransport()} - resp, err := client.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - log.Errorf("Failed to download namespaces: %s", resp.Status) - return nil, errors.New("Failed to download namespaces: " + resp.Status) - } - var out bytes.Buffer - _, err = io.Copy(&out, resp.Body) - if err != nil { - return nil, err - } - return out.Bytes(), nil -} - -// MatchNamespace matches the namespace passed in to the namespaces in the list -func MatchNamespace(ctx context.Context, path string) (Namespace, error) { - var err error - if namespaces == nil { - namespaces, err = GetNamespaces(ctx) - if err != nil { - return Namespace{}, err - } - } - var best Namespace - for _, namespace := range namespaces { - if strings.HasPrefix(path, namespace.Path) && len(namespace.Path) > len(best.Path) { - best = namespace - } - } - if best.Path == "" { - return Namespace{}, errors.New("OSDF namespace not known for path " + path) - } - log.Debugln("Selected namespace:", best) - return best, nil -} diff --git a/namespaces/namespaces_test.go b/namespaces/namespaces_test.go deleted file mode 100644 index 84ef68208..000000000 --- a/namespaces/namespaces_test.go +++ /dev/null @@ -1,318 +0,0 @@ -/*************************************************************** - * - * Copyright (C) 2024, Pelican Project, Morgridge Institute for Research - * - * Licensed under the Apache License, Version 2.0 (the "License"); you - * may not use this file except in compliance with the License. You may - * obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ***************************************************************/ - -package namespaces - -import ( - "context" - _ "embed" - "net" - "net/http" - "net/http/httptest" - "os" - "testing" - - "github.com/spf13/viper" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/pelicanplatform/pelican/config" - "github.com/pelicanplatform/pelican/test_utils" -) - -var ( - //go:embed resources/itb-namespaces.json - itbNamespaces string -) - -// TestMatchNamespace calls MatchNamespace with a hostname, checking -// for a valid return value. -func TestMatchNamespace(t *testing.T) { - ctx, _, _ := test_utils.TestContext(context.Background(), t) - - namespaces = nil - namespacesJson = []byte(` -{ - "caches": [ - { - "auth_endpoint": "osg.kans.nrp.internet2.edu:8443", - "endpoint": "osg.kans.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "osg.newy32aoa.nrp.internet2.edu:8443", - "endpoint": "osg.newy32aoa.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - } - ], - "namespaces": [ - { - "path": "/ospool/PROTECTED", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://origin-auth2001.chtc.wisc.edu:1095", - "dirlisthost": "https://origin-auth2001.chtc.wisc.edu:1095" - }, - { - "path": "/osgconnect/private", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://stash-xrd.osgconnect.net:1095", - "dirlisthost": "https://stash.osgconnect.net:1095" - }, - { - "path": "/osgconnect", - "writebackhost": "https://stash-xrd.osgconnect.net:1094", - "dirlisthost": "http://stash.osgconnect.net:1094" - } - ] -} -`) - - err := os.Setenv("PELICAN_TOPOLOGY_NAMESPACE_URL", "https://doesnotexist.edu/blah/nope") - if err != nil { - t.Error(err) - } - // Reset the prefix to get old OSDF fallback behavior. - oldPrefix, err := config.SetPreferredPrefix(config.OsdfPrefix) - assert.NoError(t, err) - defer func() { - _, err := config.SetPreferredPrefix(oldPrefix) - assert.NoError(t, err) - }() - - viper.Reset() - err = config.InitClient() - assert.Nil(t, err) - - ns, err := MatchNamespace(ctx, "/osgconnect/private/path/to/file.txt") - assert.NoError(t, err, "Failed to parse namespace") - - assert.Equal(t, "/osgconnect/private", ns.Path) - assert.Equal(t, true, ns.ReadHTTPS) - - // Check for empty - ns, err = MatchNamespace(ctx, "/does/not/exist.txt") - assert.Error(t, err) - - // Check for not private - ns, err = MatchNamespace(ctx, "/osgconnect/public/path/to/file.txt") - assert.NoError(t, err, "Failed to parse namespace") - assert.Equal(t, "/osgconnect", ns.Path) - assert.Equal(t, false, ns.ReadHTTPS) - assert.Equal(t, false, ns.UseTokenOnRead) - - err = os.Unsetenv("PELICAN_NAMESPACE_URL") - if err != nil { - t.Error(err) - } - -} - -func TestMatchNamespaceSpecific(t *testing.T) { - ctx, _, _ := test_utils.TestContext(context.Background(), t) - var namesspacesBackup = namespaces - defer func() { - namespaces = namesspacesBackup - }() - namespaces = []Namespace{ - { - Path: "/osgconnect", - }, - { - Path: "/user", - }, - { - Path: "/user/abcdef", - }, - { - Path: "/user/ligo/blah", - }, - { - Path: "/user/ligo", - }, - } - - var cases = []struct { - path string - want string - }{ - {"/user/ligo/blah", "/user/ligo/blah"}, - {"/user/ligo/blah/blah", "/user/ligo/blah"}, - {"/user/ligo", "/user/ligo"}, - {"/user/ligo/file/under/path", "/user/ligo"}, - {"/user/anon/file", "/user"}, - {"/user/abc/file", "/user"}, - } - - for _, c := range cases { - ns, err := MatchNamespace(ctx, c.path) - assert.NoError(t, err, "Failed to parse namespace") - assert.Equal(t, c.want, ns.Path, "Writeback host does not match when matching namespace for path %s", c.path) - } - -} - -func TestFullNamespace(t *testing.T) { - ctx, _, _ := test_utils.TestContext(context.Background(), t) - os.Setenv("PELICAN_NAMESPACE_URL", "https://topology.opensciencegrid.org/osdf/namespaces") - viper.Reset() - err := config.InitClient() - assert.Nil(t, err) - - ns, err := MatchNamespace(ctx, "/ospool/PROTECTED/dweitzel/test.txt") - assert.NoError(t, err, "Failed to parse namespace") - assert.Equal(t, true, ns.ReadHTTPS) - assert.Equal(t, true, ns.UseTokenOnRead) - assert.Equal(t, "/ospool/PROTECTED", ns.Path) - assert.Equal(t, "https://origin-auth2001.chtc.wisc.edu:1095", ns.WriteBackHost) - -} - -// TestDownloadNamespaces tests the download of the namespaces JSON -func TestDownloadNamespaces(t *testing.T) { - ctx, _, _ := test_utils.TestContext(context.Background(), t) - - svr := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.Method != "GET" { - w.WriteHeader(http.StatusMethodNotAllowed) - return - } - if r.URL.Path == "/stashcache/namespaces" { - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusOK) - _, err := w.Write([]byte(itbNamespaces)) - require.NoError(t, err) - return - } - w.WriteHeader(http.StatusNotFound) - })) - - os.Setenv("PELICAN_TOPOLOGY_NAMESPACE_URL", "https://topology-itb.opensciencegrid.org/stashcache/namespaces") - viper.Reset() - err := config.InitClient() - assert.Nil(t, err) - - // Hijack the common transport used by Pelican, forcing all connections to go to our test server - transport := config.GetTransport() - oldDial := transport.DialContext - transport.DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) { - dialer := net.Dialer{} - return dialer.DialContext(ctx, svr.Listener.Addr().Network(), svr.Listener.Addr().String()) - } - oldConfig := transport.TLSClientConfig - transport.TLSClientConfig = svr.TLS.Clone() - transport.TLSClientConfig.InsecureSkipVerify = true - t.Cleanup(func() { - transport.DialContext = oldDial - transport.TLSClientConfig = oldConfig - }) - - defer os.Unsetenv("PELICAN_TOPOLOGY_NAMESPACE_URL") - namespaceBytes, err := downloadNamespace(ctx) - assert.NoError(t, err, "Failed to download namespaces") - assert.NotNil(t, namespaceBytes, "Namespace bytes is nil") - -} - -func TestDownloadNamespacesFail(t *testing.T) { - ctx, _, _ := test_utils.TestContext(context.Background(), t) - os.Setenv("PELICAN_TOPOLOGY_NAMESPACE_URL", "https://doesnotexist.org.blah/namespaces.json") - viper.Reset() - err := config.InitClient() - assert.Nil(t, err) - defer os.Unsetenv("PELICAN_TOPOLOGY_NAMESPACE_URL") - namespaceBytes, err := downloadNamespace(ctx) - assert.Error(t, err, "Failed to download namespaces") - assert.Nil(t, namespaceBytes, "Namespace bytes is nil") -} - -func TestGetNamespaces(t *testing.T) { - ctx, _, _ := test_utils.TestContext(context.Background(), t) - // Set the environment to an invalid URL, so it is forced to use the "built-in" namespaces.json - os.Setenv("OSDF_TOPOLOGY_NAMESPACE_URL", "https://doesnotexist.org.blah/namespaces.json") - oldPrefix, err := config.SetPreferredPrefix(config.OsdfPrefix) - assert.NoError(t, err) - defer func() { - _, err := config.SetPreferredPrefix(oldPrefix) - assert.NoError(t, err) - }() - viper.Reset() - err = config.InitClient() - assert.Nil(t, err) - defer os.Unsetenv("OSDF_TOPOLOGY_NAMESPACE_URL") - namespaces, err := GetNamespaces(ctx) - assert.NoError(t, err, "Failed to get namespaces") - assert.NotNil(t, namespaces, "Namespaces is nil") - assert.Equal(t, 3, len(namespaces)) -} - -func Test_intersect(t *testing.T) { - var a = []string{"a", "b", "c"} - var b = []string{"b", "c", "d"} - var c = []string{"b", "c"} - assert.Equal(t, c, intersect(a, b)) - - a = []string{"4", "3", "2", "1"} - b = []string{"2", "4", "5"} - c = []string{"4", "2"} - assert.Equal(t, c, intersect(a, b)) -} - -func TestNamespace_MatchCaches(t *testing.T) { - cache1 := Cache{ - Endpoint: "cache1.ospool.org:8000", - } - cache2 := Cache{ - Endpoint: "cache2.ospool.org:8001", - } - cache3 := Cache{ - Endpoint: "cache3.ospool.org:8002", - } - namespace := Namespace{ - Path: "/ospool/PROTECTED", - Caches: []Cache{ - cache1, - cache2, - cache3, - }, - } - assert.Equal(t, []Cache{cache1}, namespace.MatchCaches([]string{"cache1.ospool.org"})) - assert.Equal(t, []Cache{cache2}, namespace.MatchCaches([]string{"cache2.ospool.org"})) - assert.Equal(t, []Cache{cache3}, namespace.MatchCaches([]string{"cache3.ospool.org"})) - assert.Equal(t, []Cache(nil), namespace.MatchCaches([]string{"cache4.ospool.org"})) - - assert.Equal(t, []Cache{cache2, cache3, cache1}, namespace.MatchCaches([]string{"cache2.ospool.org", "cache3.ospool.org", "cache1.ospool.org"})) - - assert.Equal(t, []Cache{cache2, cache1}, namespace.MatchCaches([]string{"cache5.ospool.org", "cache2.ospool.org", "cache4.ospool.org", "cache1.ospool.org"})) -} diff --git a/namespaces/resources/itb-namespaces.json b/namespaces/resources/itb-namespaces.json deleted file mode 100644 index 5cb76800f..000000000 --- a/namespaces/resources/itb-namespaces.json +++ /dev/null @@ -1 +0,0 @@ -{"caches": [{"auth_endpoint": "amst-osdf-xcache01.es.net:8443", "endpoint": "amst-osdf-xcache01.es.net:8000", "resource": "AMSTERDAM_ESNET_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8443", "endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8000", "resource": "CARDIFF_UK_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.ligo.caltech.edu:8443", "endpoint": "stashcache.ligo.caltech.edu:8000", "resource": "CIT_LIGO_STASHCACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "lond-osdf-xcache01.es.net:8443", "endpoint": "lond-osdf-xcache01.es.net:8000", "resource": "LONDON_ESNET_OSDF_CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "ligo.hpc.swin.edu.au:8443", "endpoint": "ligo.hpc.swin.edu.au:8000", "resource": "SUT-STASHCACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "namespaces": [{"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "cn447.storrs.hpc.uconn.edu:1095", "endpoint": "cn447.storrs.hpc.uconn.edu:1094", "resource": "UConn-HPC_StashCache_origin"}, {"auth_endpoint": "gandalf.phys.uconn.edu:1095", "endpoint": "gandalf.phys.uconn.edu:1094", "resource": "UConn-OSG_StashCache_origin"}], "path": "/Gluex", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [], "path": "/NSG/PUBLIC", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "osg-sci1.datacollaboratory.org:1095", "endpoint": "osg-sci1.datacollaboratory.org:1094", "resource": "Utah-SCI-VDC-ITB-ORIGIN"}], "path": "/VDC/PUBLIC", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": {"base_path": "/chtc", "issuer": "https://chtc.cs.wisc.edu", "max_scope_depth": 3, "strategy": "OAuth2", "vault_issuer": null, "vault_server": null}, "dirlisthost": "https://origin-auth2000.chtc.wisc.edu:1095", "origins": [{"auth_endpoint": "origin-auth2000.chtc.wisc.edu:1095", "endpoint": "origin-auth2000.chtc.wisc.edu:1094", "resource": "CHTC_STASHCACHE_ORIGIN_AUTH_2000"}], "path": "/chtc", "readhttps": true, "scitokens": [{"base_path": ["/chtc"], "issuer": "https://chtc.cs.wisc.edu", "restricted_path": []}], "usetokenonread": true, "writebackhost": "https://origin-auth2000.chtc.wisc.edu:1095"}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": {"base_path": "/chtc", "issuer": "https://chtc.cs.wisc.edu", "max_scope_depth": 3, "strategy": "OAuth2", "vault_issuer": null, "vault_server": null}, "dirlisthost": null, "origins": [{"auth_endpoint": "sc-origin.chtc.wisc.edu:1095", "endpoint": "sc-origin.chtc.wisc.edu:1095", "resource": "CHTC_STASHCACHE_ORIGIN"}], "path": "/chtc/PROTECTED/sc-origin", "readhttps": true, "scitokens": [{"base_path": ["/chtc"], "issuer": "https://chtc.cs.wisc.edu", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "sc-origin2000.chtc.wisc.edu:1095", "endpoint": "sc-origin2000.chtc.wisc.edu:1094", "resource": "CHTC_STASHCACHE_ORIGIN_2000"}], "path": "/chtc/PROTECTED/sc-origin2000", "readhttps": true, "scitokens": [{"base_path": ["/chtc"], "issuer": "https://chtc.cs.wisc.edu", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "sc-origin.chtc.wisc.edu:1095", "endpoint": "sc-origin.chtc.wisc.edu:1095", "resource": "CHTC_STASHCACHE_ORIGIN"}, {"auth_endpoint": "sc-origin2000.chtc.wisc.edu:1095", "endpoint": "sc-origin2000.chtc.wisc.edu:1094", "resource": "CHTC_STASHCACHE_ORIGIN_2000"}], "path": "/chtc/PUBLIC", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [], "path": "/chtc/itb/helm-origin/PROTECTED", "readhttps": true, "scitokens": [{"base_path": ["/chtc"], "issuer": "https://chtc.cs.wisc.edu", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [], "path": "/chtc/itb/helm-origin/PUBLIC", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "itb-osdf-pelican-origin.osgdev.chtc.io:1095", "endpoint": "itb-osdf-pelican-origin.osgdev.chtc.io:1094", "resource": "CHTC-ITB-OSDF-PELICAN-ORIGIN"}], "path": "/chtc/itb/osdf-pelican", "readhttps": true, "scitokens": [{"base_path": ["/chtc"], "issuer": "https://chtc.cs.wisc.edu", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "nih-origin.osgdev.chtc.io:1095", "endpoint": "nih-origin.osgdev.chtc.io:1094", "resource": "CHTC_NIH_ORIGIN"}], "path": "/data.lhncbc.nlm.nih.gov/public", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "sci-xrootd.jlab.org:1095", "endpoint": "sci-xrootd.jlab.org:1094", "resource": "JLab-StashCache-Origin"}], "path": "/eic", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": "http://et-origin.cism.ucl.ac.be:1094", "origins": [{"auth_endpoint": "et-origin.cism.ucl.ac.be:1095", "endpoint": "et-origin.cism.ucl.ac.be:1094", "resource": "UCLouvain-ET-OSDF-Origin"}], "path": "/et-gw/PUBLIC", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "cn447.storrs.hpc.uconn.edu:1095", "endpoint": "cn447.storrs.hpc.uconn.edu:1094", "resource": "UConn-HPC_StashCache_origin"}, {"auth_endpoint": "gandalf.phys.uconn.edu:1095", "endpoint": "gandalf.phys.uconn.edu:1094", "resource": "UConn-OSG_StashCache_origin"}], "path": "/gluex", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "amst-osdf-xcache01.es.net:8443", "endpoint": "amst-osdf-xcache01.es.net:8000", "resource": "AMSTERDAM_ESNET_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8443", "endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8000", "resource": "CARDIFF_UK_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.ligo.caltech.edu:8443", "endpoint": "stashcache.ligo.caltech.edu:8000", "resource": "CIT_LIGO_STASHCACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "lond-osdf-xcache01.es.net:8443", "endpoint": "lond-osdf-xcache01.es.net:8000", "resource": "LONDON_ESNET_OSDF_CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "ligo.hpc.swin.edu.au:8443", "endpoint": "ligo.hpc.swin.edu.au:8000", "resource": "SUT-STASHCACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "origin.ligo.caltech.edu:1095", "endpoint": "origin.ligo.caltech.edu:1094", "resource": "CIT_LIGO_ORIGIN"}, {"auth_endpoint": "xrootd-local.unl.edu:1094", "endpoint": "xrootd-local.unl.edu:1094", "resource": "LIGO-StashCache-Origin"}, {"auth_endpoint": "ingrid-se09.cism.ucl.ac.be:1095", "endpoint": "ingrid-se09.cism.ucl.ac.be:1094", "resource": "UCL-Virgo-StashCache-Origin"}], "path": "/gwdata", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "hcc-stashcache-origin.unl.edu:1095", "endpoint": "hcc-stashcache-origin.unl.edu:1094", "resource": "HCC-StashCache-Origin"}], "path": "/hcc/PROTECTED", "readhttps": true, "scitokens": [{"base_path": ["/hcc"], "issuer": "https://scitokens.org/hcc", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "hcc-stashcache-origin.unl.edu:1095", "endpoint": "hcc-stashcache-origin.unl.edu:1094", "resource": "HCC-StashCache-Origin"}], "path": "/hcc/PUBLIC", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "hcc-stashcache-origin.unl.edu:1095", "endpoint": "hcc-stashcache-origin.unl.edu:1094", "resource": "HCC-StashCache-Origin"}], "path": "/hcc/focusday", "readhttps": true, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "stash-origin.icecube.wisc.edu:1095", "endpoint": "stash-origin.icecube.wisc.edu:1094", "resource": "IceCube_StashCache_origin"}], "path": "/icecube/PUBLIC", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "mghpcc-origin.nationalresearchplatform.org:1095", "endpoint": "mghpcc-origin.nationalresearchplatform.org:1094", "resource": "MGHPCC_NRP_OSDF_ORIGIN"}], "path": "/icecube/production/mghpcc/protected/", "readhttps": true, "scitokens": [{"base_path": ["/icecube"], "issuer": "https://chtc.cs.wisc.edu/icecube", "restricted_path": []}], "usetokenonread": true, "writebackhost": "https://mghpcc-origin.nationalresearchplatform.org:1095"}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "unl-origin.nationalresearchplatform.org:1095", "endpoint": "unl-origin.nationalresearchplatform.org:1094", "resource": "NEBRASKA_NRP_OSDF_ORIGIN"}], "path": "/icecube/production/nrpnb/protected", "readhttps": true, "scitokens": [{"base_path": ["/icecube"], "issuer": "https://chtc.cs.wisc.edu/icecube", "restricted_path": []}], "usetokenonread": true, "writebackhost": "https://unl-origin.nationalresearchplatform.org:1095"}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "sdsc-origin.nationalresearchplatform.org:1095", "endpoint": "sdsc-origin.nationalresearchplatform.org:1094", "resource": "SDSC_NRP_OSDF_ORIGIN"}], "path": "/icecube/production/sdsc/protected/", "readhttps": true, "scitokens": [{"base_path": ["/icecube"], "issuer": "https://chtc.cs.wisc.edu/icecube", "restricted_path": []}], "usetokenonread": true, "writebackhost": "http://sdsc-origin.nationalresearchplatform.org:1095"}, {"caches": [{"auth_endpoint": "amst-osdf-xcache01.es.net:8443", "endpoint": "amst-osdf-xcache01.es.net:8000", "resource": "AMSTERDAM_ESNET_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8443", "endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8000", "resource": "CARDIFF_UK_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.ligo.caltech.edu:8443", "endpoint": "stashcache.ligo.caltech.edu:8000", "resource": "CIT_LIGO_STASHCACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "lond-osdf-xcache01.es.net:8443", "endpoint": "lond-osdf-xcache01.es.net:8000", "resource": "LONDON_ESNET_OSDF_CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "ligo.hpc.swin.edu.au:8443", "endpoint": "ligo.hpc.swin.edu.au:8000", "resource": "SUT-STASHCACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "origin-staging.ligo.caltech.edu:1095", "endpoint": "origin-staging.ligo.caltech.edu:1094", "resource": "CIT_LIGO_ORIGIN_STAGING"}], "path": "/igwn/cit", "readhttps": true, "scitokens": [{"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://cilogon.org/igwn", "restricted_path": []}, {"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://test.cilogon.org/igwn", "restricted_path": []}], "usetokenonread": true, "writebackhost": "https://origin-staging.ligo.caltech.edu:1095"}, {"caches": [{"auth_endpoint": "amst-osdf-xcache01.es.net:8443", "endpoint": "amst-osdf-xcache01.es.net:8000", "resource": "AMSTERDAM_ESNET_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8443", "endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8000", "resource": "CARDIFF_UK_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.ligo.caltech.edu:8443", "endpoint": "stashcache.ligo.caltech.edu:8000", "resource": "CIT_LIGO_STASHCACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "lond-osdf-xcache01.es.net:8443", "endpoint": "lond-osdf-xcache01.es.net:8000", "resource": "LONDON_ESNET_OSDF_CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "ligo.hpc.swin.edu.au:8443", "endpoint": "ligo.hpc.swin.edu.au:8000", "resource": "SUT-STASHCACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "kagra-dsr-b2.icrr.u-tokyo.ac.jp:1095", "endpoint": "kagra-dsr-b2.icrr.u-tokyo.ac.jp:1094", "resource": "KAGRA_OSDF_ORIGIN"}], "path": "/igwn/kagra", "readhttps": true, "scitokens": [{"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://cilogon.org/igwn", "restricted_path": []}, {"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://test.cilogon.org/igwn", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "amst-osdf-xcache01.es.net:8443", "endpoint": "amst-osdf-xcache01.es.net:8000", "resource": "AMSTERDAM_ESNET_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8443", "endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8000", "resource": "CARDIFF_UK_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.ligo.caltech.edu:8443", "endpoint": "stashcache.ligo.caltech.edu:8000", "resource": "CIT_LIGO_STASHCACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "lond-osdf-xcache01.es.net:8443", "endpoint": "lond-osdf-xcache01.es.net:8000", "resource": "LONDON_ESNET_OSDF_CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "ligo.hpc.swin.edu.au:8443", "endpoint": "ligo.hpc.swin.edu.au:8000", "resource": "SUT-STASHCACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "origin-ifo.ligo.caltech.edu:1095", "endpoint": "origin-ifo.ligo.caltech.edu:1094", "resource": "CIT_LIGO_ORIGIN_IFO"}], "path": "/igwn/ligo", "readhttps": true, "scitokens": [{"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://cilogon.org/igwn", "restricted_path": []}, {"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://test.cilogon.org/igwn", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "amst-osdf-xcache01.es.net:8443", "endpoint": "amst-osdf-xcache01.es.net:8000", "resource": "AMSTERDAM_ESNET_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8443", "endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8000", "resource": "CARDIFF_UK_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.ligo.caltech.edu:8443", "endpoint": "stashcache.ligo.caltech.edu:8000", "resource": "CIT_LIGO_STASHCACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "lond-osdf-xcache01.es.net:8443", "endpoint": "lond-osdf-xcache01.es.net:8000", "resource": "LONDON_ESNET_OSDF_CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "ligo.hpc.swin.edu.au:8443", "endpoint": "ligo.hpc.swin.edu.au:8000", "resource": "SUT-STASHCACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "origin-shared.ligo.caltech.edu:1095", "endpoint": "origin-shared.ligo.caltech.edu:1094", "resource": "CIT_LIGO_ORIGIN_SHARED"}], "path": "/igwn/shared", "readhttps": true, "scitokens": [{"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://cilogon.org/igwn", "restricted_path": []}, {"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://test.cilogon.org/igwn", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "amst-osdf-xcache01.es.net:8443", "endpoint": "amst-osdf-xcache01.es.net:8000", "resource": "AMSTERDAM_ESNET_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8443", "endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8000", "resource": "CARDIFF_UK_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.ligo.caltech.edu:8443", "endpoint": "stashcache.ligo.caltech.edu:8000", "resource": "CIT_LIGO_STASHCACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "lond-osdf-xcache01.es.net:8443", "endpoint": "lond-osdf-xcache01.es.net:8000", "resource": "LONDON_ESNET_OSDF_CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "ligo.hpc.swin.edu.au:8443", "endpoint": "ligo.hpc.swin.edu.au:8000", "resource": "SUT-STASHCACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "origin-readtest.ligo.caltech.edu:1095", "endpoint": "origin-readtest.ligo.caltech.edu:1094", "resource": "CIT_LIGO_ORIGIN_TEST"}], "path": "/igwn/test", "readhttps": true, "scitokens": [{"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://cilogon.org/igwn", "restricted_path": []}, {"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://test.cilogon.org/igwn", "restricted_path": []}, {"base_path": ["/igwn/test", "/igwn/test-write"], "issuer": "https://osdf.igwn.org/cit", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "amst-osdf-xcache01.es.net:8443", "endpoint": "amst-osdf-xcache01.es.net:8000", "resource": "AMSTERDAM_ESNET_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8443", "endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8000", "resource": "CARDIFF_UK_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.ligo.caltech.edu:8443", "endpoint": "stashcache.ligo.caltech.edu:8000", "resource": "CIT_LIGO_STASHCACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "lond-osdf-xcache01.es.net:8443", "endpoint": "lond-osdf-xcache01.es.net:8000", "resource": "LONDON_ESNET_OSDF_CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "ligo.hpc.swin.edu.au:8443", "endpoint": "ligo.hpc.swin.edu.au:8000", "resource": "SUT-STASHCACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "origin-writetest.ligo.caltech.edu:1095", "endpoint": "origin-writetest.ligo.caltech.edu:1094", "resource": "CIT_LIGO_ORIGIN_TEST_WRITE"}], "path": "/igwn/test-write", "readhttps": true, "scitokens": [{"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://cilogon.org/igwn", "restricted_path": []}, {"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://test.cilogon.org/igwn", "restricted_path": []}, {"base_path": ["/igwn/test", "/igwn/test-write"], "issuer": "https://osdf.igwn.org/cit", "restricted_path": []}], "usetokenonread": true, "writebackhost": "https://origin-writetest.ligo.caltech.edu:1095"}, {"caches": [{"auth_endpoint": "amst-osdf-xcache01.es.net:8443", "endpoint": "amst-osdf-xcache01.es.net:8000", "resource": "AMSTERDAM_ESNET_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8443", "endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8000", "resource": "CARDIFF_UK_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.ligo.caltech.edu:8443", "endpoint": "stashcache.ligo.caltech.edu:8000", "resource": "CIT_LIGO_STASHCACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "lond-osdf-xcache01.es.net:8443", "endpoint": "lond-osdf-xcache01.es.net:8000", "resource": "LONDON_ESNET_OSDF_CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "ligo.hpc.swin.edu.au:8443", "endpoint": "ligo.hpc.swin.edu.au:8000", "resource": "SUT-STASHCACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "ingrid-se09.cism.ucl.ac.be:1095", "endpoint": "ingrid-se09.cism.ucl.ac.be:1094", "resource": "UCL-Virgo-StashCache-Origin"}], "path": "/igwn/virgo", "readhttps": true, "scitokens": [{"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://cilogon.org/igwn", "restricted_path": []}, {"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://test.cilogon.org/igwn", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "sci-xrootd.jlab.org:1095", "endpoint": "sci-xrootd.jlab.org:1094", "resource": "JLab-StashCache-Origin"}], "path": "/jlab", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "unl-origin.nationalresearchplatform.org:1095", "endpoint": "unl-origin.nationalresearchplatform.org:1094", "resource": "NEBRASKA_NRP_OSDF_ORIGIN"}, {"auth_endpoint": "sdsc-origin.nationalresearchplatform.org:1095", "endpoint": "sdsc-origin.nationalresearchplatform.org:1094", "resource": "SDSC_NRP_OSDF_ORIGIN"}], "path": "/ndp/burnpro3d", "readhttps": true, "scitokens": [{"base_path": ["/ndp/burnpro3d"], "issuer": "https://t.nationalresearchplatform.org/burnpro3d", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "unl-origin.nationalresearchplatform.org:1095", "endpoint": "unl-origin.nationalresearchplatform.org:1094", "resource": "NEBRASKA_NRP_OSDF_ORIGIN"}, {"auth_endpoint": "sdsc-origin.nationalresearchplatform.org:1095", "endpoint": "sdsc-origin.nationalresearchplatform.org:1094", "resource": "SDSC_NRP_OSDF_ORIGIN"}], "path": "/ndp/keycloak-testing", "readhttps": true, "scitokens": [{"base_path": ["/ndp/keycloak-testing"], "issuer": "https://idp.nationaldataplatform.org/auth/realms/ndp", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "sdsc-origin.nationalresearchplatform.org:1095", "endpoint": "sdsc-origin.nationalresearchplatform.org:1094", "resource": "SDSC_NRP_OSDF_ORIGIN"}], "path": "/nrp", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "sdsc-origin.nationalresearchplatform.org:1095", "endpoint": "sdsc-origin.nationalresearchplatform.org:1094", "resource": "SDSC_NRP_OSDF_ORIGIN"}], "path": "/nrp/protected/sio/MODIS_Aqua_microphysics_images/", "readhttps": true, "scitokens": [{"base_path": ["/nrp/protected/sio/MODIS_Aqua_microphysics_images/"], "issuer": "https://token.nationalresearchplatform.org/modis", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "sdsc-origin.nationalresearchplatform.org:1095", "endpoint": "sdsc-origin.nationalresearchplatform.org:1094", "resource": "SDSC_NRP_OSDF_ORIGIN"}], "path": "/nrp/protected/xenon-biggrid-nl/", "readhttps": true, "scitokens": [{"base_path": ["/nrp/protected/xenon-biggrid-nl/"], "issuer": "https://t.nationalresearchplatform.org/xenon", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "mghpcc-origin.nationalresearchplatform.org:1095", "endpoint": "mghpcc-origin.nationalresearchplatform.org:1094", "resource": "MGHPCC_NRP_OSDF_ORIGIN"}, {"auth_endpoint": "unl-origin.nationalresearchplatform.org:1095", "endpoint": "unl-origin.nationalresearchplatform.org:1094", "resource": "NEBRASKA_NRP_OSDF_ORIGIN"}, {"auth_endpoint": "osdftest.t2.ucsd.edu:1095", "endpoint": "osdftest.t2.ucsd.edu:1094", "resource": "SDSC-test-Origin"}, {"auth_endpoint": "sdsc-origin.nationalresearchplatform.org:1095", "endpoint": "sdsc-origin.nationalresearchplatform.org:1094", "resource": "SDSC_NRP_OSDF_ORIGIN"}], "path": "/osdftest", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [], "path": "/osgconnect/collab", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [], "path": "/osgconnect/protected", "readhttps": true, "scitokens": [{"base_path": ["/"], "issuer": "https://scitokens.org/osg-connect", "restricted_path": ["/osgconnect"]}], "usetokenonread": true, "writebackhost": "https://stash-xrd.osgconnect.net:1094"}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [], "path": "/osgconnect/public", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": "https://stash-xrd.osgconnect.net:1094"}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": {"base_path": null, "issuer": "https://osg-htc.org/ospool", "max_scope_depth": 4, "strategy": "OAuth2", "vault_issuer": null, "vault_server": null}, "dirlisthost": "https://origin-auth2001.chtc.wisc.edu:1095", "origins": [{"auth_endpoint": "origin-auth2001.chtc.wisc.edu:1095", "endpoint": "origin-auth2001.chtc.wisc.edu:1094", "resource": "CHTC_OSPOOL_ORIGIN"}], "path": "/ospool/PROTECTED", "readhttps": true, "scitokens": [{"base_path": ["/ospool/PROTECTED", "/s3.amazonaws.com/us-east-1", "/s3.amazonaws.com/us-west-1"], "issuer": "https://osg-htc.org/ospool", "restricted_path": []}], "usetokenonread": true, "writebackhost": "https://origin-auth2001.chtc.wisc.edu:1095"}, {"caches": [], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "ap20.uc.osg-htc.org:1095", "endpoint": "ap20.uc.osg-htc.org:1094", "resource": "UChicago_OSGConnect_ap20"}], "path": "/ospool/ap20/.well-known", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": {"base_path": null, "issuer": "https://osg-htc.org/ospool", "max_scope_depth": 4, "strategy": "OAuth2", "vault_issuer": null, "vault_server": null}, "dirlisthost": "https://ap20.uc.osg-htc.org:1095", "origins": [{"auth_endpoint": "ap20.uc.osg-htc.org:1095", "endpoint": "ap20.uc.osg-htc.org:1094", "resource": "UChicago_OSGConnect_ap20"}], "path": "/ospool/ap20/data", "readhttps": true, "scitokens": [{"base_path": ["/ospool/ap20"], "issuer": "https://ap20.uc.osg-htc.org:1094/ospool/ap20", "restricted_path": []}], "usetokenonread": true, "writebackhost": "https://ap20.uc.osg-htc.org:1095"}, {"caches": [], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "ap21.uc.osg-htc.org:1095", "endpoint": "ap21.uc.osg-htc.org:1094", "resource": "UChicago_OSGConnect_ap21"}], "path": "/ospool/ap21/.well-known", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": {"base_path": null, "issuer": "https://osg-htc.org/ospool", "max_scope_depth": 4, "strategy": "OAuth2", "vault_issuer": null, "vault_server": null}, "dirlisthost": "https://ap21.uc.osg-htc.org:1095", "origins": [{"auth_endpoint": "ap21.uc.osg-htc.org:1095", "endpoint": "ap21.uc.osg-htc.org:1094", "resource": "UChicago_OSGConnect_ap21"}], "path": "/ospool/ap21/data", "readhttps": true, "scitokens": [{"base_path": ["/ospool/ap21"], "issuer": "https://ap21.uc.osg-htc.org:1094/ospool/ap21", "restricted_path": []}], "usetokenonread": true, "writebackhost": "https://ap21.uc.osg-htc.org:1095"}, {"caches": [], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "ap22.uc.osg-htc.org:1095", "endpoint": "ap22.uc.osg-htc.org:1094", "resource": "UChicago_OSGConnect_ap22"}], "path": "/ospool/ap22/.well-known", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": {"base_path": null, "issuer": "https://osg-htc.org/ospool", "max_scope_depth": 4, "strategy": "OAuth2", "vault_issuer": null, "vault_server": null}, "dirlisthost": "https://ap22.uc.osg-htc.org:1095", "origins": [{"auth_endpoint": "ap22.uc.osg-htc.org:1095", "endpoint": "ap22.uc.osg-htc.org:1094", "resource": "UChicago_OSGConnect_ap22"}], "path": "/ospool/ap22/data", "readhttps": true, "scitokens": [{"base_path": ["/ospool/ap22", "/ospool/ap22/data", "/ospool/uc-shared/project"], "issuer": "https://ap22.uc.osg-htc.org:1094/ospool/ap22", "restricted_path": []}], "usetokenonread": true, "writebackhost": "https://ap22.uc.osg-htc.org:1095"}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": {"base_path": null, "issuer": "https://osg-htc.org/ospool/uc-shared", "max_scope_depth": 4, "strategy": "OAuth2", "vault_issuer": null, "vault_server": null}, "dirlisthost": "https://ap23.uc.osg-htc.org:1095", "origins": [{"auth_endpoint": "ap23.uc.osg-htc.org:1095", "endpoint": "ap23.uc.osg-htc.org:1094", "resource": "UChicago_OSGConnect_ap23"}], "path": "/ospool/uc-shared/project", "readhttps": true, "scitokens": [{"base_path": ["/ospool/uc-shared/project"], "issuer": "https://osg-htc.org/ospool/uc-shared", "restricted_path": []}, {"base_path": ["/ospool/ap22", "/ospool/ap22/data", "/ospool/uc-shared/project"], "issuer": "https://ap22.uc.osg-htc.org:1094/ospool/ap22", "restricted_path": []}], "usetokenonread": true, "writebackhost": "https://ap23.uc.osg-htc.org:1095"}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "osdf-public.tempest.uchicago.edu:1095", "endpoint": "osdf-public.tempest.uchicago.edu:1094", "resource": "UChicago_OSGConnect_Public_Origin"}], "path": "/ospool/uc-shared/public", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}], "credential_generation": null, "dirlisthost": "https://ap1-origin.facility.path-cc.io:1095", "origins": [{"auth_endpoint": "ap1-origin.facility.path-cc.io:1095", "endpoint": "ap1-origin.facility.path-cc.io:1094", "resource": "CHTC-PATH-ORIGIN"}], "path": "/path-facility/data", "readhttps": true, "scitokens": [{"base_path": ["/path-facility/data", "/path-facility/development/data/", "/path-facility/projects", "/path-facility/development/projects/"], "issuer": "https://path-cc.io", "restricted_path": []}], "usetokenonread": true, "writebackhost": "https://ap1-origin.facility.path-cc.io:1095"}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": "https://path-origin.osgdev.chtc.io:1095", "origins": [{"auth_endpoint": "path-origin.osgdev.chtc.io:1095", "endpoint": "path-origin.osgdev.chtc.io:1094", "resource": "CHTC-ITB-PATH-ORIGIN"}], "path": "/path-facility/development/data", "readhttps": true, "scitokens": [{"base_path": ["/path-facility/data", "/path-facility/development/data/", "/path-facility/projects", "/path-facility/development/projects/"], "issuer": "https://path-cc.io", "restricted_path": []}], "usetokenonread": true, "writebackhost": "https://path-origin.osgdev.chtc.io:1095"}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": "https://path-origin.osgdev.chtc.io:1095", "origins": [{"auth_endpoint": "path-origin.osgdev.chtc.io:1095", "endpoint": "path-origin.osgdev.chtc.io:1094", "resource": "CHTC-ITB-PATH-ORIGIN"}], "path": "/path-facility/development/projects", "readhttps": true, "scitokens": [{"base_path": ["/path-facility/data", "/path-facility/development/data/", "/path-facility/projects", "/path-facility/development/projects/"], "issuer": "https://path-cc.io", "restricted_path": []}], "usetokenonread": true, "writebackhost": "https://path-origin.osgdev.chtc.io:1095"}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}], "credential_generation": null, "dirlisthost": "https://ap1-origin.facility.path-cc.io:1095", "origins": [{"auth_endpoint": "ap1-origin.facility.path-cc.io:1095", "endpoint": "ap1-origin.facility.path-cc.io:1094", "resource": "CHTC-PATH-ORIGIN"}], "path": "/path-facility/projects", "readhttps": true, "scitokens": [{"base_path": ["/path-facility/data", "/path-facility/development/data/", "/path-facility/projects", "/path-facility/development/projects/"], "issuer": "https://path-cc.io", "restricted_path": []}], "usetokenonread": true, "writebackhost": "https://ap1-origin.facility.path-cc.io:1095"}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "osdforigin.fnal.gov:1095", "endpoint": "osdforigin.fnal.gov:1094", "resource": "FNAL_OSDF_ORIGIN"}], "path": "/pnfs/fnal.gov", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": "https://s3-us-east-1.osgdev.chtc.io:1095", "origins": [{"auth_endpoint": "s3-us-east-1.osgdev.chtc.io:1095", "endpoint": "s3-us-east-1.osgdev.chtc.io:1094", "resource": "CHTC-ITB-S3-AWS-EAST-ORIGIN"}], "path": "/s3.amazonaws.com/us-east-1", "readhttps": false, "scitokens": [{"base_path": ["/ospool/PROTECTED", "/s3.amazonaws.com/us-east-1", "/s3.amazonaws.com/us-west-1"], "issuer": "https://osg-htc.org/ospool", "restricted_path": []}], "usetokenonread": false, "writebackhost": "https://s3-us-east-1.osgdev.chtc.io:1095"}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": "https://s3-us-west-1.osgdev.chtc.io:1095", "origins": [{"auth_endpoint": "s3-us-west-1.osgdev.chtc.io:1095", "endpoint": "s3-us-west-1.osgdev.chtc.io:1094", "resource": "CHTC-ITB-S3-AWS-WEST-ORIGIN"}], "path": "/s3.amazonaws.com/us-west-1", "readhttps": false, "scitokens": [{"base_path": ["/ospool/PROTECTED", "/s3.amazonaws.com/us-east-1", "/s3.amazonaws.com/us-west-1"], "issuer": "https://osg-htc.org/ospool", "restricted_path": []}], "usetokenonread": false, "writebackhost": "https://s3-us-west-1.osgdev.chtc.io:1095"}, {"caches": [], "credential_generation": null, "dirlisthost": null, "origins": [], "path": "/store", "readhttps": true, "scitokens": [{"base_path": ["/"], "issuer": "https://scitokens.org/cms", "restricted_path": ["/store"]}], "usetokenonread": true, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "sdsc-origin.nationalresearchplatform.org:1095", "endpoint": "sdsc-origin.nationalresearchplatform.org:1094", "resource": "SDSC_NRP_OSDF_ORIGIN"}], "path": "/ucsd/physics", "readhttps": false, "scitokens": [{"base_path": ["/ucsd/physics"], "issuer": "https://t.nationalresearchplatform.org/ucsdphysics", "restricted_path": []}], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "fiona.its.hawaii.edu:1095", "endpoint": "fiona.its.hawaii.edu:1094", "resource": "ITC_OSDF_ORIGIN"}], "path": "/uhawaii/its", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "koastore-osdf.its.hawaii.edu:1095", "endpoint": "koastore-osdf.its.hawaii.edu:1094", "resource": "KOASTORE_OSDF_ORIGIN"}], "path": "/uhawaii/koa/public", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "prp01.ifa.hawaii.edu:1095", "endpoint": "prp01.ifa.hawaii.edu:1094", "resource": "IFAHURP_OSDF_ORIGIN"}], "path": "/uhawaii/manoa/ifa", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [], "path": "/user", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "amst-osdf-xcache01.es.net:8443", "endpoint": "amst-osdf-xcache01.es.net:8000", "resource": "AMSTERDAM_ESNET_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8443", "endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8000", "resource": "CARDIFF_UK_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.ligo.caltech.edu:8443", "endpoint": "stashcache.ligo.caltech.edu:8000", "resource": "CIT_LIGO_STASHCACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "lond-osdf-xcache01.es.net:8443", "endpoint": "lond-osdf-xcache01.es.net:8000", "resource": "LONDON_ESNET_OSDF_CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "ligo.hpc.swin.edu.au:8443", "endpoint": "ligo.hpc.swin.edu.au:8000", "resource": "SUT-STASHCACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}], "credential_generation": null, "dirlisthost": null, "origins": [{"auth_endpoint": "origin.ligo.caltech.edu:1095", "endpoint": "origin.ligo.caltech.edu:1094", "resource": "CIT_LIGO_ORIGIN"}, {"auth_endpoint": "xrootd-local.unl.edu:1094", "endpoint": "xrootd-local.unl.edu:1094", "resource": "LIGO-StashCache-Origin"}], "path": "/user/ligo", "readhttps": true, "scitokens": [{"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://cilogon.org/igwn", "restricted_path": []}, {"base_path": ["/user/ligo", "/igwn", "/igwn/cit", "/igwn/test", "/igwn/test-write"], "issuer": "https://test.cilogon.org/igwn", "restricted_path": []}], "usetokenonread": true, "writebackhost": null}, {"caches": [], "credential_generation": null, "dirlisthost": null, "origins": [], "path": "/xenon/PROTECTED", "readhttps": true, "scitokens": [], "usetokenonread": false, "writebackhost": null}, {"caches": [{"auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", "resource": "BOISE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "endpoint": "osdf-uw-cache.svc.osg-htc.org:8443", "resource": "CHTC_PELICAN_CACHE"}, {"auth_endpoint": "sc-cache.chtc.wisc.edu:8443", "endpoint": "sc-cache.chtc.wisc.edu:8443", "resource": "CHTC_STASHCACHE_CACHE"}, {"auth_endpoint": "stash-cache.osg.chtc.io:8443", "endpoint": "stash-cache.osg.chtc.io:8000", "resource": "CHTC_TIGER_CACHE"}, {"auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", "resource": "CINCINNATI_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", "resource": "ComputeCanada-Cedar-Cache"}, {"auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", "resource": "DENVER_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stash.farm.particle.cz:8443", "endpoint": "stash.farm.particle.cz:8000", "resource": "FZU_STASH"}, {"auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", "endpoint": "osg-gftp2.pace.gatech.edu:8000", "resource": "Georgia_Tech_PACE_GridFTP2"}, {"auth_endpoint": "dtn-pas.hous.nrp.internet2.edu:8443", "endpoint": "dtn-pas.hous.nrp.internet2.edu:8000", "resource": "HOUSTON2_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "stashcache.jinr.ru:8443", "endpoint": "stashcache.jinr.ru:8000", "resource": "JINR_STASHCACHE"}, {"auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", "resource": "LEHIGH-HAWK-OSDF-CACHE"}, {"auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", "endpoint": "unl-cache.nationalresearchplatform.org:8000", "resource": "NEBRASKA_NRP_OSDF_CACHE"}, {"auth_endpoint": "xcachevirgo.pic.es:8443", "endpoint": "xcachevirgo.pic.es:8000", "resource": "PIC_STASHCACHE_CACHE"}, {"auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", "resource": "SDSC_NRP_OSDF_CACHE"}, {"auth_endpoint": "singapore.nationalresearchplatform.org:8443", "endpoint": "singapore.nationalresearchplatform.org:8000", "resource": "SINGAPORE_INTERNET2_OSDF_CACHE"}, {"auth_endpoint": "osdf-cache.sprace.org.br:8443", "endpoint": "osdf-cache.sprace.org.br:8000", "resource": "SPRACE_OSDF_CACHE"}, {"auth_endpoint": "its-condor-xrootd1.syr.edu:8443", "endpoint": "its-condor-xrootd1.syr.edu:8000", "resource": "SU_STASHCACHE_CACHE"}, {"auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Chicago"}, {"auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Houston"}, {"auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", "resource": "Stashcache-KISTI"}, {"auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Kansas"}, {"auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Manhattan"}, {"auth_endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8443", "endpoint": "osg-sunnyvale-stashcache.nrp.internet2.edu:8000", "resource": "Stashcache-Sunnyvale"}, {"auth_endpoint": "stashcache.t2.ucsd.edu:8443", "endpoint": "stashcache.t2.ucsd.edu:8000", "resource": "Stashcache-UCSD"}, {"auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", "resource": "UKI-SCOTGRID-ECDF-STASHCACHE"}], "credential_generation": null, "dirlisthost": null, "origins": [], "path": "/xenon/PUBLIC", "readhttps": false, "scitokens": [], "usetokenonread": false, "writebackhost": null}]} diff --git a/namespaces/resources/namespaces.json b/namespaces/resources/namespaces.json deleted file mode 100644 index 1998615db..000000000 --- a/namespaces/resources/namespaces.json +++ /dev/null @@ -1,5931 +0,0 @@ -{ - "caches": [ - { - "auth_endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8443", - "endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8000", - "resource": "CARDIFF_UK_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "amst-osdf-xcache01.es.net:8443", - "endpoint": "amst-osdf-xcache01.es.net:8000", - "resource": "AMSTERDAM_ESNET_OSDF_CACHE" - }, - { - "auth_endpoint": "lond-osdf-xcache01.es.net:8443", - "endpoint": "lond-osdf-xcache01.es.net:8000", - "resource": "LONDON_ESNET_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "ds-914.cr.cnaf.infn.it:8443", - "endpoint": "ds-914.cr.cnaf.infn.it:8000", - "resource": "T1_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "ligo.hpc.swin.edu.au:8443", - "endpoint": "ligo.hpc.swin.edu.au:8000", - "resource": "SUT-STASHCACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "namespaces": [ - { - "caches": [], - "credential_generation": null, - "dirlisthost": null, - "path": "/store", - "readhttps": true, - "usetokenonread": true, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": "http://et-origin.cism.ucl.ac.be:1094", - "path": "/et-gw/PUBLIC", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/pnfs/fnal.gov", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/chtc/PUBLIC", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/chtc/itb/helm-origin/PUBLIC", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/chtc/itb/helm-origin/PROTECTED", - "readhttps": true, - "usetokenonread": true, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": { - "base_path": "/chtc", - "issuer": "https://chtc.cs.wisc.edu", - "max_scope_depth": 3, - "strategy": "OAuth2", - "vault_issuer": null, - "vault_server": null - }, - "dirlisthost": "https://origin-auth2000.chtc.wisc.edu:1095", - "path": "/chtc", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://origin-auth2000.chtc.wisc.edu:1095" - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/data.lhncbc.nlm.nih.gov/public", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/Gluex", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/gluex", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/hcc/focusday", - "readhttps": true, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/hcc/PUBLIC", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/hcc/PROTECTED", - "readhttps": true, - "usetokenonread": true, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/icecube/PUBLIC", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/icecube/production/nrpnb/protected", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://unl-origin.nationalresearchplatform.org:1095" - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/icecube/production/mghpcc/protected/", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://mghpcc-origin.nationalresearchplatform.org:1095" - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/icecube/production/sdsc/protected/", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "http://sdsc-origin.nationalresearchplatform.org:1095" - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/jlab", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/eic", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8443", - "endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8000", - "resource": "CARDIFF_UK_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "ds-914.cr.cnaf.infn.it:8443", - "endpoint": "ds-914.cr.cnaf.infn.it:8000", - "resource": "T1_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "ligo.hpc.swin.edu.au:8443", - "endpoint": "ligo.hpc.swin.edu.au:8000", - "resource": "SUT-STASHCACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/user/ligo", - "readhttps": true, - "usetokenonread": true, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8443", - "endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8000", - "resource": "CARDIFF_UK_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "ds-914.cr.cnaf.infn.it:8443", - "endpoint": "ds-914.cr.cnaf.infn.it:8000", - "resource": "T1_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "ligo.hpc.swin.edu.au:8443", - "endpoint": "ligo.hpc.swin.edu.au:8000", - "resource": "SUT-STASHCACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/igwn/virgo", - "readhttps": true, - "usetokenonread": true, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8443", - "endpoint": "cf-ac-uk-cache.nationalresearchplatform.org:8000", - "resource": "CARDIFF_UK_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "amst-osdf-xcache01.es.net:8443", - "endpoint": "amst-osdf-xcache01.es.net:8000", - "resource": "AMSTERDAM_ESNET_OSDF_CACHE" - }, - { - "auth_endpoint": "lond-osdf-xcache01.es.net:8443", - "endpoint": "lond-osdf-xcache01.es.net:8000", - "resource": "LONDON_ESNET_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "ds-914.cr.cnaf.infn.it:8443", - "endpoint": "ds-914.cr.cnaf.infn.it:8000", - "resource": "T1_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "ligo.hpc.swin.edu.au:8443", - "endpoint": "ligo.hpc.swin.edu.au:8000", - "resource": "SUT-STASHCACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/gwdata", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/nrp", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/NSG/PUBLIC", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/user", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/osgconnect/public", - "readhttps": false, - "usetokenonread": false, - "writebackhost": "https://stash-xrd.osgconnect.net:1094" - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/osgconnect/protected", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://stash-xrd.osgconnect.net:1094" - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/osgconnect/collab", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": { - "base_path": null, - "issuer": "https://osg-htc.org/ospool", - "max_scope_depth": 4, - "strategy": "OAuth2", - "vault_issuer": null, - "vault_server": null - }, - "dirlisthost": "https://origin-auth2001.chtc.wisc.edu:1095", - "path": "/ospool/PROTECTED", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://origin-auth2001.chtc.wisc.edu:1095" - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": "https://s3-us-east-1.osgdev.chtc.io:1095", - "path": "/s3.amazonaws.com/us-east-1", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://s3-us-east-1.osgdev.chtc.io:1095" - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": "https://s3-us-west-1.osgdev.chtc.io:1095", - "path": "/s3.amazonaws.com/us-west-1", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://s3-us-west-1.osgdev.chtc.io:1095" - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/osdftest", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": { - "base_path": null, - "issuer": "https://osg-htc.org/ospool", - "max_scope_depth": 4, - "strategy": "OAuth2", - "vault_issuer": null, - "vault_server": null - }, - "dirlisthost": "https://ap20.uc.osg-htc.org:1094", - "path": "/ospool/ap20/data", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://ap20.uc.osg-htc.org:1094" - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": { - "base_path": null, - "issuer": "https://osg-htc.org/ospool", - "max_scope_depth": 4, - "strategy": "OAuth2", - "vault_issuer": null, - "vault_server": null - }, - "dirlisthost": "https://ap21.uc.osg-htc.org:1094", - "path": "/ospool/ap21/data", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://ap21.uc.osg-htc.org:1094" - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": { - "base_path": null, - "issuer": "https://osg-htc.org/ospool", - "max_scope_depth": 4, - "strategy": "OAuth2", - "vault_issuer": null, - "vault_server": null - }, - "dirlisthost": "https://ap22.uc.osg-htc.org:1094", - "path": "/ospool/ap22/data", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://ap22.uc.osg-htc.org:1094" - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": { - "base_path": null, - "issuer": "https://osg-htc.org/ospool/uc-shared", - "max_scope_depth": 4, - "strategy": "OAuth2", - "vault_issuer": null, - "vault_server": null - }, - "dirlisthost": "https://ap23.uc.osg-htc.org:1095", - "path": "/ospool/uc-shared", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://ap23.uc.osg-htc.org:1095" - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": "https://ap23.uc.osg-htc.org:1094", - "path": "/ospool/uc-shared/user", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": "https://ap1-origin.facility.path-cc.io:1095", - "path": "/path-facility/data", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://ap1-origin.facility.path-cc.io:1095" - }, - { - "caches": [ - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": "https://ap1-origin.facility.path-cc.io:1095", - "path": "/path-facility/projects", - "readhttps": true, - "usetokenonread": true, - "writebackhost": "https://ap1-origin.facility.path-cc.io:1095" - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/uhawaii/its", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/uhawaii/manoa/ifa", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/VDC/PUBLIC", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [], - "credential_generation": null, - "dirlisthost": null, - "path": "/xenon/PROTECTED", - "readhttps": true, - "usetokenonread": false, - "writebackhost": null - }, - { - "caches": [ - { - "auth_endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8443", - "endpoint": "osg-stash-sfu-computecanada-ca.nationalresearchplatform.org:8000", - "resource": "ComputeCanada-Cedar-Cache" - }, - { - "auth_endpoint": "osg-gftp2.pace.gatech.edu:8443", - "endpoint": "osg-gftp2.pace.gatech.edu:8000", - "resource": "Georgia_Tech_PACE_GridFTP2" - }, - { - "auth_endpoint": "xcachevirgo.pic.es:8443", - "endpoint": "xcachevirgo.pic.es:8000", - "resource": "PIC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash.farm.particle.cz:8443", - "endpoint": "stash.farm.particle.cz:8000", - "resource": "FZU_STASH" - }, - { - "auth_endpoint": "dtn-pas.bois.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.bois.nrp.internet2.edu:8000", - "resource": "BOISE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-chicago-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Chicago" - }, - { - "auth_endpoint": "dtn-pas.cinc.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.cinc.nrp.internet2.edu:8000", - "resource": "CINCINNATI_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "dtn-pas.denv.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.denv.nrp.internet2.edu:8000", - "resource": "DENVER_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-kansas-city-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Kansas" - }, - { - "auth_endpoint": "osg-houston-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-houston-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Houston" - }, - { - "auth_endpoint": "dtn-pas.jack.nrp.internet2.edu:8443", - "endpoint": "dtn-pas.jack.nrp.internet2.edu:8000", - "resource": "JACKSONVILLE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8443", - "endpoint": "osg-new-york-stashcache.nrp.internet2.edu:8000", - "resource": "Stashcache-Manhattan" - }, - { - "auth_endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8443", - "endpoint": "osg-sunnyvale-stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-Sunnyvale" - }, - { - "auth_endpoint": "stashcache.jinr.ru:8443", - "endpoint": "stashcache.jinr.ru:8000", - "resource": "JINR_STASHCACHE" - }, - { - "auth_endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8443", - "endpoint": "daejeon-kreonet-net.nationalresearchplatform.org:8000", - "resource": "Stashcache-KISTI" - }, - { - "auth_endpoint": "osg-hawk-cache.cc.lehigh.edu:8443", - "endpoint": "osg-hawk-cache.cc.lehigh.edu:8000", - "resource": "LEHIGH-HAWK-OSDF-CACHE" - }, - { - "auth_endpoint": "mghpcc-cache.nationalresearchplatform.org:8443", - "endpoint": "mghpcc-cache.nationalresearchplatform.org:8000", - "resource": "MGHPCC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "singapore.nationalresearchplatform.org:8443", - "endpoint": "singapore.nationalresearchplatform.org:8000", - "resource": "SINGAPORE_INTERNET2_OSDF_CACHE" - }, - { - "auth_endpoint": "its-condor-xrootd1.syr.edu:8443", - "endpoint": "its-condor-xrootd1.syr.edu:8000", - "resource": "SU_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "fiona-r-uva.vlan7.uvalight.net:8443", - "endpoint": "fiona-r-uva.vlan7.uvalight.net:8000", - "resource": "Stashcache-UofA" - }, - { - "auth_endpoint": "sdsc-cache.nationalresearchplatform.org:8443", - "endpoint": "sdsc-cache.nationalresearchplatform.org:8000", - "resource": "SDSC_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "stashcache.t2.ucsd.edu:8443", - "endpoint": "stashcache.t2.ucsd.edu:8000", - "resource": "Stashcache-UCSD" - }, - { - "auth_endpoint": "stashcache.uchicago.slateci.net:8443", - "endpoint": "stashcache.uchicago.slateci.net:8000", - "resource": "UCHICAGO_TEST_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stashcache.edi.scotgrid.ac.uk:8443", - "endpoint": "stashcache.edi.scotgrid.ac.uk:8000", - "resource": "UKI-SCOTGRID-ECDF-STASHCACHE" - }, - { - "auth_endpoint": "unl-cache.nationalresearchplatform.org:8443", - "endpoint": "unl-cache.nationalresearchplatform.org:8000", - "resource": "NEBRASKA_NRP_OSDF_CACHE" - }, - { - "auth_endpoint": "sc-cache.chtc.wisc.edu:8443", - "endpoint": "sc-cache.chtc.wisc.edu:8000", - "resource": "CHTC_STASHCACHE_CACHE" - }, - { - "auth_endpoint": "stash-cache.osg.chtc.io:8443", - "endpoint": "stash-cache.osg.chtc.io:8000", - "resource": "CHTC_TIGER_CACHE" - } - ], - "credential_generation": null, - "dirlisthost": null, - "path": "/xenon/PUBLIC", - "readhttps": false, - "usetokenonread": false, - "writebackhost": null - } - ] -} diff --git a/oauth2/oauth2.go b/oauth2/oauth2.go index a13449ed7..1d7fcd40a 100644 --- a/oauth2/oauth2.go +++ b/oauth2/oauth2.go @@ -29,8 +29,8 @@ import ( "github.com/pkg/errors" log "github.com/sirupsen/logrus" - config "github.com/pelicanplatform/pelican/config" - namespaces "github.com/pelicanplatform/pelican/namespaces" + "github.com/pelicanplatform/pelican/config" + "github.com/pelicanplatform/pelican/server_structs" ) func deviceCodeSupported(grantTypes *[]string) bool { @@ -66,8 +66,7 @@ func trimPath(pathName string, maxDepth int) string { return "/" + path.Join(pathComponents[0:maxLength]...) } -func AcquireToken(issuerUrl string, entry *config.PrefixEntry, credentialGen *namespaces.CredentialGeneration, osdfPath string, opts config.TokenGenerationOpts) (*config.TokenEntry, error) { - +func AcquireToken(issuerUrl string, entry *config.PrefixEntry, dirResp server_structs.DirectorResponse, osdfPath string, opts config.TokenGenerationOpts) (*config.TokenEntry, error) { if fileInfo, _ := os.Stdout.Stat(); (len(os.Getenv(config.GetPreferredPrefix().String()+"_SKIP_TERMINAL_CHECK")) == 0) && ((fileInfo.Mode() & os.ModeCharDevice) == 0) { return nil, errors.New("This program must be run in a terminal to acquire a new token") } @@ -85,18 +84,17 @@ func AcquireToken(issuerUrl string, entry *config.PrefixEntry, credentialGen *na osdfPath = path.Dir(osdfPath) pathCleaned := path.Clean(osdfPath)[len(entry.Prefix):] - // The credential generation object provides various hints and guidance about how + // The credential generation/issuer objects provide various hints and guidance about how // to best create the OAuth2 credential - if credentialGen != nil { - // Tweak the relative path the issuer starts with - if credentialGen.BasePath != nil && len(*credentialGen.BasePath) > 0 { - pathCleaned = path.Clean(osdfPath)[len(*credentialGen.BasePath):] + if len(dirResp.XPelTokGenHdr.Issuers) != 0 { + if len(dirResp.XPelTokGenHdr.BasePaths) > 0 { + pathCleaned = path.Clean(osdfPath)[len(dirResp.XPelTokGenHdr.BasePaths[0]):] } + } - // Potentially increase the coarseness of the token - if opts.Operation != config.TokenSharedWrite && opts.Operation != config.TokenSharedRead && credentialGen.MaxScopeDepth != nil && *credentialGen.MaxScopeDepth >= 0 { - pathCleaned = trimPath(pathCleaned, *credentialGen.MaxScopeDepth) - } + // Potentially increase the coarseness of the token + if opts.Operation != config.TokenSharedWrite && opts.Operation != config.TokenSharedRead && dirResp.XPelTokGenHdr.MaxScopeDepth > 0 { + pathCleaned = trimPath(pathCleaned, (int)((dirResp.XPelTokGenHdr.MaxScopeDepth))) } var storageScope string @@ -111,9 +109,11 @@ func AcquireToken(issuerUrl string, entry *config.PrefixEntry, credentialGen *na oauth2Config := Config{ ClientID: entry.ClientID, ClientSecret: entry.ClientSecret, - Endpoint: Endpoint{AuthURL: issuerInfo.AuthURL, + Endpoint: Endpoint{ + AuthURL: issuerInfo.AuthURL, TokenURL: issuerInfo.TokenURL, - DeviceAuthURL: issuerInfo.DeviceAuthURL}, + DeviceAuthURL: issuerInfo.DeviceAuthURL, + }, Scopes: []string{"wlcg", "offline_access", storageScope}, } diff --git a/server_structs/director.go b/server_structs/director.go index fe1545ad0..7167f6c09 100644 --- a/server_structs/director.go +++ b/server_structs/director.go @@ -20,8 +20,15 @@ package server_structs import ( "encoding/json" + "net/http" "net/url" + "strconv" + "strings" "sync" + + "github.com/pkg/errors" + + "github.com/pelicanplatform/pelican/utils" ) type ( @@ -145,8 +152,131 @@ type ( RegistrationEndpoint string `json:"registration_endpoint,omitempty"` DeviceEndpoint string `json:"device_authorization_endpoint,omitempty"` } + + XPelHeader interface { + GetName() string + ParseRawHeader(*http.Response) error + } + + XPelAuth struct { + Issuers []*url.URL + } + + XPelNs struct { + Namespace string // Federation Prefix path + RequireToken bool // Whether or not a token is required for read operations + CollectionsUrl *url.URL + } + + XPelTokGen struct { + Issuers []*url.URL + MaxScopeDepth uint + Strategy StrategyType + BasePaths []string + VaultServer *url.URL + } + + DirectorResponse struct { + ObjectServers []*url.URL // List of servers provided in Link header + Location *url.URL // URL content of the location header + XPelAuthHdr XPelAuth + XPelNsHdr XPelNs + XPelTokGenHdr XPelTokGen + } ) +func (x XPelNs) GetName() string { + return "X-Pelican-Namespace" +} +func (x *XPelNs) ParseRawResponse(resp *http.Response) error { + raw := resp.Header.Values(x.GetName()) + if len(raw) == 0 { + return errors.Errorf("No %s header found.", x.GetName()) + } + keyDict := utils.HeaderParser(raw[0]) + x.Namespace = keyDict["namespace"] + x.RequireToken, _ = strconv.ParseBool(keyDict["require-token"]) + if keyDict["collections-url"] != "" { + x.CollectionsUrl, _ = url.Parse(keyDict["collections-url"]) + } + return nil +} + +func (x XPelAuth) GetName() string { + return "X-Pelican-Authorization" +} +func (x *XPelAuth) ParseRawResponse(resp *http.Response) error { + // If the director provides an auth header, raw will have an array of length 1. + raw := resp.Header.Values(x.GetName()) + if len(raw) > 0 { + x.Issuers = make([]*url.URL, 0) + // clean up the string and split it by commas to fetch each issuer. Can't use + // utils.HeaderParser, because we don't have unique keys here. + cleaned := strings.ReplaceAll(raw[0], " ", "") + issuers := strings.Split(cleaned, ",") + for _, issuer := range issuers { + issuerUrlStr := strings.TrimPrefix(issuer, "issuer=") + issuerUrl, err := url.Parse(issuerUrlStr) + if err != nil { + return errors.Errorf("Failed to parse issuer URL %s from Director's %s header: %v", issuerUrlStr, x.GetName(), err) + } + x.Issuers = append(x.Issuers, issuerUrl) + } + } + return nil +} + +func (x XPelTokGen) GetName() string { + return "X-Pelican-Token-Generation" +} +func (x *XPelTokGen) ParseRawResponse(resp *http.Response) error { + raw := resp.Header.Values(x.GetName()) + if len(raw) > 0 { + // Parse issuer, for now assuming a single value but eventually may be multiple + x.Issuers = make([]*url.URL, 0) + keyDict := utils.HeaderParser(raw[0]) + issuerUrl, err := url.Parse(keyDict["issuer"]) + if err != nil { + return errors.Errorf("Failed to parse issuer URL %s from Director's %s header: %v", keyDict["issuer"], x.GetName(), err) + } + x.Issuers = append(x.Issuers, issuerUrl) + + // Parse scope depth + maxScopeDepth, err := strconv.ParseUint(keyDict["max-scope-depth"], 10, 32) + if err != nil { + return errors.Errorf("Failed to parse max-scope-depth %s from Director's %s header: %v", keyDict["max-scope-depth"], x.GetName(), err) + } + x.MaxScopeDepth = uint(maxScopeDepth) + + // Parse strategy + strategy, exists := keyDict["strategy"] + if !exists { + return errors.Errorf("No credential generation strategy found in Director's %s header", x.GetName()) + } + if !IsValidStrategy(strategy) { + return errors.Errorf("Invalid strategy '%s' from Director's %s header", strategy, x.GetName()) + } + x.Strategy = StrategyType(strategy) + + // Parse base path(s) -- Right now we assume a single value, although this may eventually change. + basePath, exists := keyDict["base-path"] + if exists { + x.BasePaths = append(x.BasePaths, basePath) + } + + // Handle potential for vault server in header + vaultServer, exists := keyDict["vault-server"] + if exists { + vaultServerUrl, err := url.Parse(vaultServer) + if err != nil { + return errors.Errorf("Failed to parse vault server URL %s from Director's %s header: %v", vaultServer, x.GetName(), err) + } + x.VaultServer = vaultServerUrl + } + } + return nil +} + const ( OAuthStrategy StrategyType = "OAuth2" VaultStrategy StrategyType = "Vault" @@ -160,6 +290,15 @@ const ( AdaptiveType SortType = "adaptive" ) +func IsValidStrategy(strategy string) bool { + switch StrategyType(strategy) { + case OAuthStrategy, VaultStrategy: + return true + default: + return false + } +} + func (ad *ServerAd) MarshalJSON() ([]byte, error) { type Alias ServerAd return json.Marshal(&struct { diff --git a/server_structs/director_test.go b/server_structs/director_test.go index df90eadaa..bd7000cfc 100644 --- a/server_structs/director_test.go +++ b/server_structs/director_test.go @@ -19,9 +19,12 @@ package server_structs import ( + "fmt" + "net/http" "net/url" "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -148,5 +151,134 @@ func TestConversion(t *testing.T) { OAdConv := ConvertOriginAdV1ToV2(oAdV1) require.Equal(t, oAdV2, OAdConv) +} + +func TestValidTokenStrategy(t *testing.T) { + t.Run("ValidOAuth2Strategy", func(t *testing.T) { + require.True(t, IsValidStrategy("OAuth2")) + }) + + t.Run("ValidVaultStrategy", func(t *testing.T) { + require.True(t, IsValidStrategy("Vault")) + }) + + t.Run("InvalidStrategies", func(t *testing.T) { + require.False(t, IsValidStrategy("oauth2")) + require.False(t, IsValidStrategy("vault")) + require.False(t, IsValidStrategy("foo")) + }) +} + +func TestXPelNsParsing(t *testing.T) { + t.Run("ParseValidRawResponse", func(t *testing.T) { + xPelNs := XPelNs{} + err := xPelNs.ParseRawResponse(&http.Response{ + Header: map[string][]string{ + "X-Pelican-Namespace": {"namespace=foo, require-token=true, collections-url=https://collections-url.org"}, + }, + }) + assert.NoError(t, err) + assert.Equal(t, "foo", xPelNs.Namespace) + assert.True(t, xPelNs.RequireToken) + assert.Equal(t, "https://collections-url.org", xPelNs.CollectionsUrl.String()) + }) + + t.Run("ParseMissingCollectionsUrl", func(t *testing.T) { // Signifies origins that don't enable listings + xPelNs := XPelNs{} + err := xPelNs.ParseRawResponse(&http.Response{ + Header: map[string][]string{ + "X-Pelican-Namespace": {"namespace=foo, require-token=true"}, + }, + }) + assert.NoError(t, err) + assert.Equal(t, "foo", xPelNs.Namespace) + assert.True(t, xPelNs.RequireToken) + assert.Nil(t, xPelNs.CollectionsUrl) + }) + + t.Run("ParseMissingHeader", func(t *testing.T) { + xPelNs := XPelNs{} + err := xPelNs.ParseRawResponse(&http.Response{ + Header: map[string][]string{ + "X-Pelican-foo": {"bar"}, + }, + }) + assert.Error(t, err) + assert.Contains(t, err.Error(), fmt.Sprintf("No %s header found.", xPelNs.GetName())) + }) +} + +func TestXPelAuthParsing(t *testing.T) { + t.Run("ParseValidRawResponse", func(t *testing.T) { + xPelAuth := XPelAuth{} + err := xPelAuth.ParseRawResponse(&http.Response{ + Header: map[string][]string{ + "X-Pelican-Authorization": {"issuer=https://issuer1.com, issuer=https://issuer2.com"}, + }, + }) + assert.NoError(t, err) + assert.Len(t, xPelAuth.Issuers, 2) + assert.Equal(t, "https://issuer1.com", xPelAuth.Issuers[0].String()) + assert.Equal(t, "https://issuer2.com", xPelAuth.Issuers[1].String()) + }) + + t.Run("ParseMissingHeader", func(t *testing.T) { + xPelAuth := XPelAuth{} + err := xPelAuth.ParseRawResponse(&http.Response{ + Header: map[string][]string{ + "X-Pelican-foo": {"foo"}, + }, + }) + assert.NoError(t, err) + assert.Equal(t, 0, len(xPelAuth.Issuers)) + }) +} +func TestXPelTokGenParsing(t *testing.T) { + t.Run("ParseValidRawResponse", func(t *testing.T) { + xPelTokGen := XPelTokGen{} + err := xPelTokGen.ParseRawResponse(&http.Response{ + Header: map[string][]string{ + "X-Pelican-Token-Generation": {"strategy=OAuth2, max-scope-depth=3, issuer=https://issuer.com, base-path=/foo/bar"}, + }, + }) + assert.NoError(t, err) + assert.Equal(t, OAuthStrategy, xPelTokGen.Strategy) + assert.Equal(t, uint(3), xPelTokGen.MaxScopeDepth) + assert.Len(t, xPelTokGen.Issuers, 1) + assert.Equal(t, "https://issuer.com", xPelTokGen.Issuers[0].String()) + // no test for multiple base paths yet because the director doesn't implement it + assert.Len(t, xPelTokGen.BasePaths, 1) + assert.Equal(t, "/foo/bar", xPelTokGen.BasePaths[0]) + }) + + t.Run("ParseMissingBasePath", func(t *testing.T) { + xPelTokGen := XPelTokGen{} + err := xPelTokGen.ParseRawResponse(&http.Response{ + Header: map[string][]string{ + "X-Pelican-Token-Generation": {"strategy=OAuth2, max-scope-depth=3, issuer=https://issuer.com"}, + }, + }) + assert.NoError(t, err) + assert.Equal(t, OAuthStrategy, xPelTokGen.Strategy) + assert.Equal(t, uint(3), xPelTokGen.MaxScopeDepth) + assert.Len(t, xPelTokGen.Issuers, 1) + assert.Equal(t, "https://issuer.com", xPelTokGen.Issuers[0].String()) + // no test for multiple base paths yet because the director doesn't implement it + assert.Len(t, xPelTokGen.BasePaths, 0) + }) + + t.Run("ParseMissingHeader", func(t *testing.T) { + xPelTokGen := XPelTokGen{} + err := xPelTokGen.ParseRawResponse(&http.Response{ + Header: map[string][]string{ + "X-Pelican-foo": {"foo"}, + }, + }) + assert.NoError(t, err) + assert.Equal(t, StrategyType(""), xPelTokGen.Strategy) + assert.Equal(t, uint(0), xPelTokGen.MaxScopeDepth) + assert.Len(t, xPelTokGen.Issuers, 0) + assert.Len(t, xPelTokGen.BasePaths, 0) + }) } From 751b3d52c826e37b4eac0dd9d024a3f61d6f6994 Mon Sep 17 00:00:00 2001 From: Justin Hiemstra Date: Wed, 7 Aug 2024 12:55:55 +0000 Subject: [PATCH 2/5] Fixup missed linter items --- client/handle_http.go | 20 ++++++++++---------- client/main_test.go | 1 - 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/client/handle_http.go b/client/handle_http.go index 6aa16454d..18d304310 100644 --- a/client/handle_http.go +++ b/client/handle_http.go @@ -1101,16 +1101,16 @@ func (tc *TransferClient) NewTransferJob(ctx context.Context, remoteUrl *url.URL copyUrl := *remoteUrl // Make a copy of the input URL to avoid concurrent issues. tj = &TransferJob{ prefObjServers: tc.prefObjServers, - recursive: recursive, - localPath: localPath, - remoteURL: ©Url, - callback: tc.callback, - skipAcquire: tc.skipAcquire, - tokenLocation: tc.tokenLocation, - upload: upload, - uuid: id, - token: tc.token, - project: project, + recursive: recursive, + localPath: localPath, + remoteURL: ©Url, + callback: tc.callback, + skipAcquire: tc.skipAcquire, + tokenLocation: tc.tokenLocation, + upload: upload, + uuid: id, + token: tc.token, + project: project, } mergeCancel := func(ctx1, ctx2 context.Context) (context.Context, context.CancelFunc) { diff --git a/client/main_test.go b/client/main_test.go index 30295693f..8b2eb6fde 100644 --- a/client/main_test.go +++ b/client/main_test.go @@ -121,7 +121,6 @@ func TestGenerateSortedObjectServers(t *testing.T) { {Scheme: "https", Host: "preferred1.com", Path: "/foo"}, {Scheme: "", Host: "", Path: "+"}, {Scheme: "https", Host: "preferred2.com", Path: "/foo"}, - } _, err := generateSortedObjServers(dirResp, preferredOServers) assert.Error(t, err) From 48f47469ce8c4649830d108407607084b07f5195 Mon Sep 17 00:00:00 2001 From: Justin Hiemstra Date: Fri, 9 Aug 2024 20:25:36 +0000 Subject: [PATCH 3/5] Fix borked token logic in transfer attempt generation I had accidentally inverted some token logic. This commit fixes the logic and adds a test that would have caught the issue. --- client/handle_http.go | 2 +- client/handle_http_test.go | 71 ++++++++++++++++++++++++++------------ 2 files changed, 50 insertions(+), 23 deletions(-) diff --git a/client/handle_http.go b/client/handle_http.go index 18d304310..d8e0d48c2 100644 --- a/client/handle_http.go +++ b/client/handle_http.go @@ -1351,7 +1351,7 @@ func getObjectServersToTry(sortedObjectServers []string, job *TransferJob, oServ oServers = append(oServers, oServer) oServerList[oServer] = true td := transferDetailsOptions{ - NeedsToken: !job.dirResp.XPelNsHdr.RequireToken, + NeedsToken: job.dirResp.XPelNsHdr.RequireToken, PackOption: packOption, } transfers = append(transfers, generateTransferDetails(oServer, td)...) diff --git a/client/handle_http_test.go b/client/handle_http_test.go index 6be699257..567b92bfc 100644 --- a/client/handle_http_test.go +++ b/client/handle_http_test.go @@ -834,7 +834,7 @@ func TestNewPelicanURL(t *testing.T) { // and that any duplicates are removed func TestGetObjectServersToTry(t *testing.T) { sortedServers := []string{ - "https://cache-1.com", + "http://cache-1.com", // set an HTTP scheme to check that it's switched to https "https://cache-2.com", "https://cache-2.com", // make sure duplicates are removed "https://cache-3.com", @@ -842,29 +842,56 @@ func TestGetObjectServersToTry(t *testing.T) { "https://cache-5.com", } - directorResponse := server_structs.DirectorResponse{ - XPelNsHdr: server_structs.XPelNs{ - RequireToken: false, - }, - } - job := &TransferJob{ - dirResp: directorResponse, - } - transfers := getObjectServersToTry(sortedServers, job, 3, "") + t.Run("RequiredTokenTriggersHTTPS", func(t *testing.T) { + directorResponse := server_structs.DirectorResponse{ + XPelNsHdr: server_structs.XPelNs{ + RequireToken: true, + }, + } + job := &TransferJob{ + dirResp: directorResponse, + } + transfers := getObjectServersToTry(sortedServers, job, 3, "") - // Check that there are no duplicates in the result - cacheSet := make(map[string]bool) - for _, transfer := range transfers { - if cacheSet[transfer.Url.String()] { - t.Errorf("Found duplicate cache: %v", transfer.Url.String()) + // Check that there are no duplicates in the result + cacheSet := make(map[string]bool) + for _, transfer := range transfers { + if cacheSet[transfer.Url.String()] { + t.Errorf("Found duplicate cache: %v", transfer.Url.String()) + } + cacheSet[transfer.Url.String()] = true } - cacheSet[transfer.Url.String()] = true - } - // Verify we got the correct caches in our transfer attempt details - require.Len(t, transfers, 3) - assert.Equal(t, "https://cache-1.com", transfers[0].Url.String()) - assert.Equal(t, "https://cache-2.com", transfers[1].Url.String()) - assert.Equal(t, "https://cache-3.com", transfers[2].Url.String()) + // Verify we got the correct caches in our transfer attempt details + require.Len(t, transfers, 3) + assert.Equal(t, "https://cache-1.com", transfers[0].Url.String()) + assert.Equal(t, "https://cache-2.com", transfers[1].Url.String()) + assert.Equal(t, "https://cache-3.com", transfers[2].Url.String()) + }) + + t.Run("NoRequiredTokenPreservesHTTP", func(t *testing.T) { + directorResponse := server_structs.DirectorResponse{ + XPelNsHdr: server_structs.XPelNs{ + RequireToken: false, + }, + } + job := &TransferJob{ + dirResp: directorResponse, + } + transfers := getObjectServersToTry(sortedServers, job, 3, "") + + cacheSet := make(map[string]bool) + for _, transfer := range transfers { + if cacheSet[transfer.Url.String()] { + t.Errorf("Found duplicate cache: %v", transfer.Url.String()) + } + cacheSet[transfer.Url.String()] = true + } + + require.Len(t, transfers, 3) + assert.Equal(t, "http://cache-1.com", transfers[0].Url.String()) + assert.Equal(t, "https://cache-2.com", transfers[1].Url.String()) + assert.Equal(t, "https://cache-3.com", transfers[2].Url.String()) + }) } // Test that the project name is correctly extracted from the job ad file From 461a6735cc88e4b3fc1e836881870adcee463024 Mon Sep 17 00:00:00 2001 From: Justin Hiemstra Date: Fri, 9 Aug 2024 20:41:41 +0000 Subject: [PATCH 4/5] Clean up X-Pelican-Token-Generation header creation Two changes here -- move the addition of base path into the hdrKey iteration, and don't include the max scope depth if 0, which is a) invalid and b) the default value of variable we get it from when nothing is set. --- director/director.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/director/director.go b/director/director.go index 9da710389..9bc119d1e 100644 --- a/director/director.go +++ b/director/director.go @@ -225,10 +225,13 @@ func generateXTokenGenHeader(ginCtx *gin.Context, namespaceAd server_structs.Nam hdrVals := []string{namespaceAd.Generation[0].CredentialIssuer.String(), fmt.Sprint(namespaceAd.Generation[0].MaxScopeDepth), string(namespaceAd.Generation[0].Strategy), basePath} - for idx, hdrKey := range []string{"issuer", "max-scope-depth", "strategy"} { + for idx, hdrKey := range []string{"issuer", "max-scope-depth", "strategy", "base-path"} { hdrVal := hdrVals[idx] if hdrVal == "" { continue + } else if hdrKey == "max-scope-depth" && hdrVal == "0" { + // don't send a 0 max-scope-depth because it's malformed and probably means there should be no token generation header + continue } if !first { tokenGen += ", " @@ -237,10 +240,6 @@ func generateXTokenGenHeader(ginCtx *gin.Context, namespaceAd server_structs.Nam tokenGen += hdrKey + "=" + hdrVal } - if basePath != "" { - tokenGen += ", base-path=" + basePath - } - if tokenGen != "" { ginCtx.Writer.Header()["X-Pelican-Token-Generation"] = []string{tokenGen} } From ba5941332445b24b3cb5efa6f9f625eade601693 Mon Sep 17 00:00:00 2001 From: Justin Hiemstra Date: Mon, 12 Aug 2024 15:36:32 +0000 Subject: [PATCH 5/5] Fix cyclic import The cyclic import entailed config-->server_structs-->utils-->config. Since I don't think the utils package should import config (config is specific to a session, utils should be broadly applicable), I fixed the cycle by modifying a few utility functions not to need config. Instead, the required variables must now be passed via the function signature. --- cache/advertise.go | 6 +- director/origin_api.go | 3 +- launcher_utils/advertise.go | 3 +- local_cache/cache_linux_test.go | 6 +- local_cache/local_cache.go | 3 +- registry/client_commands.go | 21 ++++-- utils/ca_utils.go | 5 +- utils/web_utils.go | 9 +-- web_ui/frontend/package-lock.json | 120 ++++++++++++++++++++++++++++++ web_ui/prometheus.go | 3 +- xrootd/xrootd_config.go | 3 +- 11 files changed, 154 insertions(+), 28 deletions(-) diff --git a/cache/advertise.go b/cache/advertise.go index b1d1b1ccc..b923f83e1 100644 --- a/cache/advertise.go +++ b/cache/advertise.go @@ -147,15 +147,15 @@ func (server *CacheServer) GetNamespaceAdsFromDirector() error { // Attempt to get data from the 2.0 endpoint, if that returns a 404 error, then attempt to get data // from the 1.0 endpoint and convert from V1 to V2 - - respData, err := utils.MakeRequest(context.Background(), directorNSListEndpointURL, "GET", nil, nil) + tr := config.GetTransport() + respData, err := utils.MakeRequest(context.Background(), tr, directorNSListEndpointURL, "GET", nil, nil) if err != nil { if strings.Contains(err.Error(), "404") { directorNSListEndpointURL, err = url.JoinPath(fedInfo.DirectorEndpoint, "api", "v1.0", "director", "listNamespaces") if err != nil { return err } - respData, err = utils.MakeRequest(context.Background(), directorNSListEndpointURL, "GET", nil, nil) + respData, err = utils.MakeRequest(context.Background(), tr, directorNSListEndpointURL, "GET", nil, nil) var respNSV1 []server_structs.NamespaceAdV1 if err != nil { return errors.Wrap(err, "Failed to make request") diff --git a/director/origin_api.go b/director/origin_api.go index 8e0e3159c..27dda935d 100644 --- a/director/origin_api.go +++ b/director/origin_api.go @@ -144,7 +144,8 @@ func verifyAdvertiseToken(ctx context.Context, token, namespace string) (bool, e } if keyset == nil { - keyset, err = utils.GetJwks(ctx, keyLoc) + tr := config.GetTransport() + keyset, err = utils.GetJwks(ctx, tr, keyLoc) if err != nil { return false, errors.Wrapf(err, "failed to get jwks at %s", keyLoc) } diff --git a/launcher_utils/advertise.go b/launcher_utils/advertise.go index 61fbec302..3207613e9 100644 --- a/launcher_utils/advertise.go +++ b/launcher_utils/advertise.go @@ -118,7 +118,8 @@ func getSitenameFromReg(ctx context.Context, prefix string) (sitename string, er if err != nil { return } - res, err := utils.MakeRequest(context.Background(), requestUrl, http.MethodGet, nil, nil) + tr := config.GetTransport() + res, err := utils.MakeRequest(context.Background(), tr, requestUrl, http.MethodGet, nil, nil) if err != nil { return } diff --git a/local_cache/cache_linux_test.go b/local_cache/cache_linux_test.go index 997206b7c..e8349bc19 100644 --- a/local_cache/cache_linux_test.go +++ b/local_cache/cache_linux_test.go @@ -139,8 +139,8 @@ func TestForcePurge(t *testing.T) { Scheme: "unix", Path: param.LocalCache_Socket.GetString(), } - - _, err = utils.MakeRequest(ft.Ctx, param.Server_ExternalWebUrl.GetString()+"/api/v1.0/localcache/purge", "POST", nil, map[string]string{"Authorization": "Bearer abcd"}) + tr := config.GetTransport() + _, err = utils.MakeRequest(ft.Ctx, tr, param.Server_ExternalWebUrl.GetString()+"/api/v1.0/localcache/purge", "POST", nil, map[string]string{"Authorization": "Bearer abcd"}) assert.Error(t, err) require.Equal(t, fmt.Sprintf("The POST attempt to %s/api/v1.0/localcache/purge resulted in status code 403", param.Server_ExternalWebUrl.GetString()), err.Error()) @@ -172,7 +172,7 @@ func TestForcePurge(t *testing.T) { }() } - _, err = utils.MakeRequest(ft.Ctx, param.Server_ExternalWebUrl.GetString()+"/api/v1.0/localcache/purge", "POST", nil, map[string]string{"Authorization": "Bearer " + token}) + _, err = utils.MakeRequest(ft.Ctx, tr, param.Server_ExternalWebUrl.GetString()+"/api/v1.0/localcache/purge", "POST", nil, map[string]string{"Authorization": "Bearer " + token}) require.NoError(t, err) // Low water mark is small enough that a force purge will delete a file. diff --git a/local_cache/local_cache.go b/local_cache/local_cache.go index 225af6368..fe3cd5f9b 100644 --- a/local_cache/local_cache.go +++ b/local_cache/local_cache.go @@ -744,7 +744,8 @@ func (sc *LocalCache) updateConfig() error { return errors.Wrap(err, "Unable to generate the director's listNamespaces endpoint") } - respData, err := utils.MakeRequest(sc.ctx, directorNSListEndpointURL, "GET", nil, nil) + tr := config.GetTransport() + respData, err := utils.MakeRequest(sc.ctx, tr, directorNSListEndpointURL, "GET", nil, nil) if err != nil { return err } else { diff --git a/registry/client_commands.go b/registry/client_commands.go index b49ea9c78..c56f481bf 100644 --- a/registry/client_commands.go +++ b/registry/client_commands.go @@ -32,6 +32,7 @@ import ( "github.com/pkg/errors" log "github.com/sirupsen/logrus" + "github.com/pelicanplatform/pelican/config" "github.com/pelicanplatform/pelican/server_utils" "github.com/pelicanplatform/pelican/token" "github.com/pelicanplatform/pelican/token_scopes" @@ -58,7 +59,8 @@ func NamespaceRegisterWithIdentity(privateKey jwk.Key, namespaceRegistryEndpoint // it's also registered already } - resp, err := utils.MakeRequest(context.Background(), namespaceRegistryEndpoint, "POST", identifiedPayload, nil) + tr := config.GetTransport() + resp, err := utils.MakeRequest(context.Background(), tr, namespaceRegistryEndpoint, "POST", identifiedPayload, nil) var respData clientResponseData // Handle case where there was an error encoded in the body @@ -81,7 +83,7 @@ func NamespaceRegisterWithIdentity(privateKey jwk.Key, namespaceRegistryEndpoint "identity_required": "true", "device_code": respData.DeviceCode, } - resp, err = utils.MakeRequest(context.Background(), namespaceRegistryEndpoint, "POST", identifiedPayload, nil) + resp, err = utils.MakeRequest(context.Background(), tr, namespaceRegistryEndpoint, "POST", identifiedPayload, nil) if err != nil { return errors.Wrap(err, "Failed to make request") } @@ -137,7 +139,8 @@ func NamespaceRegister(privateKey jwk.Key, namespaceRegistryEndpoint string, acc "pubkey": keySet, } - resp, err := utils.MakeRequest(context.Background(), namespaceRegistryEndpoint, "POST", data, nil) + tr := config.GetTransport() + resp, err := utils.MakeRequest(context.Background(), tr, namespaceRegistryEndpoint, "POST", data, nil) var respData clientResponseData // Handle case where there was an error encoded in the body @@ -182,7 +185,7 @@ func NamespaceRegister(privateKey jwk.Key, namespaceRegistryEndpoint string, acc } // Send the second POST request - resp, err = utils.MakeRequest(context.Background(), namespaceRegistryEndpoint, "POST", unidentifiedPayload, nil) + resp, err = utils.MakeRequest(context.Background(), tr, namespaceRegistryEndpoint, "POST", unidentifiedPayload, nil) // Handle case where there was an error encoded in the body if unmarshalErr := json.Unmarshal(resp, &respData); unmarshalErr == nil { @@ -204,7 +207,8 @@ func NamespaceRegister(privateKey jwk.Key, namespaceRegistryEndpoint string, acc } func NamespaceList(endpoint string) error { - respData, err := utils.MakeRequest(context.Background(), endpoint, "GET", nil, nil) + tr := config.GetTransport() + respData, err := utils.MakeRequest(context.Background(), tr, endpoint, "GET", nil, nil) var respErr clientResponseData if err != nil { if jsonErr := json.Unmarshal(respData, &respErr); jsonErr == nil { // Error creating json @@ -217,7 +221,8 @@ func NamespaceList(endpoint string) error { } func NamespaceGet(endpoint string) error { - respData, err := utils.MakeRequest(context.Background(), endpoint, "GET", nil, nil) + tr := config.GetTransport() + respData, err := utils.MakeRequest(context.Background(), tr, endpoint, "GET", nil, nil) var respErr clientResponseData if err != nil { if jsonErr := json.Unmarshal(respData, &respErr); jsonErr == nil { // Error creating json @@ -264,8 +269,8 @@ func NamespaceDelete(endpoint string, prefix string) error { authHeader := map[string]string{ "Authorization": "Bearer " + tok, } - - respData, err := utils.MakeRequest(context.Background(), endpoint, "DELETE", nil, authHeader) + tr := config.GetTransport() + respData, err := utils.MakeRequest(context.Background(), tr, endpoint, "DELETE", nil, authHeader) var respErr clientResponseData if err != nil { if unmarshalErr := json.Unmarshal(respData, &respErr); unmarshalErr == nil { // Error creating json diff --git a/utils/ca_utils.go b/utils/ca_utils.go index 644d3b349..f86acf1ee 100644 --- a/utils/ca_utils.go +++ b/utils/ca_utils.go @@ -33,7 +33,6 @@ import ( log "github.com/sirupsen/logrus" "golang.org/x/sync/errgroup" - "github.com/pelicanplatform/pelican/config" "github.com/pelicanplatform/pelican/param" ) @@ -86,13 +85,13 @@ func WriteCABundle(filename string) (int, error) { // // If we're on a platform (Mac, Windows) that does not provide a CA bundle, we return // a count of 0 and do not launch the go routine. -func LaunchPeriodicWriteCABundle(ctx context.Context, filename string, sleepTime time.Duration) (count int, err error) { +func LaunchPeriodicWriteCABundle(ctx context.Context, egrpKey string, filename string, sleepTime time.Duration) (count int, err error) { count, err = WriteCABundle(filename) if err != nil || count == 0 { return } - egrp, ok := ctx.Value(config.EgrpKey).(*errgroup.Group) + egrp, ok := ctx.Value(egrpKey).(*errgroup.Group) if !ok { egrp = &errgroup.Group{} } diff --git a/utils/web_utils.go b/utils/web_utils.go index 8cebb8f7f..513b4395d 100644 --- a/utils/web_utils.go +++ b/utils/web_utils.go @@ -32,13 +32,11 @@ import ( "github.com/gin-gonic/gin" "github.com/lestrrat-go/jwx/v2/jwk" "github.com/pkg/errors" - - "github.com/pelicanplatform/pelican/config" ) // MakeRequest makes an http request with our custom http client. It acts similarly to the http.NewRequest but // it only takes json as the request data. -func MakeRequest(ctx context.Context, url string, method string, data map[string]interface{}, headers map[string]string) ([]byte, error) { +func MakeRequest(ctx context.Context, tr *http.Transport, url string, method string, data map[string]interface{}, headers map[string]string) ([]byte, error) { payload, _ := json.Marshal(data) req, err := http.NewRequestWithContext(ctx, method, url, bytes.NewBuffer(payload)) if err != nil { @@ -49,7 +47,6 @@ func MakeRequest(ctx context.Context, url string, method string, data map[string for key, val := range headers { req.Header.Set(key, val) } - tr := config.GetTransport() client := &http.Client{Transport: tr} resp, err := client.Do(req) @@ -140,11 +137,11 @@ func HasContentType(r *http.Response, mimetype string) bool { return false } -func GetJwks(ctx context.Context, location string) (jwk.Set, error) { +func GetJwks(ctx context.Context, tr *http.Transport, location string) (jwk.Set, error) { if location == "" { return nil, errors.New("jwks location is empty") } - client := http.Client{Transport: config.GetTransport()} + client := http.Client{Transport: tr} req, err := http.NewRequestWithContext(ctx, http.MethodGet, location, nil) if err != nil { return nil, err diff --git a/web_ui/frontend/package-lock.json b/web_ui/frontend/package-lock.json index c2df0dd3f..d555e922e 100644 --- a/web_ui/frontend/package-lock.json +++ b/web_ui/frontend/package-lock.json @@ -896,6 +896,126 @@ "node": ">= 10" } }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.1.tgz", + "integrity": "sha512-KCQmBL0CmFmN8D64FHIZVD9I4ugQsDBBEJKiblXGgwn7wBCSe8N4Dx47sdzl4JAg39IkSN5NNrr8AniXLMb3aw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.1.tgz", + "integrity": "sha512-YDQfbWyW0JMKhJf/T4eyFr4b3tceTorQ5w2n7I0mNVTFOvu6CGEzfwT3RSAQGTi/FFMTFcuspPec/7dFHuP7Eg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.1.tgz", + "integrity": "sha512-fiuN/OG6sNGRN/bRFxRvV5LyzLB8gaL8cbDH5o3mEiVwfcMzyE5T//ilMmaTrnA8HLMS6hoz4cHOu6Qcp9vxgQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.1.tgz", + "integrity": "sha512-rv6AAdEXoezjbdfp3ouMuVqeLjE1Bin0AuE6qxE6V9g3Giz5/R3xpocHoAi7CufRR+lnkuUjRBn05SYJ83oKNQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.1.tgz", + "integrity": "sha512-YAZLGsaNeChSrpz/G7MxO3TIBLaMN8QWMr3X8bt6rCvKovwU7GqQlDu99WdvF33kI8ZahvcdbFsy4jAFzFX7og==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.1.tgz", + "integrity": "sha512-1L4mUYPBMvVDMZg1inUYyPvFSduot0g73hgfD9CODgbr4xiTYe0VOMTZzaRqYJYBA9mana0x4eaAaypmWo1r5A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.1.tgz", + "integrity": "sha512-jvIE9tsuj9vpbbXlR5YxrghRfMuG0Qm/nZ/1KDHc+y6FpnZ/apsgh+G6t15vefU0zp3WSpTMIdXRUsNl/7RSuw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.1.tgz", + "integrity": "sha512-S6K6EHDU5+1KrBDLko7/c1MNy/Ya73pIAmvKeFwsF4RmBFJSO7/7YeD4FnZ4iBdzE69PpQ4sOMU9ORKeNuxe8A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", diff --git a/web_ui/prometheus.go b/web_ui/prometheus.go index b8cca22f6..6341a1020 100644 --- a/web_ui/prometheus.go +++ b/web_ui/prometheus.go @@ -150,7 +150,8 @@ func runtimeInfo() (api_v1.RuntimeInfo, error) { func onceLaunchCABundleUpdate(ctx context.Context, caBundle string) (certCtn int, err error) { onceCABundle.Do(func() { - certCtn, err = utils.LaunchPeriodicWriteCABundle(ctx, caBundle, 2*time.Minute) + egrpKey := string(pelican_config.EgrpKey) + certCtn, err = utils.LaunchPeriodicWriteCABundle(ctx, egrpKey, caBundle, 2*time.Minute) }) return } diff --git a/xrootd/xrootd_config.go b/xrootd/xrootd_config.go index 04d43a562..7b8382a66 100644 --- a/xrootd/xrootd_config.go +++ b/xrootd/xrootd_config.go @@ -770,7 +770,8 @@ func ConfigXrootd(ctx context.Context, isOrigin bool) (string, error) { if !isOrigin { runtimeCAs = filepath.Join(param.Cache_RunLocation.GetString(), "ca-bundle.crt") } - caCount, err := utils.LaunchPeriodicWriteCABundle(ctx, runtimeCAs, 2*time.Minute) + egrpKey := string(config.EgrpKey) + caCount, err := utils.LaunchPeriodicWriteCABundle(ctx, egrpKey, runtimeCAs, 2*time.Minute) if err != nil { return "", errors.Wrap(err, "Failed to setup the runtime CA bundle") }