From 566e7bb85418a49e8e49796100dff561ec1b4b63 Mon Sep 17 00:00:00 2001 From: iwilltry42 Date: Tue, 8 Oct 2019 22:11:15 +0200 Subject: [PATCH] start translation k3d -> docker --- commands.md | 23 ------------- go.sum | 1 + pkg/runtimes/docker/translate.go | 44 ++++++++++++++++++++++++ thoughts.md | 59 ++++++++++++++++++++++++++++++++ 4 files changed, 104 insertions(+), 23 deletions(-) delete mode 100644 commands.md create mode 100644 pkg/runtimes/docker/translate.go create mode 100644 thoughts.md diff --git a/commands.md b/commands.md deleted file mode 100644 index 08f0df2b..00000000 --- a/commands.md +++ /dev/null @@ -1,23 +0,0 @@ -# commands - -## create - -``` -k3d - |- create - | |- cluster [NAME ] [flags] - | |- node [NAME ] [flags] - | - |- delete - | |- cluster [NAME ] [flags] - | |- node [NAME ] [flags] - |- get - | |- cluster - | |- node - |- start - | |- cluster - | |- node - |- stop - | |- cluster - | |- node -``` \ No newline at end of file diff --git a/go.sum b/go.sum index b558d5ef..796bc1e9 100644 --- a/go.sum +++ b/go.sum @@ -50,6 +50,7 @@ github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c h1:6L6qod4JzOm github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= github.com/docker/docker v1.4.2-0.20190905191220-3b23f9033967 h1:hqs6DQFz659/085bXwClBRGefVf+kWCTsQR6wwkOMiU= github.com/docker/docker v1.4.2-0.20190905191220-3b23f9033967/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v1.13.1 h1:IkZjBSIc8hBjLpqeAbeE5mca5mNgeatLHBy3GO78BWo= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= diff --git a/pkg/runtimes/docker/translate.go b/pkg/runtimes/docker/translate.go new file mode 100644 index 00000000..1d01bfe4 --- /dev/null +++ b/pkg/runtimes/docker/translate.go @@ -0,0 +1,44 @@ +/* +Copyright © 2019 Thorsten Klein + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +package docker + +import ( + docker "github.com/docker/docker/api/types/container" + "github.com/docker/go-connections/nat" + k3d "github.com/rancher/k3d/pkg/types" +) + +func TranslateNodeToContainer(node *k3d.Node) (docker.Config, error) { + + container := docker.Config{} + container.Hostname = node.Name + container.Image = node.Image + //container.Ports = // TODO: translate from what we have to []docker.Port + container.Labels = node.Labels + container.ExposedPorts = nat.PortSet{} // TODO: + container.Env = []string{} // TODO: + container.Cmd = []string{} // TODO: dependent on role and extra args + container.Volumes = map[string]struct{}{} // TODO: + + return container, nil +} diff --git a/thoughts.md b/thoughts.md new file mode 100644 index 00000000..169d90bb --- /dev/null +++ b/thoughts.md @@ -0,0 +1,59 @@ +# Thoughts + +## commands + +### `create` + +```shell +k3d + |- create + | |- cluster [NAME ] [flags] + | |- node [NAME ] [flags] + | + |- delete + | |- cluster [NAME ] [flags] + | |- node [NAME ] [flags] + |- get + | |- cluster + | |- node + |- start + | |- cluster + | |- node + |- stop + | |- cluster + | |- node +``` + +## Overview + +- `cmd/`: everything around the CLI of k3 = human interface, printed output (e.g. list of clusters) +- `pkg/`: everything else, can be used as a module from other Go projects + - `cluster/`: everything around managing cluster components + - `runtimes/`: translate k3d types (node, cluster, etc.) to container runtime specific types and manage them + - `types/`: collection of types (structs) and constants used by k3d + - `util/`: utilities, that could be used for everything, not directly related to the project + +## k3d <-> runtime + +k3d _should_ work with more than one runtime, if we can implement the Runtime interface for it. +Here's how k3d types should translate to a runtime type: + +- `cluster` = set of _containers_ running in the same _network_, maybe mounting the same _volume(s)_ +- `node` = _container_ with _exposed ports_ and _volume mounts_ + +### docker + +#### node -> container + +`container = "github.com/docker/docker/api/types/container"` +`network = "github.com/docker/docker/api/types/network"` + +- Name -> container.Hostname = node.Name +- Role -> container.Labels["role"] = node.Role +- Image -> container.Image = node.Image +- Volumes -> container.HostConfig.PortBindings +- Env -> +- Args -> +- Ports -> +- Restart -> +- Labels -> container.Labels \ No newline at end of file