All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.gesellix.docker.client.swarm.ManageSwarmClient.groovy Maven / Gradle / Ivy

package de.gesellix.docker.client.swarm

import de.gesellix.docker.client.EngineResponseContent
import de.gesellix.docker.remote.api.EngineApiClient
import de.gesellix.docker.remote.api.Swarm
import de.gesellix.docker.remote.api.SwarmInitRequest
import de.gesellix.docker.remote.api.SwarmJoinRequest
import de.gesellix.docker.remote.api.SwarmSpec
import de.gesellix.docker.remote.api.SwarmUnlockRequest
import de.gesellix.docker.remote.api.UnlockKeyResponse
import groovy.util.logging.Slf4j

@Slf4j
class ManageSwarmClient implements ManageSwarm {

  private EngineApiClient client

  ManageSwarmClient(EngineApiClient client) {
    this.client = client
  }

  @Override
  SwarmInitRequest newSwarmInitRequest() {
    return new SwarmInitRequest(
        "0.0.0.0:2377", null,
        null, null,
        null,
        false,
        null,
        null)
  }

  @Override
  EngineResponseContent initSwarm() {
    return initSwarm(newSwarmInitRequest())
  }

  @Override
  EngineResponseContent initSwarm(SwarmInitRequest swarmInitRequest) {
    log.info("docker swarm init")
    String nodeId = client.swarmApi.swarmInit(swarmInitRequest)
    return new EngineResponseContent(nodeId)

    /*
func runInit(dockerCli *client.DockerCli, flags *pflag.FlagSet, opts initOptions) error {
client := dockerCli.Client()
ctx := context.Background()

// If no secret was specified, we create a random one
if !flags.Changed("secret") {
opts.secret = generateRandomSecret()
fmt.Fprintf(dockerCli.Out(), "No --secret provided. Generated random secret:\n\t%s\n\n", opts.secret)
}

req := swarm.InitRequest{
ListenAddr:      opts.listenAddr.String(),
ForceNewCluster: opts.forceNewCluster,
Spec:            opts.swarmOptions.ToSpec(),
}

nodeID, err := client.SwarmInit(ctx, req)
if err != nil {
return err
}

fmt.Fprintf(dockerCli.Out(), "Swarm initialized: current node (%s) is now a manager.\n\n", nodeID)

// Fetch CAHash and Address from the API
info, err := client.Info(ctx)
if err != nil {
return err
}

node, _, err := client.NodeInspectWithRaw(ctx, nodeID)
if err != nil {
return err
}

if node.ManagerStatus != nil && info.Swarm.CACertHash != "" {
var secretArgs string
if opts.secret != "" {
  secretArgs = "--secret " + opts.secret
}
fmt.Fprintf(dockerCli.Out(), "To add a worker to this swarm, run the following command:\n\tdocker swarm join %s \\\n\t--ca-hash %s \\\n\t%s\n", secretArgs, info.Swarm.CACertHash, node.ManagerStatus.Addr)
}

return nil
}
     */
  }

  @Override
  void joinSwarm(SwarmJoinRequest swarmJoinRequest) {
    log.info("docker swarm join")
    client.swarmApi.swarmJoin(swarmJoinRequest)
  }

  @Override
  void leaveSwarm(Boolean force = null) {
    log.info("docker swarm leave")
    client.swarmApi.swarmLeave(force)
  }

  @Override
  void updateSwarm(long version, SwarmSpec spec, Boolean rotateWorkerToken = null, Boolean rotateManagerToken = null, Boolean rotateManagerUnlockKey = null) {
    log.info("docker swarm update")
    client.swarmApi.swarmUpdate(version, spec, rotateWorkerToken, rotateManagerToken, rotateManagerUnlockKey)
  }

  @Override
  String getSwarmWorkerToken() {
    log.info("docker swarm join-token worker")
    Swarm swarm = inspectSwarm().content
    return swarm.joinTokens.worker
  }

  @Override
  String rotateSwarmWorkerToken() {
    log.info("docker swarm join-token rotate worker token")
    Swarm swarm = inspectSwarm().content
    client.swarmApi.swarmUpdate(swarm.version.index, swarm.spec, true, false, false)
    return getSwarmWorkerToken()
  }

  @Override
  String getSwarmManagerToken() {
    log.info("docker swarm join-token manager")
    Swarm swarm = inspectSwarm().content
    return swarm.joinTokens.manager
  }

  @Override
  String rotateSwarmManagerToken() {
    log.info("docker swarm join-token rotate manager token")
    Swarm swarm = inspectSwarm().content
    client.swarmApi.swarmUpdate(swarm.version.index, swarm.spec, false, true, false)
    return getSwarmManagerToken()
  }

  @Override
  String getSwarmManagerUnlockKey() {
    log.info("docker swarm manager unlock key")
    UnlockKeyResponse unlockkey = client.swarmApi.swarmUnlockkey()
    return unlockkey.unlockKey
  }

  @Override
  String rotateSwarmManagerUnlockKey() {
    log.info("docker swarm join-token rotate manager unlock key")
    Swarm swarm = inspectSwarm().content
    client.swarmApi.swarmUpdate(swarm.version.index, swarm.spec, false, false, true)
    return getSwarmManagerUnlockKey()
  }

  @Override
  void unlockSwarm(String unlockKey) {
    log.info("docker swarm unlock")
    client.swarmApi.swarmUnlock(new SwarmUnlockRequest(unlockKey))
  }

  @Override
  EngineResponseContent inspectSwarm() {
    log.info("docker swarm inspect")
    Swarm swarmInspect = client.swarmApi.swarmInspect()
    return new EngineResponseContent(swarmInspect)
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy