add utils
This commit is contained in:
parent
73efb98b32
commit
433ff16467
3
.gitignore
vendored
3
.gitignore
vendored
@ -16,4 +16,5 @@ _dist/
|
||||
*.out
|
||||
|
||||
# Editors
|
||||
.vscode/
|
||||
.vscode/
|
||||
.local/
|
||||
@ -21,11 +21,13 @@ THE SOFTWARE.
|
||||
*/
|
||||
package cluster
|
||||
|
||||
import "github.com/rancher/k3d/pkg/types"
|
||||
import (
|
||||
"github.com/rancher/k3d/pkg/types"
|
||||
)
|
||||
|
||||
// CreateCluster creates a new cluster consisting of
|
||||
// - some containerized k3s nodes
|
||||
// - a docker network
|
||||
func CreateCluster(clusterSpec *types.Cluster) error {
|
||||
func CreateCluster(cluster *types.Cluster) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
69
pkg/cluster/clusterName.go
Normal file
69
pkg/cluster/clusterName.go
Normal file
@ -0,0 +1,69 @@
|
||||
/*
|
||||
Copyright © 2019 Thorsten Klein <iwilltry42@gmail.com>
|
||||
|
||||
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 cluster
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/rancher/k3d/pkg/types"
|
||||
)
|
||||
|
||||
// CheckClusterName ensures that a cluster name is also a valid host name according to RFC 1123.
|
||||
// We further restrict the length of the cluster name to maximum 'clusterNameMaxSize'
|
||||
// so that we can construct the host names based on the cluster name, and still stay
|
||||
// within the 64 characters limit.
|
||||
func CheckClusterName(name string) error {
|
||||
if err := ValidateHostname(name); err != nil {
|
||||
return fmt.Errorf("Invalid cluster name. %+v", ValidateHostname(name))
|
||||
}
|
||||
if len(name) > types.DefaultClusterNameMaxLength {
|
||||
return fmt.Errorf("Cluster name must be <= %d characters, but has %d", types.DefaultClusterNameMaxLength, len(name))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ValidateHostname ensures that a cluster name is also a valid host name according to RFC 1123.
|
||||
func ValidateHostname(name string) error {
|
||||
|
||||
if len(name) == 0 {
|
||||
return fmt.Errorf("No name provided")
|
||||
}
|
||||
|
||||
if name[0] == '-' || name[len(name)-1] == '-' {
|
||||
return fmt.Errorf("Hostname '%s' must not start or end with '-' (dash)", name)
|
||||
}
|
||||
|
||||
for _, c := range name {
|
||||
switch {
|
||||
case '0' <= c && c <= '9':
|
||||
case 'a' <= c && c <= 'z':
|
||||
case 'A' <= c && c <= 'Z':
|
||||
case c == '-':
|
||||
break
|
||||
default:
|
||||
return fmt.Errorf("Hostname '%s' contains characters other than 'Aa-Zz', '0-9' or '-'", name)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -32,7 +32,7 @@ import (
|
||||
|
||||
// createContainer creates a new docker container
|
||||
// @return containerID, error
|
||||
func createContainer(ID string) (string, error) {
|
||||
func createContainer(types.Container) (string, error) {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
|
||||
@ -48,7 +48,6 @@ func CreateNetworkIfNotExist(clusterName string) (string, error) {
|
||||
// (1) configure list filters
|
||||
args := GetDefaultObjectLabelsFilter(clusterName)
|
||||
args.Add("name", networkName)
|
||||
// TODO: filter for label: cluster=<clusterName>?
|
||||
|
||||
// (2) get filtered list of networks
|
||||
networkList, err := docker.NetworkList(ctx, types.NetworkListOptions{
|
||||
|
||||
39
pkg/runtimes/docker/util.go
Normal file
39
pkg/runtimes/docker/util.go
Normal file
@ -0,0 +1,39 @@
|
||||
/*
|
||||
Copyright © 2019 Thorsten Klein <iwilltry42@gmail.com>
|
||||
|
||||
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 (
|
||||
"fmt"
|
||||
|
||||
"github.com/docker/docker/api/types/filters"
|
||||
k3d "github.com/rancher/k3d/pkg/types"
|
||||
)
|
||||
|
||||
// GetDefaultObjectLabelsFilter returns docker type filters created from k3d labels
|
||||
func GetDefaultObjectLabelsFilter(clusterName string) filters.Args {
|
||||
filters := filters.NewArgs()
|
||||
for key, value := range k3d.DefaultObjectLabels {
|
||||
filters.Add("label", fmt.Sprintf("%s=%s", key, value))
|
||||
}
|
||||
filters.Add("label", fmt.Sprintf("cluster=%s", clusterName))
|
||||
return filters
|
||||
}
|
||||
@ -26,6 +26,12 @@ import "fmt"
|
||||
// DefaultClusterName specifies the default name used for newly created clusters
|
||||
const DefaultClusterName = "k3s-default"
|
||||
|
||||
// DefaultClusterNameMaxLength specifies the maximal length of a passed in cluster name
|
||||
// This restriction allows us to construct an name consisting of
|
||||
// <DefaultObjectNamePrefix[3]>-<ClusterName>-<TypeSuffix[5-10]>-<Counter[1-3]>
|
||||
// ... and still stay within the 64 character limit (e.g. of docker)
|
||||
const DefaultClusterNameMaxLength = 32
|
||||
|
||||
// DefaultK3sImageRepo specifies the default image repository for the used k3s image
|
||||
const DefaultK3sImageRepo = "docker.io/rancher/k3s"
|
||||
|
||||
@ -41,6 +47,7 @@ var DefaultObjectLabels = map[string]string{
|
||||
type Cluster struct {
|
||||
Name string
|
||||
Network string
|
||||
Secret string
|
||||
Nodes []Node
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user