Files
play-with-docker/scheduler/task/check_swarm_ports.go
Marcos Nils 3481442768 Initial k8s support in libplayground (#216)
* Initial k8s support in libplayground

* Make tasks never give up + custom event for k8s cluster status
2017-11-16 18:23:13 -03:00

61 lines
1.3 KiB
Go

package task
import (
"context"
"log"
"github.com/play-with-docker/play-with-docker/docker"
"github.com/play-with-docker/play-with-docker/event"
"github.com/play-with-docker/play-with-docker/pwd/types"
)
type checkSwarmPorts struct {
event event.EventApi
factory docker.FactoryApi
}
var CheckSwarmPortsEvent event.EventType
func init() {
CheckSwarmPortsEvent = event.EventType("instance docker swarm ports")
}
func (t *checkSwarmPorts) Name() string {
return "CheckSwarmPorts"
}
func (t *checkSwarmPorts) Run(ctx context.Context, instance *types.Instance) error {
dockerClient, err := t.factory.GetForInstance(instance)
if err != nil {
log.Println(err)
return err
}
status, err := getDockerSwarmStatus(ctx, dockerClient)
if err != nil {
log.Println(err)
return err
}
if !status.IsManager {
return nil
}
hosts, ps, err := dockerClient.GetSwarmPorts()
if err != nil {
log.Println(err)
return err
}
ports := make([]int, len(ps))
for i, port := range ps {
ports[i] = int(port)
}
t.event.Emit(CheckSwarmPortsEvent, instance.SessionId, ClusterPorts{Manager: instance.Name, Instances: hosts, Ports: ports})
return nil
}
func NewCheckSwarmPorts(e event.EventApi, f docker.FactoryApi) *checkSwarmPorts {
return &checkSwarmPorts{event: e, factory: f}
}