diff --git a/docker/dcb/config.go b/docker/dcb/config.go deleted file mode 100644 index fc4cb4e4..00000000 --- a/docker/dcb/config.go +++ /dev/null @@ -1,87 +0,0 @@ -package dcb - -import ( - "bytes" - "encoding/json" - "fmt" - "regexp" - - "github.com/docker/docker/api/types/swarm" - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" -) - -func ConfigList(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("config") - cmd.Add("ls") - - cmd.GetParams(req.RequestURI) - - cmd.AddFilters() - - return cmd.String() -} - -func ConfigCreate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("config") - cmd.Add("create") - - c := &swarm.ConfigSpec{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(c); err != nil { - panic(err) - } - } - - if len(c.Annotations.Labels) > 0 { - for k, v := range c.Annotations.Labels { - cmd.Add(fmt.Sprintf("--label \"%s=%s\"", k, v)) - } - } - - cmd.Add(c.Annotations.Name) - - return cmd.String() -} - -func ConfigInspect(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("config") - cmd.Add("inspect") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ConfigRemove(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("config") - cmd.Add("rm") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ConfigUpdate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("config") - cmd.Add("update") - - c := &swarm.ConfigSpec{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(c); err != nil { - panic(err) - } - } - - if len(c.Annotations.Labels) > 0 { - for k, v := range c.Annotations.Labels { - cmd.Add(fmt.Sprintf("--label \"%s=%s\"", k, v)) - } - } - - cmd.Add(c.Annotations.Name) - - return cmd.String() -} diff --git a/docker/dcb/container.go b/docker/dcb/container.go deleted file mode 100644 index 740544f7..00000000 --- a/docker/dcb/container.go +++ /dev/null @@ -1,685 +0,0 @@ -package dcb - -import ( - "bytes" - "encoding/json" - "fmt" - "regexp" - "strings" - - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/network" - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" -) - -type ContainerCreateConfig struct { - container.Config - HostConfig container.HostConfig - NetworkingConfig network.NetworkingConfig -} - -func ContainerList(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("ls") - - cmd.GetParams(req.RequestURI) - - cmd.GetParamAndAdd("all", "-a", true) - cmd.GetParamAndAdd("limit", "-n", false) - cmd.GetParamAndAdd("size", "-s", true) - - cmd.AddFilters() - - return cmd.String() -} - -func ContainerCreate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("run") - - cc := &ContainerCreateConfig{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(cc); err != nil { - panic(err) - } - } - - if cc.Tty { - cmd.Add("-t") - } - - if cc.OpenStdin { - cmd.Add("-i") - } - - if cc.AttachStdin { - cmd.Add("-a stdin") - } - - if cc.AttachStdout { - cmd.Add("-a stdout") - } - - if cc.AttachStderr { - cmd.Add("-a stderr") - } - - if len(cc.Env) > 0 { - for _, e := range cc.Env { - cmd.Add(fmt.Sprintf("--env \"%s\"", e)) - } - } - - if len(cc.Labels) > 0 { - for k, v := range cc.Labels { - cmd.Add(fmt.Sprintf("--label \"%s=%s\"", k, v)) - } - } - - if len(cc.User) > 0 { - cmd.Add(fmt.Sprintf("--user %s", cc.User)) - } - - if len(cc.WorkingDir) > 0 { - cmd.Add(fmt.Sprintf("--workdir %s", cc.WorkingDir)) - } - - if len(cc.Hostname) > 0 { - cmd.Add(fmt.Sprintf("-h %s", cc.Hostname)) - } - - if len(cc.StopSignal) > 0 { - cmd.Add(fmt.Sprintf("--stop-signal %s", cc.StopSignal)) - } - - if len(cc.HostConfig.Binds) > 0 { - for _, v := range cc.HostConfig.Binds { - cmd.Add(fmt.Sprintf("-v %s", v)) - } - } - - if len(cc.HostConfig.Links) > 0 { - for _, l := range cc.HostConfig.Links { - cmd.Add(fmt.Sprintf("--link %s", l)) - } - } - - if cc.HostConfig.Memory > 0 { - cmd.Add(fmt.Sprintf("-m %d", cc.HostConfig.Memory)) - } - - if cc.HostConfig.MemoryReservation > 0 { - cmd.Add(fmt.Sprintf("--memory-reservation %d", cc.HostConfig.MemoryReservation)) - } - - if cc.HostConfig.MemorySwap > 0 { - cmd.Add(fmt.Sprintf("--memory-swap %d", cc.HostConfig.MemorySwap)) - } - - if cc.HostConfig.MemorySwappiness != nil { - if *cc.HostConfig.MemorySwappiness > 0 { - cmd.Add(fmt.Sprintf("--memory-swappiness %d", *cc.HostConfig.MemorySwappiness)) - } - } - - if cc.HostConfig.KernelMemory > 0 { - cmd.Add(fmt.Sprintf("--kernel-memory %d", cc.HostConfig.KernelMemory)) - } - - if cc.HostConfig.CPUShares > 0 { - cmd.Add(fmt.Sprintf("--cpu-shares %d", cc.HostConfig.CPUShares)) - } - - if cc.HostConfig.CPUPeriod > 0 { - cmd.Add(fmt.Sprintf("--cpu-period %s", cc.HostConfig.CPUPeriod)) - } - - if cc.HostConfig.CPUQuota > 0 { - cmd.Add(fmt.Sprintf("--cpu-quota %s", cc.HostConfig.CPUQuota)) - } - - if len(cc.HostConfig.CpusetCpus) > 0 { - cmd.Add(fmt.Sprintf("--cpuset-cpus %s", cc.HostConfig.CpusetCpus)) - } - - if len(cc.HostConfig.CpusetMems) > 0 { - cmd.Add(fmt.Sprintf("--cpuset-mems %s", cc.HostConfig.CpusetMems)) - } - - if cc.HostConfig.BlkioWeight > 0 { - cmd.Add(fmt.Sprintf("--blkio-weight %d", cc.HostConfig.BlkioWeight)) - } - - if len(cc.HostConfig.BlkioWeightDevice) > 0 { - cmd.Add(fmt.Sprintf("--blkio-weight-device %s", cc.HostConfig.BlkioWeightDevice)) - } - - if len(cc.HostConfig.BlkioDeviceReadBps) > 0 { - for _, drb := range cc.HostConfig.BlkioDeviceReadBps { - cmd.Add(fmt.Sprintf("--device-read-bps %s:%s", drb.Path, drb.Rate)) - } - } - - if len(cc.HostConfig.BlkioDeviceWriteBps) > 0 { - for _, dwb := range cc.HostConfig.BlkioDeviceWriteBps { - cmd.Add(fmt.Sprintf("--device-write-bps %s:%s", dwb.Path, dwb.Rate)) - } - } - - if len(cc.HostConfig.BlkioDeviceReadIOps) > 0 { - for _, dri := range cc.HostConfig.BlkioDeviceReadIOps { - cmd.Add(fmt.Sprintf("--device-read-iops %s:%s", dri.Path, dri.Rate)) - } - } - - if len(cc.HostConfig.BlkioDeviceWriteIOps) > 0 { - for _, dwi := range cc.HostConfig.BlkioDeviceReadIOps { - cmd.Add(fmt.Sprintf("--device-write-iops %s:%s", dwi.Path, dwi.Rate)) - } - } - - if cc.HostConfig.OomKillDisable != nil { - if *cc.HostConfig.OomKillDisable { - cmd.Add("--oom-kill-disable") - } - } - - if cc.HostConfig.OomScoreAdj > 0 { - cmd.Add(fmt.Sprintf("--oom-score-adj %d", cc.HostConfig.OomScoreAdj)) - } - - if cc.HostConfig.PidsLimit > 0 { - cmd.Add(fmt.Sprintf("--pids-limit %d", cc.HostConfig.PidsLimit)) - } - - if cc.HostConfig.Privileged { - cmd.Add("--privileged") - } - - if cc.HostConfig.ReadonlyRootfs { - cmd.Add("--read-only") - } - - if len(cc.HostConfig.DNS) > 0 { - for _, d := range cc.HostConfig.DNS { - cmd.Add(fmt.Sprintf("--dns %s", d)) - } - } - - if len(cc.HostConfig.DNSOptions) > 0 { - for _, do := range cc.HostConfig.DNSOptions { - cmd.Add(fmt.Sprintf("--dns-opt %s", do)) - } - } - - if len(cc.HostConfig.DNSSearch) > 0 { - for _, ds := range cc.HostConfig.DNSSearch { - cmd.Add(fmt.Sprintf("--dns-search %s", ds)) - } - } - - if len(cc.HostConfig.ExtraHosts) > 0 { - for _, eh := range cc.HostConfig.ExtraHosts { - cmd.Add(fmt.Sprintf("--add-host %s", eh)) - } - } - - if len(cc.HostConfig.VolumesFrom) > 0 { - for _, vf := range cc.HostConfig.VolumesFrom { - cmd.Add(fmt.Sprintf("--volumes-from %s", vf)) - } - } - - if len(cc.HostConfig.LogConfig.Type) > 0 { - cmd.Add(fmt.Sprintf("--log-driver %s", cc.HostConfig.LogConfig.Type)) - } - - if len(cc.HostConfig.LogConfig.Config) > 0 { - for k, v := range cc.HostConfig.LogConfig.Config { - cmd.Add(fmt.Sprintf("--log-opt \"%s=%s\"", k, v)) - } - } - - //PortBindings - A map of exposed container ports and the host port they should map to. A JSON object in the form { /: [{ "HostPort": "" }] } Take note that port is specified as a string and not an integer value. - - if cc.HostConfig.PublishAllPorts { - cmd.Add("--publish-all") - } - - if len(cc.HostConfig.CapAdd) > 0 { - for _, ca := range cc.HostConfig.CapAdd { - cmd.Add(fmt.Sprintf("--cap-add %s", ca)) - } - } - - if len(cc.HostConfig.CapDrop) > 0 { - for _, cd := range cc.HostConfig.CapDrop { - cmd.Add(fmt.Sprintf("--cap-drop %s", cd)) - } - } - - if len(cc.HostConfig.GroupAdd) > 0 { - for _, ga := range cc.HostConfig.GroupAdd { - cmd.Add(fmt.Sprintf("--group-add %s", ga)) - } - } - - if len(cc.HostConfig.RestartPolicy.Name) > 0 { - cmd.Add(fmt.Sprintf("--restart %s", cc.HostConfig.RestartPolicy.Name)) - } - - if len(cc.HostConfig.UsernsMode) > 0 { - cmd.Add(fmt.Sprintf("--userns %s", cc.HostConfig.UsernsMode)) - } - - if len(cc.HostConfig.NetworkMode) > 0 { - cmd.Add(fmt.Sprintf("--net %s", cc.HostConfig.NetworkMode)) - } - - if len(cc.HostConfig.Devices) > 0 { - for _, d := range cc.HostConfig.Devices { - cmd.Add(fmt.Sprintf("--device %s", d)) - } - } - - if len(cc.HostConfig.Ulimits) > 0 { - for _, u := range cc.HostConfig.Ulimits { - cmd.Add(fmt.Sprintf("--ulimit %s", u)) - } - } - - if len(cc.HostConfig.SecurityOpt) > 0 { - for _, so := range cc.HostConfig.SecurityOpt { - cmd.Add(fmt.Sprintf("--security-opt %s", so)) - } - } - - //LogConfig - Log configuration for the container, specified as a JSON object in the form { "Type": "", "Config": {"key1": "val1"}}. Available types: json-file, syslog, journald, gelf, fluentd, awslogs, splunk, etwlogs, none. json-file logging driver. - - if len(cc.HostConfig.CgroupParent) > 0 { - cmd.Add(fmt.Sprintf("--cgroup-parent %s", cc.HostConfig.CgroupParent)) - } - - if len(cc.HostConfig.VolumeDriver) > 0 { - cmd.Add(fmt.Sprintf("--volume-driver %s", cc.HostConfig.VolumeDriver)) - } - - if cc.HostConfig.ShmSize > 0 { - cmd.Add(fmt.Sprintf("--shm-size %d", cc.HostConfig.ShmSize)) - } - - if len(cc.Entrypoint) > 0 { - cmd.Add(fmt.Sprintf("--entrypoint %s", cc.Entrypoint)) - } - - cmd.GetParams(req.RequestURI) - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("name", "--name", false) - } - - if len(cc.Image) > 0 { - cmd.Add(cc.Image) - } - - if len(cc.Cmd) > 0 { - cmd.Add(strings.Join(cc.Cmd, " ")) - } - - return cmd.String() -} - -func ContainerInspect(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("inspect") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("size", "-s", true) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerTop(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("top") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - cmd.GetParams(req.RequestURI) - if len(cmd.Params) > 0 { - if v, ok := cmd.Params["ps_args"]; ok { - cmd.Add(v[0]) - } - } - - return cmd.String() -} - -func ContainerLogs(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("logs") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("follow", "--follow", false) - cmd.GetParamAndAdd("stdout", "--stdout", false) - cmd.GetParamAndAdd("stderr", "--stderr", false) - cmd.GetParamAndAdd("since", "--since", false) - cmd.GetParamAndAdd("timestamps", "--timestamps", false) - cmd.GetParamAndAdd("tail", "--tail", false) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerChanges(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("diff") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerExport(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("export") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerStats(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("stats") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("stream", "--no-stream", true) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerResize(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("*resize*") - - return cmd.String() -} - -func ContainerStart(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("start") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("detachKeys", "--detach-keys", false) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerStop(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("stop") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("t", "--time", false) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerRestart(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("restart") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("t", "--time", false) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerKill(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("kill") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("signal", "--signal", false) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerUpdate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("update") - - uc := &container.UpdateConfig{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(uc); err != nil { - panic(err) - } - } - - if uc.BlkioWeight > 0 { - cmd.Add(fmt.Sprintf("--blkio-weight %d", uc.BlkioWeight)) - } - - if uc.CPUShares > 0 { - cmd.Add(fmt.Sprintf("--cpu-shares %d", uc.CPUShares)) - } - - if uc.CPUPeriod > 0 { - cmd.Add(fmt.Sprintf("--cpu-period %d", uc.CPUPeriod)) - } - - if uc.CPUQuota > 0 { - cmd.Add(fmt.Sprintf("--cpu-quota %d", uc.CPUQuota)) - } - - if len(uc.CpusetCpus) > 0 { - cmd.Add(fmt.Sprintf("--cpuset-cpus %s", uc.CpusetCpus)) - } - - if len(uc.CpusetMems) > 0 { - cmd.Add(fmt.Sprintf("--cpuset-mems %s", uc.CpusetMems)) - } - - if uc.Memory > 0 { - cmd.Add(fmt.Sprintf("-m %d", uc.Memory)) - } - - if uc.MemoryReservation > 0 { - cmd.Add(fmt.Sprintf("--memory-reservation %d", uc.MemoryReservation)) - } - - if uc.MemorySwap > 0 { - cmd.Add(fmt.Sprintf("--memory-swap %d", uc.MemorySwap)) - } - - if uc.MemorySwappiness != nil { - if *uc.MemorySwappiness > 0 { - cmd.Add(fmt.Sprintf("--memory-swappiness %d", uc.MemorySwappiness)) - } - } - - if uc.KernelMemory > 0 { - cmd.Add(fmt.Sprintf("--kernel-memory %d", uc.KernelMemory)) - } - - // TODO: Restart - - return cmd.String() -} - -func ContainerRename(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("rename") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - cmd.GetParams(req.RequestURI) - - if v, ok := cmd.Params["name"]; ok { - cmd.Add(v[0]) - } - - return cmd.String() -} - -func ContainerPause(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("pause") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerUnpause(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("unpause") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerAttach(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("attach") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("detachKeys", "--detach-keys", false) - - if v, ok := cmd.Params["stdin"]; ok { - if v[0] == "0" || v[0] == "false" || v[0] == "False" { - cmd.Add("--no-stdin") - } - } - - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerAttachWS(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("attach") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("detachKeys", "--detach-keys", false) - - if v, ok := cmd.Params["stdin"]; ok { - if v[0] == "0" || v[0] == "false" || v[0] == "False" { - cmd.Add("--no-stdin") - } - } - - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerWait(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("wait") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerRemove(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("rm") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("v", "-v", true) - cmd.GetParamAndAdd("f", "-f", true) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ContainerArchiveInfo(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("*archive head*") - - return cmd.String() -} - -func ContainerArchive(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("cp") - - image := re.FindStringSubmatch(urlPath)[1] - - cmd.GetParams(req.RequestURI) - - cmd.Add(fmt.Sprintf("%s:%s ", image, cmd.Params["path"])) - - return cmd.String() -} - -func ContainerArchiveExtract(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("cp") - - image := re.FindStringSubmatch(urlPath)[1] - - cmd.GetParams(req.RequestURI) - - cmd.Add(fmt.Sprintf(" %s:%s", image, cmd.Params["path"])) - - return cmd.String() -} - -func ContainerPrune(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("container") - cmd.Add("prune") - - return cmd.String() -} diff --git a/docker/dcb/distribution.go b/docker/dcb/distribution.go deleted file mode 100644 index 07847437..00000000 --- a/docker/dcb/distribution.go +++ /dev/null @@ -1,14 +0,0 @@ -package dcb - -import ( - "regexp" - - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" -) - -func DistributionInfo(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("*distribution*") - - return cmd.String() -} diff --git a/docker/dcb/exec.go b/docker/dcb/exec.go deleted file mode 100644 index 69eb171b..00000000 --- a/docker/dcb/exec.go +++ /dev/null @@ -1,76 +0,0 @@ -package dcb - -import ( - "bytes" - "encoding/json" - "fmt" - "regexp" - - "github.com/docker/docker/api/types" - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" -) - -func ContainerExecCreate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("exec") - - ec := &types.ExecConfig{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(ec); err != nil { - panic(err) - } - } - - if ec.Detach { - cmd.Add("-d") - } - - if len(ec.DetachKeys) > 0 { - cmd.Add(fmt.Sprintf("--detach-keys=%s", ec.DetachKeys)) - } - - if ec.Tty { - cmd.Add("-t") - } - - if ec.AttachStdin { - cmd.Add("-i") - } - - if ec.Privileged { - cmd.Add("--privileged") - } - - if len(ec.User) > 0 { - cmd.Add(fmt.Sprintf("-u %s", ec.User)) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - if len(ec.Cmd) > 0 { - for _, c := range ec.Cmd { - cmd.Add(c) - } - } - - return cmd.String() -} - -func ExecStart(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("exec") - - return cmd.String() -} - -func ExecResize(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("exec") - - return cmd.String() -} - -func ExecInspect(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("exec") - - return cmd.String() -} diff --git a/docker/dcb/image.go b/docker/dcb/image.go deleted file mode 100644 index 1e0e0b0b..00000000 --- a/docker/dcb/image.go +++ /dev/null @@ -1,189 +0,0 @@ -package dcb - -import ( - "fmt" - "regexp" - - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" -) - -func ImageList(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("image") - cmd.Add("ls") - - cmd.GetParams(req.RequestURI) - - cmd.GetParamAndAdd("all", "-a", true) - - cmd.AddFilters() - - return cmd.String() -} - -func ImageBuild(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("image") - cmd.Add("build") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("t", "--tag", false) - cmd.GetParamAndAdd("q", "-q", true) - cmd.GetParamAndAdd("nocache", "--no-cache", true) - cmd.GetParamAndAdd("pull", "--pull", true) - cmd.GetParamAndAdd("rm", "--rm", true) - cmd.GetParamAndAdd("forcerm", "--force-rm", true) - cmd.GetParamAndAdd("memory", "--memory", false) - cmd.GetParamAndAdd("memswap", "--memory-swap", false) - cmd.GetParamAndAdd("cpushares", "--cpu-shares", true) - cmd.GetParamAndAdd("cpusetcpus", "--cpuset-cpus", false) - cmd.GetParamAndAdd("cpusetmems", "--cpuset-mems", false) - cmd.GetParamAndAdd("cpuperiod", "--cpu-period", false) - cmd.GetParamAndAdd("cpuquota", "--cpu-quota", false) - - // TODO: buildargs - - cmd.GetParamAndAdd("shmsize", "--shm-size", false) - - // TODO: labels - - if v, ok := cmd.Params["remote"]; ok { - cmd.Add(v[0]) - } else { - cmd.GetParamAndAdd("dockerfile", "--file", false) - } - } - - return cmd.String() -} - -func ImageCreate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("image") - cmd.Add("pull") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - if v, ok := cmd.Params["fromImage"]; ok { - cmd.Add(v[0]) - } - } - - return cmd.String() -} - -func ImageInspect(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("image") - cmd.Add("inspect") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ImageHistory(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("image") - cmd.Add("history") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ImagePush(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("image") - cmd.Add("push") - - image := re.FindStringSubmatch(urlPath)[1] - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - if v, ok := cmd.Params["tag"]; ok { - cmd.Add(fmt.Sprintf("%s:%s", image, v[0])) - } - } else { - cmd.Add(image) - } - - return cmd.String() -} - -func ImageTag(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("image") - cmd.Add("tag") - - image := re.FindStringSubmatch(urlPath)[1] - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - if v, ok := cmd.Params["tag"]; ok { - cmd.Add(fmt.Sprintf("%s:%s", image, v[0])) - } - } - - return cmd.String() -} - -func ImageRemove(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("image") - cmd.Add("rm") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("force", "-f", true) - cmd.GetParamAndAdd("noprune", "--no-prune", true) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ImageSearch(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("image") - cmd.Add("search") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - if v, ok := cmd.Params["term"]; ok { - cmd.Add(v[0]) - } - } - - return cmd.String() -} - -func ImageSaveImage(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("image") - cmd.Add("save") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ImageSaveImages(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("image") - cmd.Add("save") - - return cmd.String() -} - -func ImageLoad(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("image") - cmd.Add("load") - - return cmd.String() -} - -func ImagePrune(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("image") - cmd.Add("prune") - - return cmd.String() -} diff --git a/docker/dcb/network.go b/docker/dcb/network.go deleted file mode 100644 index b1325056..00000000 --- a/docker/dcb/network.go +++ /dev/null @@ -1,199 +0,0 @@ -package dcb - -import ( - "bytes" - "encoding/json" - "fmt" - "regexp" - - "github.com/docker/docker/api/types" - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" -) - -func NetworkList(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("network") - cmd.Add("ls") - - cmd.GetParams(req.RequestURI) - - cmd.AddFilters() - - return cmd.String() -} - -func NetworkInspect(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("network") - cmd.Add("inspect") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func NetworkCreate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("network") - cmd.Add("create") - - nc := &types.NetworkCreateRequest{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(nc); err != nil { - panic(err) - } - } - - if len(nc.Driver) > 0 { - cmd.Add(fmt.Sprintf("--driver %s", nc.Driver)) - } - - if nc.Internal { - cmd.Add("--internal") - } - - if nc.EnableIPv6 { - cmd.Add("--ipv6") - } - - // IPAM - if nc.IPAM != nil { - if len(nc.IPAM.Driver) > 0 { - cmd.Add(fmt.Sprintf("--ipam-driver %s", nc.IPAM.Driver)) - } - - if len(nc.IPAM.Options) > 0 { - for k, v := range nc.IPAM.Options { - cmd.Add(fmt.Sprintf("--ipam-opt %s=%s", k, v)) - } - } - - if len(nc.IPAM.Config) > 0 { - for _, c := range nc.IPAM.Config { - if len(c.Subnet) > 0 { - cmd.Add(fmt.Sprintf("--subnet %s", c.Subnet)) - } - - if len(c.IPRange) > 0 { - cmd.Add(fmt.Sprintf("--ip-range %s", c.IPRange)) - } - - if len(c.Gateway) > 0 { - cmd.Add(fmt.Sprintf("--gateway %s", c.Gateway)) - } - - if len(c.AuxAddress) > 0 { - for k, v := range c.AuxAddress { - cmd.Add(fmt.Sprintf("--aux-address %s=%s", k, v)) - } - } - } - } - } - - // Options - if len(nc.Options) > 0 { - for k, v := range nc.Options { - cmd.Add(fmt.Sprintf("--opt %s=%s", k, v)) - } - } - - if len(nc.Labels) > 0 { - for k, v := range nc.Labels { - cmd.Add(fmt.Sprintf("--label %s=%s", k, v)) - } - } - - if len(nc.Name) > 0 { - cmd.Add(nc.Name) - } - - return cmd.String() -} - -func NetworkConnect(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("network") - cmd.Add("connect") - - nc := &types.NetworkConnect{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(nc); err != nil { - panic(err) - } - } - - if nc.EndpointConfig.IPAMConfig != nil { - if len(nc.EndpointConfig.IPAMConfig.IPv4Address) > 0 { - cmd.Add(fmt.Sprintf("--ip %s", nc.EndpointConfig.IPAMConfig.IPv4Address)) - } - - if len(nc.EndpointConfig.IPAMConfig.IPv6Address) > 0 { - cmd.Add(fmt.Sprintf("--ip6 %s", nc.EndpointConfig.IPAMConfig.IPv6Address)) - } - } - - if len(nc.EndpointConfig.Links) > 0 { - for _, v := range nc.EndpointConfig.Links { - cmd.Add(fmt.Sprintf("--link %s", v)) - } - } - - if len(nc.EndpointConfig.Aliases) > 0 { - for _, v := range nc.EndpointConfig.Aliases { - cmd.Add(fmt.Sprintf("--alias %s", v)) - } - } - - // Network ID - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - // Container - if len(nc.Container) > 0 { - cmd.Add(nc.Container) - } - - return cmd.String() -} - -func NetworkDisconnect(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("network") - cmd.Add("disconnect") - - nd := &types.NetworkDisconnect{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(nd); err != nil { - panic(err) - } - } - - if nd.Force { - cmd.Add("--force") - } - - // Network ID - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - // Container - if len(nd.Container) > 0 { - cmd.Add(nd.Container) - } - - return cmd.String() -} - -func NetworkRemove(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("network") - cmd.Add("rm") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func NetworkPrune(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("network") - cmd.Add("prune") - - return cmd.String() -} diff --git a/docker/dcb/node.go b/docker/dcb/node.go deleted file mode 100644 index d3737fe5..00000000 --- a/docker/dcb/node.go +++ /dev/null @@ -1,78 +0,0 @@ -package dcb - -import ( - "bytes" - "encoding/json" - "fmt" - "regexp" - - "github.com/docker/docker/api/types/swarm" - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" -) - -func NodeList(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("node") - cmd.Add("ls") - - cmd.GetParams(req.RequestURI) - - cmd.AddFilters() - - return cmd.String() -} - -func NodeInspect(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("node") - cmd.Add("inspect") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func NodeRemove(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("node") - cmd.Add("rm") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("force", "-f", true) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func NodeUpdate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("node") - cmd.Add("update") - - ns := &swarm.NodeSpec{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(ns); err != nil { - panic(err) - } - } - - if len(ns.Labels) > 0 { - for k, v := range ns.Labels { - cmd.Add(fmt.Sprintf("--label \"%s=%s\"", k, v)) - } - } - - if len(ns.Availability) > 0 { - cmd.Add(fmt.Sprintf("--availability %s", ns.Availability)) - } - - if len(ns.Role) > 0 { - cmd.Add(fmt.Sprintf("--role %s", ns.Role)) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} diff --git a/docker/dcb/other.go b/docker/dcb/other.go deleted file mode 100644 index 57d38679..00000000 --- a/docker/dcb/other.go +++ /dev/null @@ -1,43 +0,0 @@ -package dcb - -import ( - "fmt" - "regexp" - - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" -) - -func Commit(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("commit") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("author", "--author", false) - cmd.GetParamAndAdd("comment", "--message", false) - cmd.GetParamAndAdd("pause", "-p", true) - - // TODO: changes ; --change=[] - - if v, ok := cmd.Params["container"]; ok { - cmd.Add(v[0]) - } - - if v, ok := cmd.Params["repo"]; ok { - cmd.Add(v[0]) - } - if v, ok := cmd.Params["tag"]; ok { - cmd.Add(fmt.Sprintf(":%s", v[0])) - } - } - - return cmd.String() -} - -func TaskLogs(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("task") - cmd.Add("logs") - - return cmd.String() -} diff --git a/docker/dcb/plugin.go b/docker/dcb/plugin.go deleted file mode 100644 index 903d405b..00000000 --- a/docker/dcb/plugin.go +++ /dev/null @@ -1,125 +0,0 @@ -package dcb - -import ( - "regexp" - - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" -) - -func PluginList(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("plugin") - cmd.Add("ls") - - cmd.GetParams(req.RequestURI) - - cmd.AddFilters() - - return cmd.String() -} - -func PluginPrivileges(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("plugin") - cmd.Add("install") - - // TODO - - return cmd.String() -} - -func PluginPull(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("plugin") - cmd.Add("pull") - - // TODO - - return cmd.String() -} - -func PluginInspect(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("plugin") - cmd.Add("inspect") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func PluginRemove(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("plugin") - cmd.Add("rm") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("force", "-f", true) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func PluginEnable(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("plugin") - cmd.Add("enable") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("timeout", "--timeout", false) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func PluginDisable(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("plugin") - cmd.Add("disable") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func PluginUpgrade(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("plugin") - cmd.Add("upgrade") - - // TODO - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func PluginCreate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("plugin") - cmd.Add("create") - - // TODO - - return cmd.String() -} - -func PluginPush(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("plugin") - cmd.Add("push") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func PluginSet(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("plugin") - cmd.Add("set") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - // TODO - - return cmd.String() -} diff --git a/docker/dcb/secret.go b/docker/dcb/secret.go deleted file mode 100644 index cad77b0d..00000000 --- a/docker/dcb/secret.go +++ /dev/null @@ -1,87 +0,0 @@ -package dcb - -import ( - "bytes" - "encoding/json" - "fmt" - "regexp" - - "github.com/docker/docker/api/types/swarm" - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" -) - -func SecretList(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("secret") - cmd.Add("ls") - - cmd.GetParams(req.RequestURI) - - cmd.AddFilters() - - return cmd.String() -} - -func SecretCreate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("secret") - cmd.Add("create") - - s := &swarm.SecretSpec{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(s); err != nil { - panic(err) - } - } - - if len(s.Annotations.Labels) > 0 { - for k, v := range s.Annotations.Labels { - cmd.Add(fmt.Sprintf("--label \"%s=%s\"", k, v)) - } - } - - cmd.Add(s.Annotations.Name) - - return cmd.String() -} - -func SecretInspect(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("secret") - cmd.Add("inspect") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func SecretRemove(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("secret") - cmd.Add("rm") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func SecretUpdate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("secret") - cmd.Add("update") - - s := &swarm.SecretSpec{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(s); err != nil { - panic(err) - } - } - - if len(s.Annotations.Labels) > 0 { - for k, v := range s.Annotations.Labels { - cmd.Add(fmt.Sprintf("--label \"%s=%s\"", k, v)) - } - } - - cmd.Add(s.Annotations.Name) - - return cmd.String() -} diff --git a/docker/dcb/service.go b/docker/dcb/service.go deleted file mode 100644 index 2738d6c7..00000000 --- a/docker/dcb/service.go +++ /dev/null @@ -1,553 +0,0 @@ -package dcb - -import ( - "bytes" - "encoding/json" - "fmt" - "regexp" - "strings" - - "github.com/docker/docker/api/types/swarm" - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" -) - -func ServiceList(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("service") - cmd.Add("ls") - - cmd.GetParams(req.RequestURI) - - cmd.AddFilters() - - return cmd.String() -} - -func ServiceCreate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("service") - cmd.Add("create") - - svc := &swarm.ServiceSpec{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(svc); err != nil { - panic(err) - } - } - - if svc.TaskTemplate.Placement != nil { - if len(svc.TaskTemplate.Placement.Constraints) > 0 { - for _, constraint := range svc.TaskTemplate.Placement.Constraints { - cmd.Add(fmt.Sprintf("--constraint %s", constraint)) - } - } - } - - if len(svc.Annotations.Labels) > 0 { - for k, v := range svc.Annotations.Labels { - cmd.Add(fmt.Sprintf("--label \"%s=%s\"", k, v)) - } - } - - if svc.TaskTemplate.ContainerSpec != nil { - if len(svc.TaskTemplate.ContainerSpec.Env) > 0 { - for _, env := range svc.TaskTemplate.ContainerSpec.Env { - cmd.Add(fmt.Sprintf("--env %s", env)) - } - } - - if len(svc.TaskTemplate.ContainerSpec.Labels) > 0 { - for k, v := range svc.TaskTemplate.ContainerSpec.Labels { - cmd.Add(fmt.Sprintf("--container-label \"%s=%s\"", k, v)) - } - } - } - - if svc.TaskTemplate.Resources != nil { - if svc.TaskTemplate.Resources.Limits != nil { - if svc.TaskTemplate.Resources.Limits.NanoCPUs > 0 { - cmd.Add(fmt.Sprintf("--limit-cpu %d", svc.TaskTemplate.Resources.Limits.NanoCPUs)) - } - - if svc.TaskTemplate.Resources.Limits.MemoryBytes > 0 { - cmd.Add(fmt.Sprintf("--limit-memory %d", svc.TaskTemplate.Resources.Limits.MemoryBytes)) - } - } - - if svc.TaskTemplate.Resources.Reservations != nil { - if svc.TaskTemplate.Resources.Reservations.NanoCPUs > 0 { - cmd.Add(fmt.Sprintf("--reserve-cpu %d", svc.TaskTemplate.Resources.Reservations.NanoCPUs)) - } - - if svc.TaskTemplate.Resources.Reservations.MemoryBytes > 0 { - cmd.Add(fmt.Sprintf("--reserve-memory %d", svc.TaskTemplate.Resources.Reservations.MemoryBytes)) - } - } - } - - if svc.TaskTemplate.LogDriver != nil { - if len(svc.TaskTemplate.LogDriver.Name) > 0 { - cmd.Add(fmt.Sprintf("--log-driver %s", svc.TaskTemplate.LogDriver.Name)) - } - - if len(svc.TaskTemplate.LogDriver.Options) > 0 { - for k, v := range svc.TaskTemplate.LogDriver.Options { - cmd.Add(fmt.Sprintf("--log-opt \"%s=%s\"", k, v)) - } - } - } - - if svc.TaskTemplate.ContainerSpec != nil { - if len(svc.TaskTemplate.ContainerSpec.Mounts) > 0 { - for _, mount := range svc.TaskTemplate.ContainerSpec.Mounts { - str := []string{} - - if mount.Type == "bind" { - str = append(str, "type=bind") - } - - if len(mount.Source) > 0 { - str = append(str, fmt.Sprintf("source=%s", mount.Source)) - } - - if len(mount.Target) > 0 { - if mount.ReadOnly { - str = append(str, fmt.Sprintf("destination=%s:ro", mount.Target)) - } else { - str = append(str, fmt.Sprintf("destination=%s", mount.Target)) - } - } - - if mount.BindOptions != nil { - if len(mount.BindOptions.Propagation) > 0 { - str = append(str, fmt.Sprintf("bind-propagation=%s", mount.BindOptions.Propagation)) - } - } - - if mount.VolumeOptions != nil { - if !mount.VolumeOptions.NoCopy { - str = append(str, "volume-nocopy=false") - } - - if len(mount.VolumeOptions.Labels) > 0 { - for k, v := range mount.VolumeOptions.Labels { - str = append(str, fmt.Sprintf("volume-label=\"%s=%s\"", k, v)) - } - } - - if mount.VolumeOptions.DriverConfig != nil { - if len(mount.VolumeOptions.DriverConfig.Name) > 0 { - str = append(str, fmt.Sprintf("volume-driver=%s", mount.VolumeOptions.DriverConfig.Name)) - } - - if len(mount.VolumeOptions.DriverConfig.Options) > 0 { - for k, v := range mount.VolumeOptions.DriverConfig.Options { - str = append(str, fmt.Sprintf("volume-opt=\"%s=%s\"", k, v)) - } - } - } - - cmd.Add(strings.Join(str, ",")) - } - } - } - } - - if len(svc.Annotations.Name) > 0 { - cmd.Add(fmt.Sprintf("--name %s", svc.Annotations.Name)) - } - - if len(svc.Networks) > 0 { - nt := []string{} - - for _, network := range svc.Networks { - nt = append(nt, network.Target) - } - - cmd.Add(strings.Join(nt, ",")) - } - - if svc.EndpointSpec != nil { - if len(svc.EndpointSpec.Mode) > 0 { - cmd.Add(fmt.Sprintf("--endpoint-mode %s", svc.EndpointSpec.Mode)) - } - - if len(svc.EndpointSpec.Ports) > 0 { - for _, port := range svc.EndpointSpec.Ports { - pc := fmt.Sprintf("%d:%d", port.TargetPort, port.PublishedPort) - if len(port.Protocol) > 0 { - pc = fmt.Sprintf("%s/%s", port.Protocol, pc) - } - - cmd.Add(fmt.Sprintf("--publish %s", pc)) - } - } - } - - if svc.Mode.Replicated != nil { - /* - if svc.Mode.Replicated.Replicas != nil { - cmd.Add("--mode replicated") - } - - */ - if svc.Mode.Replicated.Replicas != nil { - cmd.Add(fmt.Sprintf("--replicas %d", *svc.Mode.Replicated.Replicas)) - } - } - - if svc.Mode.Global != nil { - cmd.Add("--mode global") - } - - if svc.TaskTemplate.RestartPolicy != nil { - if len(svc.TaskTemplate.RestartPolicy.Condition) > 0 { - cmd.Add(fmt.Sprintf("--restart-condition %s", svc.TaskTemplate.RestartPolicy.Condition)) - } - - if svc.TaskTemplate.RestartPolicy.Delay != nil { - if *svc.TaskTemplate.RestartPolicy.Delay > 0 { - cmd.Add(fmt.Sprintf("--restart-delay %d", svc.TaskTemplate.RestartPolicy.Delay)) - } - } - - if svc.TaskTemplate.RestartPolicy.MaxAttempts != nil { - if *svc.TaskTemplate.RestartPolicy.MaxAttempts > 0 { - cmd.Add(fmt.Sprintf("--restart-max-attempts %d", svc.TaskTemplate.RestartPolicy.MaxAttempts)) - } - } - - if svc.TaskTemplate.RestartPolicy.Window != nil { - if *svc.TaskTemplate.RestartPolicy.Window > 0 { - cmd.Add(fmt.Sprintf("--restart-window %d", svc.TaskTemplate.RestartPolicy.Window)) - } - } - } - - if svc.TaskTemplate.ContainerSpec != nil { - if svc.TaskTemplate.ContainerSpec.StopGracePeriod != nil { - cmd.Add(fmt.Sprintf("--stop-grace-period %s", svc.TaskTemplate.ContainerSpec.StopGracePeriod)) - } - } - - if svc.UpdateConfig != nil { - if svc.UpdateConfig.Delay > 0 { - cmd.Add(fmt.Sprintf("--update-delay %d", svc.UpdateConfig.Delay)) - } - - if len(svc.UpdateConfig.FailureAction) > 0 { - cmd.Add(fmt.Sprintf("--update-failure-action %s", svc.UpdateConfig.FailureAction)) - } - - if svc.UpdateConfig.Parallelism > 0 { - cmd.Add(fmt.Sprintf("--update-parallelism %d", svc.UpdateConfig.Parallelism)) - } - } - - if svc.TaskTemplate.ContainerSpec != nil { - if len(svc.TaskTemplate.ContainerSpec.User) > 0 { - cmd.Add(fmt.Sprintf("--user %s", svc.TaskTemplate.ContainerSpec.User)) - } - - if len(svc.TaskTemplate.ContainerSpec.Dir) > 0 { - cmd.Add(fmt.Sprintf("--workdir %s", svc.TaskTemplate.ContainerSpec.Dir)) - } - } - - if _, ok := req.RequestHeaders["X-Registry-Auth"]; ok { - cmd.Add("--with-registry-auth") - } - - if svc.TaskTemplate.ContainerSpec != nil { - if len(svc.TaskTemplate.ContainerSpec.Image) > 0 { - cmd.Add(svc.TaskTemplate.ContainerSpec.Image) - } - - if len(svc.TaskTemplate.ContainerSpec.Command) > 0 { - for _, command := range svc.TaskTemplate.ContainerSpec.Command { - cmd.Add(command) - } - } - - if len(svc.TaskTemplate.ContainerSpec.Args) > 0 { - for _, arg := range svc.TaskTemplate.ContainerSpec.Args { - cmd.Add(arg) - } - } - } - - return cmd.String() -} - -func ServiceRemove(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("service") - cmd.Add("rm") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ServiceInspect(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("service") - cmd.Add("inspect") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ServiceUpdate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("service") - cmd.Add("update") - - svc := &swarm.ServiceSpec{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(svc); err != nil { - panic(err) - } - } - - if svc.TaskTemplate.Placement != nil { - if len(svc.TaskTemplate.Placement.Constraints) > 0 { - for _, constraint := range svc.TaskTemplate.Placement.Constraints { - cmd.Add(fmt.Sprintf("--constraint %s", constraint)) - } - } - } - - if len(svc.Annotations.Labels) > 0 { - for k, v := range svc.Annotations.Labels { - cmd.Add(fmt.Sprintf("--label \"%s=%s\"", k, v)) - } - } - - if svc.TaskTemplate.ContainerSpec != nil { - if len(svc.TaskTemplate.ContainerSpec.Env) > 0 { - for _, env := range svc.TaskTemplate.ContainerSpec.Env { - cmd.Add(fmt.Sprintf("--env %s", env)) - } - } - - if len(svc.TaskTemplate.ContainerSpec.Labels) > 0 { - for k, v := range svc.TaskTemplate.ContainerSpec.Labels { - cmd.Add(fmt.Sprintf("--container-label \"%s=%s\"", k, v)) - } - } - } - - if svc.TaskTemplate.Resources != nil { - if svc.TaskTemplate.Resources.Limits != nil { - if svc.TaskTemplate.Resources.Limits.NanoCPUs > 0 { - cmd.Add(fmt.Sprintf("--limit-cpu %d", svc.TaskTemplate.Resources.Limits.NanoCPUs)) - } - - if svc.TaskTemplate.Resources.Limits.MemoryBytes > 0 { - cmd.Add(fmt.Sprintf("--limit-memory %d", svc.TaskTemplate.Resources.Limits.MemoryBytes)) - } - } - - if svc.TaskTemplate.Resources.Reservations != nil { - if svc.TaskTemplate.Resources.Reservations.NanoCPUs > 0 { - cmd.Add(fmt.Sprintf("--reserve-cpu %d", svc.TaskTemplate.Resources.Reservations.NanoCPUs)) - } - - if svc.TaskTemplate.Resources.Reservations.MemoryBytes > 0 { - cmd.Add(fmt.Sprintf("--reserve-memory %d", svc.TaskTemplate.Resources.Reservations.MemoryBytes)) - } - } - } - - if svc.TaskTemplate.LogDriver != nil { - if len(svc.TaskTemplate.LogDriver.Name) > 0 { - cmd.Add(fmt.Sprintf("--log-driver %s", svc.TaskTemplate.LogDriver.Name)) - } - - if len(svc.TaskTemplate.LogDriver.Options) > 0 { - for k, v := range svc.TaskTemplate.LogDriver.Options { - cmd.Add(fmt.Sprintf("--log-opt \"%s=%s\"", k, v)) - } - } - } - - if svc.TaskTemplate.ContainerSpec != nil { - if len(svc.TaskTemplate.ContainerSpec.Mounts) > 0 { - for _, mount := range svc.TaskTemplate.ContainerSpec.Mounts { - str := []string{} - - if mount.Type == "bind" { - str = append(str, "type=bind") - } - - if len(mount.Source) > 0 { - str = append(str, fmt.Sprintf("source=%s", mount.Source)) - } - - if len(mount.Target) > 0 { - if mount.ReadOnly { - str = append(str, fmt.Sprintf("destination=%s:ro", mount.Target)) - } else { - str = append(str, fmt.Sprintf("destination=%s", mount.Target)) - } - } - - if mount.BindOptions != nil { - if len(mount.BindOptions.Propagation) > 0 { - str = append(str, fmt.Sprintf("bind-propagation=%s", mount.BindOptions.Propagation)) - } - } - - if mount.VolumeOptions != nil { - if !mount.VolumeOptions.NoCopy { - str = append(str, "volume-nocopy=false") - } - - if len(mount.VolumeOptions.Labels) > 0 { - for k, v := range mount.VolumeOptions.Labels { - str = append(str, fmt.Sprintf("volume-label=\"%s=%s\"", k, v)) - } - } - - if mount.VolumeOptions.DriverConfig != nil { - if len(mount.VolumeOptions.DriverConfig.Name) > 0 { - str = append(str, fmt.Sprintf("volume-driver=%s", mount.VolumeOptions.DriverConfig.Name)) - } - - if len(mount.VolumeOptions.DriverConfig.Options) > 0 { - for k, v := range mount.VolumeOptions.DriverConfig.Options { - str = append(str, fmt.Sprintf("volume-opt=\"%s=%s\"", k, v)) - } - } - } - - cmd.Add(strings.Join(str, ",")) - } - } - } - } - - if len(svc.Annotations.Name) > 0 { - cmd.Add(fmt.Sprintf("--name %s", svc.Annotations.Name)) - } - - if svc.EndpointSpec != nil { - if len(svc.EndpointSpec.Mode) > 0 { - cmd.Add(fmt.Sprintf("--endpoint-mode %s", svc.EndpointSpec.Mode)) - } - - if len(svc.EndpointSpec.Ports) > 0 { - for _, port := range svc.EndpointSpec.Ports { - pc := fmt.Sprintf("%d:%d", port.TargetPort, port.PublishedPort) - if len(port.Protocol) > 0 { - pc = fmt.Sprintf("%s/%s", port.Protocol, pc) - } - - cmd.Add(fmt.Sprintf("--publish %s", pc)) - } - } - } - - if svc.Mode.Replicated != nil { - if svc.Mode.Replicated.Replicas != nil { - cmd.Add(fmt.Sprintf("--replicas %d", *svc.Mode.Replicated.Replicas)) - } - } - - if svc.TaskTemplate.RestartPolicy != nil { - if len(svc.TaskTemplate.RestartPolicy.Condition) > 0 { - cmd.Add(fmt.Sprintf("--restart-condition %s", svc.TaskTemplate.RestartPolicy.Condition)) - } - - if svc.TaskTemplate.RestartPolicy.Delay != nil { - if *svc.TaskTemplate.RestartPolicy.Delay > 0 { - cmd.Add(fmt.Sprintf("--restart-delay %d", svc.TaskTemplate.RestartPolicy.Delay)) - } - } - - if svc.TaskTemplate.RestartPolicy.MaxAttempts != nil { - if *svc.TaskTemplate.RestartPolicy.MaxAttempts > 0 { - cmd.Add(fmt.Sprintf("--restart-max-attempts %d", svc.TaskTemplate.RestartPolicy.MaxAttempts)) - } - } - - if svc.TaskTemplate.RestartPolicy.Window != nil { - if *svc.TaskTemplate.RestartPolicy.Window > 0 { - cmd.Add(fmt.Sprintf("--restart-window %d", svc.TaskTemplate.RestartPolicy.Window)) - } - } - } - - if svc.TaskTemplate.ContainerSpec != nil { - if svc.TaskTemplate.ContainerSpec.StopGracePeriod != nil { - cmd.Add(fmt.Sprintf("--stop-grace-period %s", svc.TaskTemplate.ContainerSpec.StopGracePeriod)) - } - } - - if svc.UpdateConfig != nil { - if svc.UpdateConfig.Delay > 0 { - cmd.Add(fmt.Sprintf("--update-delay %d", svc.UpdateConfig.Delay)) - } - - if len(svc.UpdateConfig.FailureAction) > 0 { - cmd.Add(fmt.Sprintf("--update-failure-action %s", svc.UpdateConfig.FailureAction)) - } - - if svc.UpdateConfig.Parallelism > 0 { - cmd.Add(fmt.Sprintf("--update-parallelism %d", svc.UpdateConfig.Parallelism)) - } - } - - if svc.TaskTemplate.ContainerSpec != nil { - if len(svc.TaskTemplate.ContainerSpec.User) > 0 { - cmd.Add(fmt.Sprintf("--user %s", svc.TaskTemplate.ContainerSpec.User)) - } - - if len(svc.TaskTemplate.ContainerSpec.Dir) > 0 { - cmd.Add(fmt.Sprintf("--workdir %s", svc.TaskTemplate.ContainerSpec.Dir)) - } - } - - if _, ok := req.RequestHeaders["X-Registry-Auth"]; ok { - cmd.Add("--with-registry-auth") - } - - if svc.TaskTemplate.ContainerSpec != nil { - if len(svc.TaskTemplate.ContainerSpec.Command) > 0 { - for _, command := range svc.TaskTemplate.ContainerSpec.Command { - cmd.Add(command) - } - } - - if len(svc.TaskTemplate.ContainerSpec.Args) > 0 { - for _, arg := range svc.TaskTemplate.ContainerSpec.Args { - cmd.Add(arg) - } - } - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func ServiceLogs(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("service") - cmd.Add("logs") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("details", "--details", true) - cmd.GetParamAndAdd("follow", "--follow", true) - cmd.GetParamAndAdd("stdout", "--stdout", true) - cmd.GetParamAndAdd("stderr", "--stderr", true) - cmd.GetParamAndAdd("since", "--since", false) - cmd.GetParamAndAdd("timestamps", "--timestamps", true) - cmd.GetParamAndAdd("tail", "--tail", false) - } - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} diff --git a/docker/dcb/stask.go b/docker/dcb/stask.go deleted file mode 100644 index 73ed8426..00000000 --- a/docker/dcb/stask.go +++ /dev/null @@ -1,28 +0,0 @@ -package dcb - -import ( - "regexp" - - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" -) - -func TaskList(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("stask") - cmd.Add("services") - - cmd.GetParams(req.RequestURI) - - cmd.AddFilters() - - return cmd.String() -} - -func TaskInspect(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("stask") - cmd.Add("tasks") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} diff --git a/docker/dcb/swarm.go b/docker/dcb/swarm.go deleted file mode 100644 index 09ed2dbd..00000000 --- a/docker/dcb/swarm.go +++ /dev/null @@ -1,151 +0,0 @@ -package dcb - -import ( - "bytes" - "encoding/json" - "fmt" - "regexp" - - "github.com/docker/docker/api/types/swarm" - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" -) - -func SwarmInspect(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("swarm") - cmd.Add("info") - - return cmd.String() -} - -func SwarmInit(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("swarm") - cmd.Add("init") - - ir := &swarm.InitRequest{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(ir); err != nil { - panic(err) - } - } - - if len(ir.ListenAddr) > 0 { - cmd.Add(fmt.Sprintf("--listen-addr=%s", ir.ListenAddr)) - } - - if len(ir.AdvertiseAddr) > 0 { - cmd.Add(fmt.Sprintf("--advertise-addr=%s", ir.AdvertiseAddr)) - } - - if ir.ForceNewCluster { - cmd.Add("--force-new-cluster") - } - - if ir.Spec.CAConfig.NodeCertExpiry > 0 { - cmd.Add(fmt.Sprintf("--cert-expiry=%d", ir.Spec.CAConfig.NodeCertExpiry)) - } - - if len(ir.Spec.CAConfig.ExternalCAs) > 0 { - cmd.Add(fmt.Sprintf("--external-ca=%d", ir.Spec.CAConfig.ExternalCAs)) - } - - if ir.Spec.Dispatcher.HeartbeatPeriod > 0 { - cmd.Add(fmt.Sprintf("--dispatcher-heartbeat=%d", ir.Spec.Dispatcher.HeartbeatPeriod)) - } - - if ir.Spec.Orchestration.TaskHistoryRetentionLimit != nil { - cmd.Add(fmt.Sprintf("--task-history-limit=%d", ir.Spec.Orchestration.TaskHistoryRetentionLimit)) - } - - return cmd.String() -} - -func SwarmJoin(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("swarm") - cmd.Add("join") - - jr := &swarm.JoinRequest{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(jr); err != nil { - panic(err) - } - } - - if len(jr.ListenAddr) > 0 { - cmd.Add(fmt.Sprintf("--listen-addr=%s", jr.ListenAddr)) - } - - if len(jr.AdvertiseAddr) > 0 { - cmd.Add(fmt.Sprintf("--advertise-addr=%s", jr.AdvertiseAddr)) - } - - if len(jr.JoinToken) > 0 { - cmd.Add(fmt.Sprintf("--token %s", jr.JoinToken)) - } - - if len(jr.RemoteAddrs) > 0 { - cmd.Add(jr.RemoteAddrs[0]) - } - - return cmd.String() -} - -func SwarmLeave(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("swarm") - cmd.Add("leave") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("force", "-f", true) - } - - return cmd.String() -} - -func SwarmUpdate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("swarm") - cmd.Add("update") - - spec := &swarm.Spec{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(spec); err != nil { - panic(err) - } - } - - if spec.CAConfig.NodeCertExpiry > 0 { - cmd.Add(fmt.Sprintf("--cert-expiry=%d", spec.CAConfig.NodeCertExpiry)) - } - - if len(spec.CAConfig.ExternalCAs) > 0 { - cmd.Add(fmt.Sprintf("--external-ca=%d", spec.CAConfig.ExternalCAs)) - } - - if spec.Dispatcher.HeartbeatPeriod > 0 { - cmd.Add(fmt.Sprintf("--dispatcher-heartbeat=%d", spec.Dispatcher.HeartbeatPeriod)) - } - - if spec.Orchestration.TaskHistoryRetentionLimit != nil { - cmd.Add(fmt.Sprintf("--task-history-limit=%d", spec.Orchestration.TaskHistoryRetentionLimit)) - } - - return cmd.String() -} - -func SwarmUnlockKey(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("swarm") - cmd.Add("unlock-key") - - return cmd.String() -} - -func SwarmUnlock(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("swarm") - cmd.Add("unlock") - - return cmd.String() -} diff --git a/docker/dcb/system.go b/docker/dcb/system.go deleted file mode 100644 index 27a3be8b..00000000 --- a/docker/dcb/system.go +++ /dev/null @@ -1,80 +0,0 @@ -package dcb - -import ( - "bytes" - "encoding/json" - "fmt" - "regexp" - - "github.com/docker/docker/api/types" - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" -) - -func Auth(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("login") - - ac := &types.AuthConfig{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(ac); err != nil { - panic(err) - } - } - - if len(ac.Username) > 0 { - cmd.Add(fmt.Sprintf("-u %s", ac.Username)) - } - - if len(ac.ServerAddress) > 0 { - cmd.Add(ac.ServerAddress) - } - - return cmd.String() -} - -func Info(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("system") - cmd.Add("info") - - return cmd.String() -} - -func Version(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("version") - - return cmd.String() -} - -func Ping(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("*ping*") - - return cmd.String() -} - -func Events(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("system") - cmd.Add("events") - - cmd.GetParams(req.RequestURI) - - if len(cmd.Params) > 0 { - cmd.GetParamAndAdd("since", "--since", false) - cmd.GetParamAndAdd("until", "--until", false) - - cmd.AddFilters() - } - - return cmd.String() -} - -func SystemDF(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("system") - cmd.Add("df") - - return cmd.String() -} - -func Anyroute(req authorization.Request, urlPath string, re *regexp.Regexp) string { - return "" -} diff --git a/docker/dcb/volume.go b/docker/dcb/volume.go deleted file mode 100644 index 819ea2f3..00000000 --- a/docker/dcb/volume.go +++ /dev/null @@ -1,88 +0,0 @@ -package dcb - -import ( - "bytes" - "encoding/json" - "fmt" - "regexp" - - "github.com/docker/docker/api/types/volume" - "github.com/docker/go-plugins-helpers/authorization" - "github.com/kassisol/hbm/pkg/cmdbuilder" - "github.com/kassisol/hbm/pkg/utils" -) - -func VolumeList(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("volume") - cmd.Add("ls") - - cmd.GetParams(req.RequestURI) - - cmd.AddFilters() - - return cmd.String() -} - -func VolumeCreate(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("volume") - cmd.Add("create") - - vol := &volume.VolumesCreateBody{} - - if req.RequestBody != nil { - if err := json.NewDecoder(bytes.NewReader(req.RequestBody)).Decode(vol); err != nil { - panic(err) - } - } - - if len(vol.Driver) > 0 { - cmd.Add(fmt.Sprintf("--driver %s", vol.Driver)) - } - - if len(vol.DriverOpts) > 0 { - for k, v := range vol.DriverOpts { - if utils.ContainsPasswordString(k) { - cmd.Add(fmt.Sprintf("--opt %s=xxx", k)) - } else { - cmd.Add(fmt.Sprintf("--opt %s=%s", k, v)) - } - } - } - - if len(vol.Labels) > 0 { - for k, v := range vol.Labels { - cmd.Add(fmt.Sprintf("--label %s=%s", k, v)) - } - } - - if len(vol.Name) > 0 { - cmd.Add(fmt.Sprintf("--name %s", vol.Name)) - } - - return cmd.String() -} - -func VolumeInspect(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("volume") - cmd.Add("inspect") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func VolumeRemove(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("volume") - cmd.Add("rm") - - cmd.Add(re.FindStringSubmatch(urlPath)[1]) - - return cmd.String() -} - -func VolumePrune(req authorization.Request, urlPath string, re *regexp.Regexp) string { - cmd := cmdbuilder.New("volume") - cmd.Add("prune") - - return cmd.String() -} diff --git a/docker/endpoint/endpoint.go b/docker/endpoint/endpoint.go index ca34adc9..4d8e30f3 100644 --- a/docker/endpoint/endpoint.go +++ b/docker/endpoint/endpoint.go @@ -2,126 +2,125 @@ package endpoint import ( "github.com/kassisol/hbm/docker/allow" - "github.com/kassisol/hbm/docker/dcb" "github.com/kassisol/hbm/pkg/uri" ) func GetUris() *uri.URIs { uris := uri.New() - uris.Register("GET", `^/containers/json`, allow.True, dcb.ContainerList, "container_list", "container ls", "List containers") - uris.Register("POST", `^/containers/create`, allow.ContainerCreate, dcb.ContainerCreate, "container_create", "container create", "Create a container") - uris.Register("GET", `^/containers/(.+)/json`, allow.True, dcb.ContainerInspect, "container_inspect", "container inspect", "Return low-level information about a container") - uris.Register("GET", `^/containers/(.+)/top`, allow.True, dcb.ContainerTop, "container_top", "container top", "List processes running inside a container") - uris.Register("GET", `^/containers/(.+)/logs`, allow.True, dcb.ContainerLogs, "container_logs", "container logs", "Get stdout and stderr logs from a container") - uris.Register("GET", `^/containers/(.+)/changes`, allow.True, dcb.ContainerChanges, "container_changes", "events", "Returns which files in a container's filesystem have been added, deleted, or modified") - uris.Register("GET", `^/containers/(.+)/export`, allow.True, dcb.ContainerExport, "container_export", "container export", "Export the contents of a container as a tarball") - uris.Register("GET", `^/containers/(.+)/stats`, allow.True, dcb.ContainerStats, "container_stats", "container stats", "The endpoint returns a live stream of a container's resource usage statistics") - uris.Register("POST", `^/containers/(.+)/resize`, allow.True, dcb.ContainerResize, "container_resize", "resize", "Resize the TTY for a container") - uris.Register("POST", `^/containers/(.+)/start`, allow.True, dcb.ContainerStart, "container_start", "container start", "Start a container") - uris.Register("POST", `^/containers/(.+)/stop`, allow.True, dcb.ContainerStop, "container_stop", "container stop", "Stop a container") - uris.Register("POST", `^/containers/(.+)/restart`, allow.True, dcb.ContainerRestart, "container_restart", "container restart", "Restart a container") - uris.Register("POST", `^/containers/(.+)/kill`, allow.True, dcb.ContainerKill, "container_kill", "container kill", "Kill a container") - uris.Register("POST", `^/containers/(.+)/update`, allow.True, dcb.ContainerUpdate, "container_update", "container update", "Change various configuration options of a container without having to recreate it") - uris.Register("POST", `^/containers/(.+)/rename`, allow.True, dcb.ContainerRename, "container_rename", "container rename", "Rename a container") - uris.Register("POST", `^/containers/(.+)/pause`, allow.True, dcb.ContainerPause, "container_pause", "container pause", "Use the cgroups freezer to suspend all processes in a container") - uris.Register("POST", `^/containers/(.+)/unpause`, allow.True, dcb.ContainerUnpause, "container_unpause", "container unpause", "Resume a container which has been paused") - uris.Register("POST", `^/containers/(.+)/attach`, allow.True, dcb.ContainerAttach, "container_attach", "container attach", "Attach to a container to read its output or send it input") - uris.Register("GET", `^/containers/(.+)/attach/ws`, allow.True, dcb.ContainerAttachWS, "container_attach_ws", "attach_ws", "Attach to a container via a websocket") - uris.Register("POST", `^/containers/(.+)/wait`, allow.True, dcb.ContainerWait, "container_wait", "container wait", "Block until a container stops, then returns the exit code") - uris.Register("DELETE", `^/containers/(.+)`, allow.True, dcb.ContainerRemove, "container_remove", "container rm", "Remove a container") - uris.Register("HEAD", `^/containers/(.+)/archive`, allow.True, dcb.ContainerArchiveInfo, "container_archive_info", "archive", "Get information about files in a container") - uris.Register("GET", `^/containers/(.+)/archive`, allow.True, dcb.ContainerArchive, "container_archive", "archive", "Get a tar archive of a resource in the filesystem of container id") - uris.Register("PUT", `^/containers/(.+)/archive`, allow.True, dcb.ContainerArchiveExtract, "container_archive_extract", "archive", "Upload a tar archive to be extracted to a path in the filesystem of container id") - uris.Register("POST", `^/containers/prune`, allow.True, dcb.ContainerPrune, "container_prune", "container prune", "Delete stopped containers") - - uris.Register("GET", `^/images/json`, allow.True, dcb.ImageList, "image_list", "image ls", "Returns a list of images on the server") - uris.Register("POST", `^/build`, allow.True, dcb.ImageBuild, "image_build", "image build", "Build an image from a tar archive with a Dockerfile in it") - uris.Register("POST", `^/images/create`, allow.ImageCreate, dcb.ImageCreate, "image_create", "image pull", "Create an image by either pulling it from a registry or importing it") - uris.Register("GET", `^/images/(.+)/json`, allow.True, dcb.ImageInspect, "image_inspect", "image inspect", "Return low-level information about an image") - uris.Register("GET", `^/images/(.+)/history`, allow.True, dcb.ImageHistory, "image_history", "image history", "Return parent layers of an image") - uris.Register("POST", `^/images/(.+)/push`, allow.True, dcb.ImagePush, "image_push", "image push", "Push an image to a registry") - uris.Register("POST", `^/images/(.+)/tag`, allow.True, dcb.ImageTag, "image_tag", "image tag", "Tag an image so that it becomes part of a repository") - uris.Register("DELETE", `^/images/(.+)`, allow.True, dcb.ImageRemove, "image_remove", "image rm", "Remove an image, along with any untagged parent images that were referenced by that image") - uris.Register("GET", `^/images/search`, allow.True, dcb.ImageSearch, "image_search", "search", "Search for an image on Docker Hub") - uris.Register("POST", `^/images/prune`, allow.True, dcb.ImagePrune, "image_prune", "image prune", "Delete unused images") - uris.Register("POST", `^/commit`, allow.True, dcb.Commit, "commit", "commit", "Create a new image from a container") - uris.Register("GET", `^/images/(.+)/get`, allow.True, dcb.ImageSaveImage, "image_save_image", "image save", "Get a tarball containing all images and metadata for a repository") - uris.Register("GET", `^/images/get`, allow.True, dcb.ImageSaveImages, "image_save_images", "image save", "Get a tarball containing all images and metadata for several image repositories") - uris.Register("POST", `^/images/load`, allow.True, dcb.ImageLoad, "image_load", "image load", "Load a set of images and tags into a repository") - - uris.Register("GET", `^/networks$`, allow.True, dcb.NetworkList, "network_list", "network ls", "Return a list of networks") - uris.Register("GET", `^/networks/(.+)`, allow.True, dcb.NetworkInspect, "network_inspect", "network inspect", "Inspect a network") - uris.Register("DELETE", `^/networks/(.+)`, allow.True, dcb.NetworkRemove, "network_remove", "network rm", "Remove a network") - uris.Register("POST", `^/networks/create`, allow.True, dcb.NetworkCreate, "network_create", "network create", "Create a network") - uris.Register("POST", `^/networks/(.+)/connect`, allow.True, dcb.NetworkConnect, "network_connect", "network connect", "Connect container to a network") - uris.Register("POST", `^/networks/(.+)/disconnect`, allow.True, dcb.NetworkDisconnect, "network_disconnect", "network disconnect", "Disconnect a container from a network") - uris.Register("POST", `^/networks/prune`, allow.True, dcb.NetworkPrune, "network_prune", "network prune", "Delete unused networks") - - uris.Register("GET", `^/volumes$`, allow.True, dcb.VolumeList, "volume_list", "volume ls", "List volumes") - uris.Register("POST", `^/volumes/create`, allow.True, dcb.VolumeCreate, "volume_create", "volume create", "Create a volume") - uris.Register("GET", `^/volumes/(.+)`, allow.True, dcb.VolumeInspect, "volume_inspect", "volume inspect", "Inspect a volume") - uris.Register("DELETE", `^/volumes/(.+)`, allow.True, dcb.VolumeRemove, "volume_remove", "volume rm", "Instruct the driver to remove the volume") - uris.Register("POST", `^/volumes/prune`, allow.True, dcb.VolumePrune, "volume_prune", "volume prune", "Delete unused volumes") - - uris.Register("POST", `^/containers/(.+)/exec`, allow.True, dcb.ContainerExecCreate, "container_exec_create", "exec", "Run a command inside a running container") - uris.Register("POST", `^/exec/(.+)/start`, allow.True, dcb.ExecStart, "exec_start", "exec", "Starts a previously set up exec instance") - uris.Register("POST", `^/exec/(.+)/resize`, allow.True, dcb.ExecResize, "exec_resize", "exec", "Resize the TTY session used by an exec instance") - uris.Register("GET", `^/exec/(.+)/json`, allow.True, dcb.ExecInspect, "exec_inspect", "exec", "Return low-level information about an exec instance") - - uris.Register("GET", `^/swarm`, allow.True, dcb.SwarmInspect, "swarm_inspect", "swarm info", "Inspect swarm") - uris.Register("POST", `^/swarm/init`, allow.True, dcb.SwarmInit, "swarm_init", "swarm init", "Initialize a new swarm") - uris.Register("POST", `^/swarm/join`, allow.True, dcb.SwarmJoin, "swarm_join", "swarm join", "Join an existing swarm") - uris.Register("POST", `^/swarm/leave`, allow.True, dcb.SwarmLeave, "swarm_leave", "swarm leave", "Leave a swarm") - uris.Register("POST", `^/swarm/update`, allow.True, dcb.SwarmUpdate, "swarm_update", "swarm update", "Update a swarm") - uris.Register("GET", `^/swarm/unlockkey`, allow.True, dcb.SwarmUnlockKey, "swarm_unlock_key", "swarm unlock", "Get the unlock key") - uris.Register("POST", `^/swarm/unlock`, allow.True, dcb.SwarmUnlock, "swarm_unlock", "swarm unlock", "Unlock a locked manager") - - uris.Register("GET", `^/nodes`, allow.True, dcb.NodeList, "node_list", "node ls", "List nodes") - uris.Register("GET", `^/nodes/(.+)`, allow.True, dcb.NodeInspect, "node_inspect", "node inspect", "Inspect a node") - uris.Register("DELETE", `^/nodes/(.+)`, allow.True, dcb.NodeRemove, "node_remove", "node rm", "Delete a node") - uris.Register("POST", `^/nodes/(.+)/update`, allow.True, dcb.NodeUpdate, "node_update", "node update", "Update a node") - - uris.Register("GET", `^/services`, allow.True, dcb.ServiceList, "service_list", "service ls", "List services") - uris.Register("POST", `^/services/create`, allow.ServiceCreate, dcb.ServiceCreate, "service_create", "service create", "Create a service") - uris.Register("GET", `^/services/(.+)`, allow.True, dcb.ServiceInspect, "service_inspect", "service inspect", "Inspect a service") - uris.Register("DELETE", `^/services/(.+)`, allow.True, dcb.ServiceRemove, "service_remove", "service rm", "Delete a service") - uris.Register("POST", `^/services/(.+)/update`, allow.ServiceCreate, dcb.ServiceUpdate, "service_update", "service update", "Update a service") - uris.Register("GET", `^/services/(.+)/logs`, allow.True, dcb.ServiceLogs, "service_logs", "service logs", "Get service logs") - - uris.Register("GET", `^/tasks`, allow.True, dcb.TaskList, "task_list", "stask services", "List tasks") - uris.Register("GET", `^/tasks/(.+)`, allow.True, dcb.TaskInspect, "task_inspect", "stask tasks", "Inspect a task") - uris.Register("GET", `^/tasks/(.+)/logs`, allow.True, dcb.TaskLogs, "task_logs", "task logs", "Get stdout and stderr logs from a task") - - uris.Register("GET", `^/secrets`, allow.True, dcb.SecretList, "secret_list", "secret ls", "List secrets") - uris.Register("POST", `^/secrets/create`, allow.True, dcb.SecretCreate, "secret_create", "secret create", "Create a secret") - uris.Register("GET", `^/secrets/(.+)`, allow.True, dcb.SecretInspect, "secret_inspect", "secret inspect", "Inspect a secret") - uris.Register("DELETE", `^/secrets/(.+)`, allow.True, dcb.SecretRemove, "secret_remove", "secret rm", "Delete a secret") - uris.Register("POST", `^/secrets/(.+)/update`, allow.True, dcb.SecretUpdate, "secret_update", "secret update", "Update a secret") - - uris.Register("GET", `^/configs`, allow.True, dcb.ConfigList, "config_list", "config ls", "List configs") - uris.Register("POST", `^/configs/create`, allow.True, dcb.ConfigCreate, "config_create", "config create", "Create a config") - uris.Register("GET", `^/configs/(.+)`, allow.True, dcb.ConfigInspect, "config_inspect", "config inspect", "Inspect a config") - uris.Register("DELETE", `^/configs/(.+)`, allow.True, dcb.ConfigRemove, "config_remove", "config rm", "Delete a config") - uris.Register("POST", `^/configs/(.+)/update`, allow.True, dcb.ConfigUpdate, "config_update", "config update", "Update a config") - - uris.Register("GET", `^/plugins`, allow.True, dcb.PluginList, "plugin_list", "plugin ls", "Returns information about installed plugins") - uris.Register("GET", `^/plugins/privileges`, allow.True, dcb.PluginPrivileges, "plugin_privileges", "plugin ls", "Get plugin privileges") - uris.Register("POST", `^/plugins/pull`, allow.PluginPull, dcb.PluginPull, "plugin_pull", "plugin install", "Pulls and installs a plugin") - uris.Register("GET", `^/plugins/(.+)/json`, allow.True, dcb.PluginInspect, "plugin_inspect", "plugin inspect", "Inspect a plugin") - uris.Register("DELETE", `^/plugins/(.+)`, allow.True, dcb.PluginRemove, "plugin_remove", "plugin rm", "Delete a plugin") - uris.Register("POST", `^/plugins/(.+)/enable`, allow.True, dcb.PluginEnable, "plugin_enable", "plugin enable", "Enable a plugin") - uris.Register("POST", `^/plugins/(.+)/disable`, allow.True, dcb.PluginDisable, "plugin_disable", "plugin disable", "Disable a plugin") - uris.Register("POST", `^/plugins/(.+)/upgrade`, allow.True, dcb.PluginUpgrade, "plugin_upgrade", "plugin upgrade", "Upgrade a plugin") - uris.Register("POST", `^/plugins/create`, allow.True, dcb.PluginCreate, "plugin_create", "plugin create", "Create a plugin") - uris.Register("POST", `^/plugins/(.+)/push`, allow.True, dcb.PluginPush, "plugin_push", "plugin push", "Push a plugin") - uris.Register("POST", `^/plugins/(.+)/set`, allow.True, dcb.PluginSet, "plugin_set", "plugin set", "Configure a plugin") - - uris.Register("POST", `^/auth`, allow.True, dcb.Auth, "auth", "login", "Log in to a Docker registry") - uris.Register("GET", `^/info`, allow.True, dcb.Info, "info", "info", "Display system-wide information") - uris.Register("GET", `^/version`, allow.True, dcb.Version, "version", "version", "Show the Docker version information") - uris.Register("GET", `^/events`, allow.True, dcb.Events, "events", "events", "Monitor Docker's events") - uris.Register("GET", `^/system/df`, allow.True, dcb.SystemDF, "system_df", "system df", "Get data usage information") + uris.Register("GET", `^/containers/json`, allow.True, "container_list", "container ls", "List containers") + uris.Register("POST", `^/containers/create`, allow.ContainerCreate, "container_create", "container create", "Create a container") + uris.Register("GET", `^/containers/(.+)/json`, allow.True, "container_inspect", "container inspect", "Return low-level information about a container") + uris.Register("GET", `^/containers/(.+)/top`, allow.True, "container_top", "container top", "List processes running inside a container") + uris.Register("GET", `^/containers/(.+)/logs`, allow.True, "container_logs", "container logs", "Get stdout and stderr logs from a container") + uris.Register("GET", `^/containers/(.+)/changes`, allow.True, "container_changes", "events", "Returns which files in a container's filesystem have been added, deleted, or modified") + uris.Register("GET", `^/containers/(.+)/export`, allow.True, "container_export", "container export", "Export the contents of a container as a tarball") + uris.Register("GET", `^/containers/(.+)/stats`, allow.True, "container_stats", "container stats", "The endpoint returns a live stream of a container's resource usage statistics") + uris.Register("POST", `^/containers/(.+)/resize`, allow.True, "container_resize", "resize", "Resize the TTY for a container") + uris.Register("POST", `^/containers/(.+)/start`, allow.True, "container_start", "container start", "Start a container") + uris.Register("POST", `^/containers/(.+)/stop`, allow.True, "container_stop", "container stop", "Stop a container") + uris.Register("POST", `^/containers/(.+)/restart`, allow.True, "container_restart", "container restart", "Restart a container") + uris.Register("POST", `^/containers/(.+)/kill`, allow.True, "container_kill", "container kill", "Kill a container") + uris.Register("POST", `^/containers/(.+)/update`, allow.True, "container_update", "container update", "Change various configuration options of a container without having to recreate it") + uris.Register("POST", `^/containers/(.+)/rename`, allow.True, "container_rename", "container rename", "Rename a container") + uris.Register("POST", `^/containers/(.+)/pause`, allow.True, "container_pause", "container pause", "Use the cgroups freezer to suspend all processes in a container") + uris.Register("POST", `^/containers/(.+)/unpause`, allow.True, "container_unpause", "container unpause", "Resume a container which has been paused") + uris.Register("POST", `^/containers/(.+)/attach`, allow.True, "container_attach", "container attach", "Attach to a container to read its output or send it input") + uris.Register("GET", `^/containers/(.+)/attach/ws`, allow.True, "container_attach_ws", "attach_ws", "Attach to a container via a websocket") + uris.Register("POST", `^/containers/(.+)/wait`, allow.True, "container_wait", "container wait", "Block until a container stops, then returns the exit code") + uris.Register("DELETE", `^/containers/(.+)`, allow.True, "container_remove", "container rm", "Remove a container") + uris.Register("HEAD", `^/containers/(.+)/archive`, allow.True, "container_archive_info", "archive", "Get information about files in a container") + uris.Register("GET", `^/containers/(.+)/archive`, allow.True, "container_archive", "archive", "Get a tar archive of a resource in the filesystem of container id") + uris.Register("PUT", `^/containers/(.+)/archive`, allow.True, "container_archive_extract", "archive", "Upload a tar archive to be extracted to a path in the filesystem of container id") + uris.Register("POST", `^/containers/prune`, allow.True, "container_prune", "container prune", "Delete stopped containers") + + uris.Register("GET", `^/images/json`, allow.True, "image_list", "image ls", "Returns a list of images on the server") + uris.Register("POST", `^/build`, allow.True, "image_build", "image build", "Build an image from a tar archive with a Dockerfile in it") + uris.Register("POST", `^/images/create`, allow.ImageCreate, "image_create", "image pull", "Create an image by either pulling it from a registry or importing it") + uris.Register("GET", `^/images/(.+)/json`, allow.True, "image_inspect", "image inspect", "Return low-level information about an image") + uris.Register("GET", `^/images/(.+)/history`, allow.True, "image_history", "image history", "Return parent layers of an image") + uris.Register("POST", `^/images/(.+)/push`, allow.True, "image_push", "image push", "Push an image to a registry") + uris.Register("POST", `^/images/(.+)/tag`, allow.True, "image_tag", "image tag", "Tag an image so that it becomes part of a repository") + uris.Register("DELETE", `^/images/(.+)`, allow.True, "image_remove", "image rm", "Remove an image, along with any untagged parent images that were referenced by that image") + uris.Register("GET", `^/images/search`, allow.True, "image_search", "search", "Search for an image on Docker Hub") + uris.Register("POST", `^/images/prune`, allow.True, "image_prune", "image prune", "Delete unused images") + uris.Register("POST", `^/commit`, allow.True, "commit", "commit", "Create a new image from a container") + uris.Register("GET", `^/images/(.+)/get`, allow.True, "image_save_image", "image save", "Get a tarball containing all images and metadata for a repository") + uris.Register("GET", `^/images/get`, allow.True, "image_save_images", "image save", "Get a tarball containing all images and metadata for several image repositories") + uris.Register("POST", `^/images/load`, allow.True, "image_load", "image load", "Load a set of images and tags into a repository") + + uris.Register("GET", `^/networks$`, allow.True, "network_list", "network ls", "Return a list of networks") + uris.Register("GET", `^/networks/(.+)`, allow.True, "network_inspect", "network inspect", "Inspect a network") + uris.Register("DELETE", `^/networks/(.+)`, allow.True, "network_remove", "network rm", "Remove a network") + uris.Register("POST", `^/networks/create`, allow.True, "network_create", "network create", "Create a network") + uris.Register("POST", `^/networks/(.+)/connect`, allow.True, "network_connect", "network connect", "Connect container to a network") + uris.Register("POST", `^/networks/(.+)/disconnect`, allow.True, "network_disconnect", "network disconnect", "Disconnect a container from a network") + uris.Register("POST", `^/networks/prune`, allow.True, "network_prune", "network prune", "Delete unused networks") + + uris.Register("GET", `^/volumes$`, allow.True, "volume_list", "volume ls", "List volumes") + uris.Register("POST", `^/volumes/create`, allow.True, "volume_create", "volume create", "Create a volume") + uris.Register("GET", `^/volumes/(.+)`, allow.True, "volume_inspect", "volume inspect", "Inspect a volume") + uris.Register("DELETE", `^/volumes/(.+)`, allow.True, "volume_remove", "volume rm", "Instruct the driver to remove the volume") + uris.Register("POST", `^/volumes/prune`, allow.True, "volume_prune", "volume prune", "Delete unused volumes") + + uris.Register("POST", `^/containers/(.+)/exec`, allow.True, "container_exec_create", "exec", "Run a command inside a running container") + uris.Register("POST", `^/exec/(.+)/start`, allow.True, "exec_start", "exec", "Starts a previously set up exec instance") + uris.Register("POST", `^/exec/(.+)/resize`, allow.True, "exec_resize", "exec", "Resize the TTY session used by an exec instance") + uris.Register("GET", `^/exec/(.+)/json`, allow.True, "exec_inspect", "exec", "Return low-level information about an exec instance") + + uris.Register("GET", `^/swarm`, allow.True, "swarm_inspect", "swarm info", "Inspect swarm") + uris.Register("POST", `^/swarm/init`, allow.True, "swarm_init", "swarm init", "Initialize a new swarm") + uris.Register("POST", `^/swarm/join`, allow.True, "swarm_join", "swarm join", "Join an existing swarm") + uris.Register("POST", `^/swarm/leave`, allow.True, "swarm_leave", "swarm leave", "Leave a swarm") + uris.Register("POST", `^/swarm/update`, allow.True, "swarm_update", "swarm update", "Update a swarm") + uris.Register("GET", `^/swarm/unlockkey`, allow.True, "swarm_unlock_key", "swarm unlock", "Get the unlock key") + uris.Register("POST", `^/swarm/unlock`, allow.True, "swarm_unlock", "swarm unlock", "Unlock a locked manager") + + uris.Register("GET", `^/nodes`, allow.True, "node_list", "node ls", "List nodes") + uris.Register("GET", `^/nodes/(.+)`, allow.True, "node_inspect", "node inspect", "Inspect a node") + uris.Register("DELETE", `^/nodes/(.+)`, allow.True, "node_remove", "node rm", "Delete a node") + uris.Register("POST", `^/nodes/(.+)/update`, allow.True, "node_update", "node update", "Update a node") + + uris.Register("GET", `^/services`, allow.True, "service_list", "service ls", "List services") + uris.Register("POST", `^/services/create`, allow.ServiceCreate, "service_create", "service create", "Create a service") + uris.Register("GET", `^/services/(.+)`, allow.True, "service_inspect", "service inspect", "Inspect a service") + uris.Register("DELETE", `^/services/(.+)`, allow.True, "service_remove", "service rm", "Delete a service") + uris.Register("POST", `^/services/(.+)/update`, allow.ServiceCreate, "service_update", "service update", "Update a service") + uris.Register("GET", `^/services/(.+)/logs`, allow.True, "service_logs", "service logs", "Get service logs") + + uris.Register("GET", `^/tasks`, allow.True, "task_list", "stask services", "List tasks") + uris.Register("GET", `^/tasks/(.+)`, allow.True, "task_inspect", "stask tasks", "Inspect a task") + uris.Register("GET", `^/tasks/(.+)/logs`, allow.True, "task_logs", "task logs", "Get stdout and stderr logs from a task") + + uris.Register("GET", `^/secrets`, allow.True, "secret_list", "secret ls", "List secrets") + uris.Register("POST", `^/secrets/create`, allow.True, "secret_create", "secret create", "Create a secret") + uris.Register("GET", `^/secrets/(.+)`, allow.True, "secret_inspect", "secret inspect", "Inspect a secret") + uris.Register("DELETE", `^/secrets/(.+)`, allow.True, "secret_remove", "secret rm", "Delete a secret") + uris.Register("POST", `^/secrets/(.+)/update`, allow.True, "secret_update", "secret update", "Update a secret") + + uris.Register("GET", `^/configs`, allow.True, "config_list", "config ls", "List configs") + uris.Register("POST", `^/configs/create`, allow.True, "config_create", "config create", "Create a config") + uris.Register("GET", `^/configs/(.+)`, allow.True, "config_inspect", "config inspect", "Inspect a config") + uris.Register("DELETE", `^/configs/(.+)`, allow.True, "config_remove", "config rm", "Delete a config") + uris.Register("POST", `^/configs/(.+)/update`, allow.True, "config_update", "config update", "Update a config") + + uris.Register("GET", `^/plugins`, allow.True, "plugin_list", "plugin ls", "Returns information about installed plugins") + uris.Register("GET", `^/plugins/privileges`, allow.True, "plugin_privileges", "plugin ls", "Get plugin privileges") + uris.Register("POST", `^/plugins/pull`, allow.PluginPull, "plugin_pull", "plugin install", "Pulls and installs a plugin") + uris.Register("GET", `^/plugins/(.+)/json`, allow.True, "plugin_inspect", "plugin inspect", "Inspect a plugin") + uris.Register("DELETE", `^/plugins/(.+)`, allow.True, "plugin_remove", "plugin rm", "Delete a plugin") + uris.Register("POST", `^/plugins/(.+)/enable`, allow.True, "plugin_enable", "plugin enable", "Enable a plugin") + uris.Register("POST", `^/plugins/(.+)/disable`, allow.True, "plugin_disable", "plugin disable", "Disable a plugin") + uris.Register("POST", `^/plugins/(.+)/upgrade`, allow.True, "plugin_upgrade", "plugin upgrade", "Upgrade a plugin") + uris.Register("POST", `^/plugins/create`, allow.True, "plugin_create", "plugin create", "Create a plugin") + uris.Register("POST", `^/plugins/(.+)/push`, allow.True, "plugin_push", "plugin push", "Push a plugin") + uris.Register("POST", `^/plugins/(.+)/set`, allow.True, "plugin_set", "plugin set", "Configure a plugin") + + uris.Register("POST", `^/auth`, allow.True, "auth", "login", "Log in to a Docker registry") + uris.Register("GET", `^/info`, allow.True, "info", "info", "Display system-wide information") + uris.Register("GET", `^/version`, allow.True, "version", "version", "Show the Docker version information") + uris.Register("GET", `^/events`, allow.True, "events", "events", "Monitor Docker's events") + uris.Register("GET", `^/system/df`, allow.True, "system_df", "system df", "Get data usage information") return uris } diff --git a/pkg/cmdbuilder/cmdbuilder.go b/pkg/cmdbuilder/cmdbuilder.go deleted file mode 100644 index 1301aab7..00000000 --- a/pkg/cmdbuilder/cmdbuilder.go +++ /dev/null @@ -1,94 +0,0 @@ -package cmdbuilder - -import ( - "encoding/json" - "fmt" - "net/url" - "regexp" - "strings" -) - -type Config struct { - Params url.Values - Cmd []string -} - -func New(cmd string) *Config { - return &Config{Cmd: []string{"docker", cmd}} -} - -func (c *Config) GetParams(r string) { - u, err := url.ParseRequestURI(r) - if err == nil { - c.Params = u.Query() - } -} - -func (c *Config) Add(t string) { - c.Cmd = append(c.Cmd, t) -} - -func (c *Config) AddFilters() { - if len(c.Params) > 0 { - if _, ok := c.Params["filters"]; ok { - if len(c.Params["filters"]) == 0 { - return - } - - filter := []byte(c.Params["filters"][0]) - - compose, err := regexp.Match(`^\{".+":\s*\[.+\]\}$`, filter) - if err != nil { - panic(err) - } - - if compose { - var v map[string][]string - - err := json.Unmarshal(filter, &v) - if err != nil { - panic(err) - } - - for k, val := range v { - for _, ka := range val { - c.Add(fmt.Sprintf("--filter \"%s=%s\"", k, ka)) - } - } - } else { - var v map[string]map[string]bool - - err := json.Unmarshal(filter, &v) - if err != nil { - panic(err) - } - - for k, val := range v { - for ka := range val { - c.Add(fmt.Sprintf("--filter \"%s=%s\"", k, ka)) - } - } - } - } - } -} - -func (c *Config) GetParamAndAdd(k, p string, b bool) { - if len(c.Params) > 0 { - if b { - if v, ok := c.Params[k]; ok { - if v[0] == "1" || v[0] == "True" || v[0] == "true" { - c.Add(p) - } - } - } else { - if v, ok := c.Params[k]; ok { - c.Add(fmt.Sprintf("%s=%s", p, v[0])) - } - } - } -} - -func (c *Config) String() string { - return strings.Join(c.Cmd, " ") -} diff --git a/pkg/uri/uri.go b/pkg/uri/uri.go index e9a97031..c49a964b 100644 --- a/pkg/uri/uri.go +++ b/pkg/uri/uri.go @@ -11,7 +11,6 @@ type URI struct { Method string Re *regexp.Regexp AllowFunc func(authorization.Request, *types.Config) *types.AllowResult - DCBFunc func(authorization.Request, string, *regexp.Regexp) string Action string CmdName string Description string @@ -23,8 +22,8 @@ func New() *URIs { return &URIs{} } -func (uris *URIs) Register(method, uri string, af func(authorization.Request, *types.Config) *types.AllowResult, dcbf func(authorization.Request, string, *regexp.Regexp) string, action, cmdName, desc string) { - *uris = append(*uris, URI{Method: method, Re: regexp.MustCompile(uri), AllowFunc: af, DCBFunc: dcbf, Action: action, CmdName: cmdName, Description: desc}) +func (uris *URIs) Register(method, uri string, af func(authorization.Request, *types.Config) *types.AllowResult, action, cmdName, desc string) { + *uris = append(*uris, URI{Method: method, Re: regexp.MustCompile(uri), AllowFunc: af, Action: action, CmdName: cmdName, Description: desc}) } func (uris *URIs) GetURI(method, url string) (URI, error) { diff --git a/plugin/api.go b/plugin/api.go index df4d8dcb..adb6d1bd 100644 --- a/plugin/api.go +++ b/plugin/api.go @@ -105,27 +105,21 @@ func (a *Api) Allow(req authorization.Request) (ar *types.AllowResult) { } } - // Accounting - // Build Docker command from data sent to Docker daemon - lmsg := u.DCBFunc(req, a.URIInfo.Path, u.Re) - // Log event - if len(lmsg) > 0 { - fields := driver.Fields{ - "user": username, - "admin": isAdmin, - "allowed": r.Allow, - "authorization": aR, - } - - if !r.Allow { - fields["msg"] = r.Msg - fields["action"] = u.Action - } + fields := driver.Fields{ + "user": username, + "admin": isAdmin, + "allowed": r.Allow, + "authorization": aR, + "action": u.Action, + } - l.WithFields(fields).Info(lmsg) + if !r.Allow { + fields["msg"] = r.Msg } + l.WithFields(fields).Info() + // If Docker command is not allowed, return if !r.Allow { return r