123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package agent
- import (
- "github.com/docker/swarmkit/api"
- "golang.org/x/net/context"
- )
- type resourceAllocator struct {
- agent *Agent
- }
- // ResourceAllocator is an interface to allocate resource such as
- // network attachments from a worker node.
- type ResourceAllocator interface {
- // AttachNetwork creates a network attachment in the manager
- // given a target network and a unique ID representing the
- // connecting entity and optionally a list of ipv4/ipv6
- // addresses to be assigned to the attachment. AttachNetwork
- // returns a unique ID for the attachment if successful or an
- // error in case of failure.
- AttachNetwork(ctx context.Context, id, target string, addresses []string) (string, error)
- // DetachNetworks deletes a network attachment for the passed
- // attachment ID. The attachment ID is obtained from a
- // previous AttachNetwork call.
- DetachNetwork(ctx context.Context, aID string) error
- }
- // AttachNetwork creates a network attachment.
- func (r *resourceAllocator) AttachNetwork(ctx context.Context, id, target string, addresses []string) (string, error) {
- var taskID string
- if err := r.agent.withSession(ctx, func(session *session) error {
- client := api.NewResourceAllocatorClient(session.conn.ClientConn)
- r, err := client.AttachNetwork(ctx, &api.AttachNetworkRequest{
- Config: &api.NetworkAttachmentConfig{
- Target: target,
- Addresses: addresses,
- },
- ContainerID: id,
- })
- if err != nil {
- return err
- }
- taskID = r.AttachmentID
- return nil
- }); err != nil {
- return "", err
- }
- return taskID, nil
- }
- // DetachNetwork deletes a network attachment.
- func (r *resourceAllocator) DetachNetwork(ctx context.Context, aID string) error {
- return r.agent.withSession(ctx, func(session *session) error {
- client := api.NewResourceAllocatorClient(session.conn.ClientConn)
- _, err := client.DetachNetwork(ctx, &api.DetachNetworkRequest{
- AttachmentID: aID,
- })
- return err
- })
- }
- // ResourceAllocator provides an interface to access resource
- // allocation methods such as AttachNetwork and DetachNetwork.
- func (a *Agent) ResourceAllocator() ResourceAllocator {
- return &resourceAllocator{agent: a}
- }
|