dotcloud/docker

View on GitHub
api/types/swarm/network.go

Summary

Maintainability
A
0 mins
Test Coverage
package swarm // import "github.com/docker/docker/api/types/swarm"

import (
    "github.com/docker/docker/api/types/network"
)

// Endpoint represents an endpoint.
type Endpoint struct {
    Spec       EndpointSpec        `json:",omitempty"`
    Ports      []PortConfig        `json:",omitempty"`
    VirtualIPs []EndpointVirtualIP `json:",omitempty"`
}

// EndpointSpec represents the spec of an endpoint.
type EndpointSpec struct {
    Mode  ResolutionMode `json:",omitempty"`
    Ports []PortConfig   `json:",omitempty"`
}

// ResolutionMode represents a resolution mode.
type ResolutionMode string

const (
    // ResolutionModeVIP VIP
    ResolutionModeVIP ResolutionMode = "vip"
    // ResolutionModeDNSRR DNSRR
    ResolutionModeDNSRR ResolutionMode = "dnsrr"
)

// PortConfig represents the config of a port.
type PortConfig struct {
    Name     string             `json:",omitempty"`
    Protocol PortConfigProtocol `json:",omitempty"`
    // TargetPort is the port inside the container
    TargetPort uint32 `json:",omitempty"`
    // PublishedPort is the port on the swarm hosts
    PublishedPort uint32 `json:",omitempty"`
    // PublishMode is the mode in which port is published
    PublishMode PortConfigPublishMode `json:",omitempty"`
}

// PortConfigPublishMode represents the mode in which the port is to
// be published.
type PortConfigPublishMode string

const (
    // PortConfigPublishModeIngress is used for ports published
    // for ingress load balancing using routing mesh.
    PortConfigPublishModeIngress PortConfigPublishMode = "ingress"
    // PortConfigPublishModeHost is used for ports published
    // for direct host level access on the host where the task is running.
    PortConfigPublishModeHost PortConfigPublishMode = "host"
)

// PortConfigProtocol represents the protocol of a port.
type PortConfigProtocol string

const (
    // TODO(stevvooe): These should be used generally, not just for PortConfig.

    // PortConfigProtocolTCP TCP
    PortConfigProtocolTCP PortConfigProtocol = "tcp"
    // PortConfigProtocolUDP UDP
    PortConfigProtocolUDP PortConfigProtocol = "udp"
    // PortConfigProtocolSCTP SCTP
    PortConfigProtocolSCTP PortConfigProtocol = "sctp"
)

// EndpointVirtualIP represents the virtual ip of a port.
type EndpointVirtualIP struct {
    NetworkID string `json:",omitempty"`
    Addr      string `json:",omitempty"`
}

// Network represents a network.
type Network struct {
    ID string
    Meta
    Spec        NetworkSpec  `json:",omitempty"`
    DriverState Driver       `json:",omitempty"`
    IPAMOptions *IPAMOptions `json:",omitempty"`
}

// NetworkSpec represents the spec of a network.
type NetworkSpec struct {
    Annotations
    DriverConfiguration *Driver                  `json:",omitempty"`
    IPv6Enabled         bool                     `json:",omitempty"`
    Internal            bool                     `json:",omitempty"`
    Attachable          bool                     `json:",omitempty"`
    Ingress             bool                     `json:",omitempty"`
    IPAMOptions         *IPAMOptions             `json:",omitempty"`
    ConfigFrom          *network.ConfigReference `json:",omitempty"`
    Scope               string                   `json:",omitempty"`
}

// NetworkAttachmentConfig represents the configuration of a network attachment.
type NetworkAttachmentConfig struct {
    Target     string            `json:",omitempty"`
    Aliases    []string          `json:",omitempty"`
    DriverOpts map[string]string `json:",omitempty"`
}

// NetworkAttachment represents a network attachment.
type NetworkAttachment struct {
    Network   Network  `json:",omitempty"`
    Addresses []string `json:",omitempty"`
}

// IPAMOptions represents ipam options.
type IPAMOptions struct {
    Driver  Driver       `json:",omitempty"`
    Configs []IPAMConfig `json:",omitempty"`
}

// IPAMConfig represents ipam configuration.
type IPAMConfig struct {
    Subnet  string `json:",omitempty"`
    Range   string `json:",omitempty"`
    Gateway string `json:",omitempty"`
}