123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package convert
- import (
- "fmt"
- "strings"
- "time"
- types "github.com/docker/engine-api/types/swarm"
- swarmapi "github.com/docker/swarmkit/api"
- "github.com/docker/swarmkit/protobuf/ptypes"
- )
- // SwarmFromGRPC converts a grpc Cluster to a Swarm.
- func SwarmFromGRPC(c swarmapi.Cluster) types.Swarm {
- swarm := types.Swarm{
- ClusterInfo: types.ClusterInfo{
- ID: c.ID,
- Spec: types.Spec{
- Orchestration: types.OrchestrationConfig{
- TaskHistoryRetentionLimit: c.Spec.Orchestration.TaskHistoryRetentionLimit,
- },
- Raft: types.RaftConfig{
- SnapshotInterval: c.Spec.Raft.SnapshotInterval,
- KeepOldSnapshots: c.Spec.Raft.KeepOldSnapshots,
- LogEntriesForSlowFollowers: c.Spec.Raft.LogEntriesForSlowFollowers,
- HeartbeatTick: c.Spec.Raft.HeartbeatTick,
- ElectionTick: c.Spec.Raft.ElectionTick,
- },
- },
- },
- JoinTokens: types.JoinTokens{
- Worker: c.RootCA.JoinTokens.Worker,
- Manager: c.RootCA.JoinTokens.Manager,
- },
- }
- heartbeatPeriod, _ := ptypes.Duration(c.Spec.Dispatcher.HeartbeatPeriod)
- swarm.Spec.Dispatcher.HeartbeatPeriod = uint64(heartbeatPeriod)
- swarm.Spec.CAConfig.NodeCertExpiry, _ = ptypes.Duration(c.Spec.CAConfig.NodeCertExpiry)
- for _, ca := range c.Spec.CAConfig.ExternalCAs {
- swarm.Spec.CAConfig.ExternalCAs = append(swarm.Spec.CAConfig.ExternalCAs, &types.ExternalCA{
- Protocol: types.ExternalCAProtocol(strings.ToLower(ca.Protocol.String())),
- URL: ca.URL,
- Options: ca.Options,
- })
- }
- // Meta
- swarm.Version.Index = c.Meta.Version.Index
- swarm.CreatedAt, _ = ptypes.Timestamp(c.Meta.CreatedAt)
- swarm.UpdatedAt, _ = ptypes.Timestamp(c.Meta.UpdatedAt)
- // Annotations
- swarm.Spec.Name = c.Spec.Annotations.Name
- swarm.Spec.Labels = c.Spec.Annotations.Labels
- return swarm
- }
- // SwarmSpecToGRPC converts a Spec to a grpc ClusterSpec.
- func SwarmSpecToGRPC(s types.Spec) (swarmapi.ClusterSpec, error) {
- spec := swarmapi.ClusterSpec{
- Annotations: swarmapi.Annotations{
- Name: s.Name,
- Labels: s.Labels,
- },
- Orchestration: swarmapi.OrchestrationConfig{
- TaskHistoryRetentionLimit: s.Orchestration.TaskHistoryRetentionLimit,
- },
- Raft: swarmapi.RaftConfig{
- SnapshotInterval: s.Raft.SnapshotInterval,
- KeepOldSnapshots: s.Raft.KeepOldSnapshots,
- LogEntriesForSlowFollowers: s.Raft.LogEntriesForSlowFollowers,
- HeartbeatTick: s.Raft.HeartbeatTick,
- ElectionTick: s.Raft.ElectionTick,
- },
- Dispatcher: swarmapi.DispatcherConfig{
- HeartbeatPeriod: ptypes.DurationProto(time.Duration(s.Dispatcher.HeartbeatPeriod)),
- },
- CAConfig: swarmapi.CAConfig{
- NodeCertExpiry: ptypes.DurationProto(s.CAConfig.NodeCertExpiry),
- },
- }
- for _, ca := range s.CAConfig.ExternalCAs {
- protocol, ok := swarmapi.ExternalCA_CAProtocol_value[strings.ToUpper(string(ca.Protocol))]
- if !ok {
- return swarmapi.ClusterSpec{}, fmt.Errorf("invalid protocol: %q", ca.Protocol)
- }
- spec.CAConfig.ExternalCAs = append(spec.CAConfig.ExternalCAs, &swarmapi.ExternalCA{
- Protocol: swarmapi.ExternalCA_CAProtocol(protocol),
- URL: ca.URL,
- Options: ca.Options,
- })
- }
- return spec, nil
- }
|