https://github.com/clever/discovery-go
Programmatically find services
https://github.com/clever/discovery-go
Last synced: about 1 year ago
JSON representation
Programmatically find services
- Host: GitHub
- URL: https://github.com/clever/discovery-go
- Owner: Clever
- License: apache-2.0
- Created: 2015-08-03T21:51:29.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2025-04-24T00:29:47.000Z (about 1 year ago)
- Last Synced: 2025-04-24T01:27:04.657Z (about 1 year ago)
- Language: Go
- Size: 84 KB
- Stars: 13
- Watchers: 63
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# discovery-go
This library programmatically finds endpoints for dependencies. Similar to [discovery-node](https://github.com/Clever/discovery-node) and [disocvery-python](https://github.com/Clever/discovery-python).
See [Service Discovery](https://clever.atlassian.net/wiki/spaces/ENG/pages/116686857/Discovery) for more details.
## API
[Godoc Documentation](http://godoc.org/github.com/Clever/discovery-go)
### Examples
```go
gearmanAdminURLString, err := discovery.URL("gearman-admin", "http")
if err != nil {
log.Fatal("ERROR: " + err.Error())
}
stokedHostPort, err := discovery.HostPort("stoked", "thrift")
if err != nil {
logger.Fatal("ERROR: " + err.Error())
}
stokedHost, err := discovery.Host("stoked", "thrift")
if err != nil {
logger.Fatal("ERROR: " + err.Error())
}
stokedPort, err := discovery.Port("stoked", "thrift")
if err != nil {
logger.Fatal("ERROR: " + err.Error())
}
cleverComURL, err := discovery.ExternalURL("clever.com")
if err != nil {
logger.Fatal("ERROR: " + err.Error())
}
```
### Implementation Details
Currently, `discovery-{go,node,python}` looks for environment variables with the following format:
```
SERVICE_{SERVICE_NAME}_{EXPOSE_NAME}_{PROTO,HOST,PORT}
```
These environment variables are autogenerated [catapult](http://github.com/Clever/catapult) during app deployment. Three env-vars are created for each app listed in the `dependencies` section of caller's launch yaml.
For example, if an app lists `district-authorizations` as a dependency, catapult will generate this env-vars triplet:
```bash
SERVICE_DISTRICT_AUTHORIZATIONS_HTTP_PROTO = "http"
SERVICE_DISTRICT_AUTHORIZATIONS_HTTP_HOST = "district-authorizations.ops.clever.com"
SERVICE_DISTRICT_AUTHORIZATIONS_HTTP_PORT = "80"
```
It is also used to look for external urls with the format
```
EXTERNAL_URL_{URL_HOST}
```
For example for `schools.clever.com` catapult will set:
```bash
EXTERNAL_URL_SCHOOLS_CLEVER_COM = "https://schools.clever.com:443
```