tree: 52e53b35569d33ea28f0929b65e7b6b4db5b4f24 [path history] [tgz]
  1. backends/
  2. README.md
  3. trafficvault.go
traffic_ops/traffic_ops_golang/trafficvault/README.md

Implementing a new Traffic Vault backend (e.g. Foo)

  1. Create a new directory in ./backends which will contain/define your new package (foo) which will provide all the functionality to support a new Foo backend for Traffic Vault.
  2. In this new ./backends/foo directory, create a new file: foo.go, with package foo to define the package name.
  3. In 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
}
  1. Implement all the methods required by the 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
}
  1. Define a 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
}
  1. Define a package 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)
}
  1. In ./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.