Documentation ¶
Index ¶
- Constants
- Variables
- func GetRunners() []string
- func Run(runnerName string) error
- type AllowedService
- type DockerNetwork
- type DockerReactor
- type Instance
- type InstanceHandler
- type K8sNetwork
- type K8sReactor
- type MockNetwork
- type MockReactor
- type NetlinkLink
- func (l *NetlinkLink) AddRules(rules []network.LinkRule) error
- func (l *NetlinkLink) AddrAdd(ip *net.IPNet) error
- func (l *NetlinkLink) AddrDel(ip *net.IPNet) error
- func (l *NetlinkLink) Down() error
- func (l *NetlinkLink) ListV4() ([]*net.IPNet, error)
- func (l *NetlinkLink) ListV6() ([]*net.IPNet, error)
- func (l *NetlinkLink) Shape(shape network.LinkShape) error
- func (l *NetlinkLink) Up() error
- type Network
- type Reactor
Constants ¶
const ( EnvRedisHost = "REDIS_HOST" // NOTE: kept for backwards compatibility with older SDKs. EnvSyncServiceHost = "SYNC_SERVICE_HOST" EnvInfluxdbHost = "INFLUXDB_HOST" EnvAdditionalHosts = "ADDITIONAL_HOSTS" )
Variables ¶
var PublicAddr = net.ParseIP("1.1.1.1")
PublicAddr points to an IP address in the public range. It helps us discover the IP address of the gateway (i.e. the Docker host) on the control network (the learned route will be via the control network because, at this point, the only network that's attached to the container is the control network).
Sidecar doesn't whitelist traffic to public addresses, but it special-cases traffic between the container and the host, so that pprof, metrics and other ports can be exposed to the Docker host.
Functions ¶
Types ¶
type AllowedService ¶
type DockerNetwork ¶
type DockerNetwork struct {
// contains filtered or unexported fields
}
func (*DockerNetwork) Close ¶
func (dn *DockerNetwork) Close() error
func (*DockerNetwork) ConfigureNetwork ¶
func (*DockerNetwork) ListActive ¶
func (dn *DockerNetwork) ListActive() []string
func (*DockerNetwork) ListAvailable ¶
func (dn *DockerNetwork) ListAvailable() []string
type DockerReactor ¶
func (*DockerReactor) Close ¶
func (d *DockerReactor) Close() error
func (*DockerReactor) Handle ¶
func (d *DockerReactor) Handle(globalctx context.Context, handler InstanceHandler) error
func (*DockerReactor) ResolveServices ¶ added in v0.5.1
func (d *DockerReactor) ResolveServices(runid string)
type Instance ¶
type Instance struct { logging.Logging Hostname string Client sync.Client RunEnv *runtime.RunEnv Network Network }
Instance is a test instance as seen by the sidecar.
type K8sNetwork ¶
type K8sNetwork struct {
// contains filtered or unexported fields
}
func (*K8sNetwork) Close ¶
func (n *K8sNetwork) Close() error
func (*K8sNetwork) ConfigureNetwork ¶
func (*K8sNetwork) InitializeNetwork ¶ added in v0.6.0
func (n *K8sNetwork) InitializeNetwork(ctx context.Context) error
InitializeNetwork initializes the k8s network. This should be done once, before any additional configuration takes place
func (*K8sNetwork) ListActive ¶
func (n *K8sNetwork) ListActive() []string
type K8sReactor ¶
func (*K8sReactor) Close ¶
func (d *K8sReactor) Close() error
func (*K8sReactor) Handle ¶
func (d *K8sReactor) Handle(ctx context.Context, handler InstanceHandler) error
func (*K8sReactor) ResolveServices ¶ added in v0.5.1
func (d *K8sReactor) ResolveServices(runid string)
type MockNetwork ¶ added in v0.5.1
type MockNetwork struct { Active map[string]*network.Config // A map of *active* networks. Configured []*network.Config // A list of all the configurations we've seen Closed bool L gosync.Locker }
Network
func NewMockNetwork ¶ added in v0.5.1
func NewMockNetwork() *MockNetwork
func (*MockNetwork) Close ¶ added in v0.5.1
func (m *MockNetwork) Close() error
func (*MockNetwork) ConfigureNetwork ¶ added in v0.5.1
func (*MockNetwork) ListActive ¶ added in v0.5.1
func (m *MockNetwork) ListActive() []string
type MockReactor ¶ added in v0.5.1
type MockReactor struct { RunParams *runtime.RunParams RunEnv *runtime.RunEnv Network *MockNetwork Client sync.Client Hostname string }
Reactor
func (*MockReactor) Close ¶ added in v0.5.1
func (*MockReactor) Close() error
func (*MockReactor) Handle ¶ added in v0.5.1
func (r *MockReactor) Handle(ctx context.Context, handler InstanceHandler) error
type NetlinkLink ¶
NetlinkLink abstracts operations over a network interface.
NetlinkLink shapes the egress traffic on the link using TC. To do so, it configures the following TC tree:
[________HTB Qdisc_________] - root 0 | 1 | n | ... - queue; 0 is the default. [HTB Class] - bandwidth (rate limiting) | [Netem Qdisc] - latency, jitter, etc. (per-packet attributes)
At the moment, only one queue is supported. When support for multiple subnets is added, additional classes/queues will be added per-subnet.
NetlinkLink also supports setting the network device up/down and changing the IP address.
NOTE: Not all run environments will react well to the IP address changing. Don't use this feature with docker.
func NewNetlinkLink ¶
NewNetlinkLink constructs a new netlink link handle.
func (*NetlinkLink) AddRules ¶ added in v0.5.1
func (l *NetlinkLink) AddRules(rules []network.LinkRule) error
TODO(cory) actually process the shape per network. For now, this simply adds a route based on the Filter
func (*NetlinkLink) AddrAdd ¶
func (l *NetlinkLink) AddrAdd(ip *net.IPNet) error
AddrAdd adds an address to the link.
NOTE: This won't work in docker; use docker connect/disconnect.
func (*NetlinkLink) AddrDel ¶
func (l *NetlinkLink) AddrDel(ip *net.IPNet) error
AddrDel removes an address from the link.
NOTE: This won't work in docker; use docker connect/disconnect.
func (*NetlinkLink) ListV4 ¶
func (l *NetlinkLink) ListV4() ([]*net.IPNet, error)
ListV4 lists all IPv4 addresses associated with the link.
func (*NetlinkLink) ListV6 ¶
func (l *NetlinkLink) ListV6() ([]*net.IPNet, error)
ListV6 lists all IPv6 addresses associated with the link.
type Network ¶
type Network interface { io.Closer ConfigureNetwork(ctx context.Context, cfg *network.Config) error ListActive() []string }
Network is a test instance's network, as seen by the sidecar.
Sidecar runners must implement this interface.
type Reactor ¶
func NewDockerReactor ¶
func NewK8sReactor ¶
func NewMockReactor ¶ added in v0.5.1
A MockReactor with the information for a single instance. A typicial reactor watches the docker socket for containers. This one creates enough information for a single instace, or a single reaction for testing purposes. A mock network and inmem SDK client are instantiated here as well. To use, instantiate the NewMockReactor and run Handle(). Any messages passed through the inmem SDK client are handled as though the come from the mocked instance.