| package client |
| |
| import ( |
| "context" |
| "encoding/json" |
| "net/netip" |
| |
| "github.com/moby/moby/api/types/swarm" |
| ) |
| |
| // SwarmInitOptions contains options for initializing a new swarm. |
| type SwarmInitOptions struct { |
| ListenAddr string |
| AdvertiseAddr string |
| DataPathAddr string |
| DataPathPort uint32 |
| ForceNewCluster bool |
| Spec swarm.Spec |
| AutoLockManagers bool |
| Availability swarm.NodeAvailability |
| DefaultAddrPool []netip.Prefix |
| SubnetSize uint32 |
| } |
| |
| // SwarmInitResult contains the result of a SwarmInit operation. |
| type SwarmInitResult struct { |
| NodeID string |
| } |
| |
| // SwarmInit initializes the swarm. |
| func (cli *Client) SwarmInit(ctx context.Context, options SwarmInitOptions) (SwarmInitResult, error) { |
| req := swarm.InitRequest{ |
| ListenAddr: options.ListenAddr, |
| AdvertiseAddr: options.AdvertiseAddr, |
| DataPathAddr: options.DataPathAddr, |
| DataPathPort: options.DataPathPort, |
| ForceNewCluster: options.ForceNewCluster, |
| Spec: options.Spec, |
| AutoLockManagers: options.AutoLockManagers, |
| Availability: options.Availability, |
| DefaultAddrPool: options.DefaultAddrPool, |
| SubnetSize: options.SubnetSize, |
| } |
| |
| resp, err := cli.post(ctx, "/swarm/init", nil, req, nil) |
| defer ensureReaderClosed(resp) |
| if err != nil { |
| return SwarmInitResult{}, err |
| } |
| |
| var nodeID string |
| err = json.NewDecoder(resp.Body).Decode(&nodeID) |
| return SwarmInitResult{NodeID: nodeID}, err |
| } |