foo
) which will provide all the functionality to support a new Foo
backend for Traffic Vault../backends/foo
directory, create a new file: foo.go
, with package foo
to define the package name.foo.go
, define a struct (e.g. type Foo struct
) which will act as the method receiver for all the required TrafficVault
methods. This struct should contain any fields necessary to provide the required functionality. For instance, it should most likely contain all the required configuration to connect to and use the Foo
data store.type Foo struct {
cfg Config
}
type Config struct {
user string
password string
}
TrafficVault
interface on your new Foo
struct. Initially, you may want to simply stub out the methods and implement them later:func (f *Foo) GetDeliveryServiceSSLKeys(xmlID string, version string, tx *sql.Tx, ctx context.Context) (tc.DeliveryServiceSSLKeysV15, bool, error) {
return tc.DeliveryServiceSSLKeysV15{}, false, nil
}
... (snip)
func (f *Foo) Ping(tx *sql.Tx, ctx context.Context) (tc.TrafficVaultPingResponse, error) {
return tc.TrafficVaultPingResponse{}, nil
}
trafficvault.LoadFunc
which will parse the given JSON config (from cdn.conf's traffic_vault_config
option) and return a pointer to an instance of the Foo
type:func loadFoo(b json.RawMessage) (trafficvault.TrafficVault, error) { // unmarshal the given JSON, validate it, return an error if any // fooCfg, err := parseAndValidateConfig(b) return &Foo{cfg: fooCfg}, nil }
init
function which calls trafficvault.AddBackend
with your backend's name and LoadFunc
in order to register your new Traffic Vault Foo
backend for use:func init() {
trafficvault.AddBackend("foo", loadFoo)
}
./backends/backends.go
, import your new package:import (
_ "github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/trafficvault/backends/foo"
)
This is required for the package init()
function to run and register the new backend. 8. You are now able to test your new Traffic Vault Foo
backend. First, in cdn.conf
, you need to set traffic_vault_backend
to "foo"
and include your desired Foo
configuration in traffic_vault_config
. Once that is done, Traffic Vault is enabled, and you can use Traffic Ops API routes that require Traffic Vault. At this point, you should go back and fully implement the stubbed out TrafficVault
interface methods on your Foo
type.