github.com/zhuohuang-hust/src-cbuild@v0.0.0-20230105071821-c7aab3e7c840/api/types/swarm/network.go (about)

     1  package swarm
     2  
     3  // Endpoint represents an endpoint.
     4  type Endpoint struct {
     5  	Spec       EndpointSpec        `json:",omitempty"`
     6  	Ports      []PortConfig        `json:",omitempty"`
     7  	VirtualIPs []EndpointVirtualIP `json:",omitempty"`
     8  }
     9  
    10  // EndpointSpec represents the spec of an endpoint.
    11  type EndpointSpec struct {
    12  	Mode  ResolutionMode `json:",omitempty"`
    13  	Ports []PortConfig   `json:",omitempty"`
    14  }
    15  
    16  // ResolutionMode represents a resolution mode.
    17  type ResolutionMode string
    18  
    19  const (
    20  	// ResolutionModeVIP VIP
    21  	ResolutionModeVIP ResolutionMode = "vip"
    22  	// ResolutionModeDNSRR DNSRR
    23  	ResolutionModeDNSRR ResolutionMode = "dnsrr"
    24  )
    25  
    26  // PortConfig represents the config of a port.
    27  type PortConfig struct {
    28  	Name     string             `json:",omitempty"`
    29  	Protocol PortConfigProtocol `json:",omitempty"`
    30  	// TargetPort is the port inside the container
    31  	TargetPort uint32 `json:",omitempty"`
    32  	// PublishedPort is the port on the swarm hosts
    33  	PublishedPort uint32 `json:",omitempty"`
    34  	// PublishMode is the mode in which port is published
    35  	PublishMode PortConfigPublishMode `json:",omitempty"`
    36  }
    37  
    38  // PortConfigPublishMode represents the mode in which the port is to
    39  // be published.
    40  type PortConfigPublishMode string
    41  
    42  const (
    43  	// PortConfigPublishModeIngress is used for ports published
    44  	// for ingress load balancing using routing mesh.
    45  	PortConfigPublishModeIngress PortConfigPublishMode = "ingress"
    46  	// PortConfigPublishModeHost is used for ports published
    47  	// for direct host level access on the host where the task is running.
    48  	PortConfigPublishModeHost PortConfigPublishMode = "host"
    49  )
    50  
    51  // PortConfigProtocol represents the protocol of a port.
    52  type PortConfigProtocol string
    53  
    54  const (
    55  	// TODO(stevvooe): These should be used generally, not just for PortConfig.
    56  
    57  	// PortConfigProtocolTCP TCP
    58  	PortConfigProtocolTCP PortConfigProtocol = "tcp"
    59  	// PortConfigProtocolUDP UDP
    60  	PortConfigProtocolUDP PortConfigProtocol = "udp"
    61  )
    62  
    63  // EndpointVirtualIP represents the virtual ip of a port.
    64  type EndpointVirtualIP struct {
    65  	NetworkID string `json:",omitempty"`
    66  	Addr      string `json:",omitempty"`
    67  }
    68  
    69  // Network represents a network.
    70  type Network struct {
    71  	ID string
    72  	Meta
    73  	Spec        NetworkSpec  `json:",omitempty"`
    74  	DriverState Driver       `json:",omitempty"`
    75  	IPAMOptions *IPAMOptions `json:",omitempty"`
    76  }
    77  
    78  // NetworkSpec represents the spec of a network.
    79  type NetworkSpec struct {
    80  	Annotations
    81  	DriverConfiguration *Driver      `json:",omitempty"`
    82  	IPv6Enabled         bool         `json:",omitempty"`
    83  	Internal            bool         `json:",omitempty"`
    84  	Attachable          bool         `json:",omitempty"`
    85  	IPAMOptions         *IPAMOptions `json:",omitempty"`
    86  }
    87  
    88  // NetworkAttachmentConfig represents the configuration of a network attachment.
    89  type NetworkAttachmentConfig struct {
    90  	Target  string   `json:",omitempty"`
    91  	Aliases []string `json:",omitempty"`
    92  }
    93  
    94  // NetworkAttachment represents a network attachment.
    95  type NetworkAttachment struct {
    96  	Network   Network  `json:",omitempty"`
    97  	Addresses []string `json:",omitempty"`
    98  }
    99  
   100  // IPAMOptions represents ipam options.
   101  type IPAMOptions struct {
   102  	Driver  Driver       `json:",omitempty"`
   103  	Configs []IPAMConfig `json:",omitempty"`
   104  }
   105  
   106  // IPAMConfig represents ipam configuration.
   107  type IPAMConfig struct {
   108  	Subnet  string `json:",omitempty"`
   109  	Range   string `json:",omitempty"`
   110  	Gateway string `json:",omitempty"`
   111  }