69 lines
1.6 KiB
Go
69 lines
1.6 KiB
Go
package logic
|
|
|
|
import (
|
|
"context"
|
|
"ecs/proto"
|
|
"fmt"
|
|
"github.com/docker/docker/api/types/container"
|
|
"github.com/docker/docker/api/types/filters"
|
|
"github.com/docker/docker/client"
|
|
"github.com/oylshe1314/framework/util"
|
|
"strings"
|
|
)
|
|
|
|
type AdminManager struct {
|
|
client *client.Client
|
|
context context.Context
|
|
cancel context.CancelFunc
|
|
}
|
|
|
|
func (this *AdminManager) Init() error {
|
|
var err error
|
|
this.client, err = client.NewClientWithOpts(client.WithHost("192.168.84.132:2375"), client.WithVersion("1.51"))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
this.context, this.cancel = context.WithCancel(context.Background())
|
|
return nil
|
|
}
|
|
|
|
func (this *AdminManager) Close() error {
|
|
this.cancel()
|
|
_ = this.client.Close()
|
|
return nil
|
|
}
|
|
|
|
func (this *AdminManager) ContainerList(name string) ([]*proto.Container, error) {
|
|
summaries, err := this.client.ContainerList(this.context, container.ListOptions{
|
|
Size: false,
|
|
All: false,
|
|
Latest: false,
|
|
Since: "",
|
|
Before: "",
|
|
Limit: 0,
|
|
Filters: filters.Args{},
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var containers []*proto.Container
|
|
for _, summary := range summaries {
|
|
containers = append(containers, &proto.Container{
|
|
ID: summary.ID,
|
|
Names: strings.Join(summary.Names, ","),
|
|
Image: summary.Image,
|
|
ImageID: summary.ImageID,
|
|
Command: summary.Command,
|
|
Created: summary.Created,
|
|
Ports: strings.Join(util.SliceConvert(summary.Ports, func(port container.Port) string {
|
|
return fmt.Sprint(port.IP, ":", port.PrivatePort, ":", port.PublicPort)
|
|
}), ","),
|
|
State: summary.State,
|
|
Status: summary.Status,
|
|
})
|
|
}
|
|
return containers, nil
|
|
}
|