Skip to content
This repository has been archived by the owner on Dec 7, 2023. It is now read-only.

Commit

Permalink
Add ignite/v1alpha3 API
Browse files Browse the repository at this point in the history
Generated by copying v1alpha2 into v1alpha3 and running `make autogen`.
  • Loading branch information
darkowlzz committed Jun 22, 2020
1 parent 6d467f3 commit d44db2f
Show file tree
Hide file tree
Showing 14 changed files with 2,720 additions and 4 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ IMAGE_TAG:=$(shell IGNITE_GIT_VERSION=$(GIT_VERSION) DOCKER_USER=$(DOCKER_USER)
IS_DIRTY:=$(shell echo ${GIT_VERSION} | grep -c dirty)
PROJECT = github.com/weaveworks/ignite
APIS_DIR = ${PROJECT}/pkg/apis
API_DIRS = ${APIS_DIR}/ignite,${APIS_DIR}/ignite/v1alpha2,${APIS_DIR}/meta/v1alpha1
API_DIRS = ${APIS_DIR}/ignite,${APIS_DIR}/ignite/v1alpha2,${APIS_DIR}/ignite/v1alpha3,${APIS_DIR}/meta/v1alpha1
CACHE_DIR = $(shell pwd)/bin/cache
# Specifies if this is a CI build or not; if it is, it will save the docker image created to bin/$(GOARCH)/image.tar
IS_CI_BUILD ?= 0
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,6 @@ require (
golang.org/x/sys v0.0.0-20200610111108-226ff32320da
gotest.tools v2.2.0+incompatible
k8s.io/apimachinery v0.18.3
k8s.io/kube-openapi v0.0.0-20200427153329-656914f816f9
k8s.io/kube-openapi v0.0.0-20200615155156-dffdd1682719
sigs.k8s.io/yaml v1.2.0
)
4 changes: 3 additions & 1 deletion pkg/apis/ignite/scheme/scheme.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

"github.com/weaveworks/ignite/pkg/apis/ignite"
"github.com/weaveworks/ignite/pkg/apis/ignite/v1alpha2"
"github.com/weaveworks/ignite/pkg/apis/ignite/v1alpha3"
"github.com/weaveworks/libgitops/pkg/serializer"
)

Expand All @@ -30,5 +31,6 @@ func init() {
func AddToScheme(scheme *runtime.Scheme) {
utilruntime.Must(ignite.AddToScheme(Scheme))
utilruntime.Must(v1alpha2.AddToScheme(Scheme))
utilruntime.Must(scheme.SetVersionPriority(v1alpha2.SchemeGroupVersion))
utilruntime.Must(v1alpha3.AddToScheme(Scheme))
utilruntime.Must(scheme.SetVersionPriority(v1alpha3.SchemeGroupVersion))
}
75 changes: 75 additions & 0 deletions pkg/apis/ignite/v1alpha3/defaults.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package v1alpha3

import (
meta "github.com/weaveworks/ignite/pkg/apis/meta/v1alpha1"
"github.com/weaveworks/ignite/pkg/constants"
"github.com/weaveworks/ignite/pkg/version"

"k8s.io/apimachinery/pkg/runtime"
)

func addDefaultingFuncs(scheme *runtime.Scheme) error {
return RegisterDefaults(scheme)
}

func SetDefaults_PoolSpec(obj *PoolSpec) {
if obj.AllocationSize == meta.EmptySize {
obj.AllocationSize = meta.NewSizeFromSectors(constants.POOL_ALLOCATION_SIZE_SECTORS)
}

if obj.DataSize == meta.EmptySize {
obj.AllocationSize = meta.NewSizeFromBytes(constants.POOL_DATA_SIZE_BYTES)
}

if obj.MetadataSize == meta.EmptySize {
obj.AllocationSize = calcMetadataDevSize(obj)
}

if len(obj.MetadataPath) == 0 {
obj.MetadataPath = constants.SNAPSHOTTER_METADATA_PATH
}

if len(obj.DataPath) == 0 {
obj.DataPath = constants.SNAPSHOTTER_DATA_PATH
}
}

func SetDefaults_VMSpec(obj *VMSpec) {
if obj.CPUs == 0 {
obj.CPUs = constants.VM_DEFAULT_CPUS
}

if obj.Memory == meta.EmptySize {
obj.Memory = meta.NewSizeFromBytes(constants.VM_DEFAULT_MEMORY)
}

if obj.DiskSize == meta.EmptySize {
obj.DiskSize = meta.NewSizeFromBytes(constants.VM_DEFAULT_SIZE)
}
}

func SetDefaults_VMKernelSpec(obj *VMKernelSpec) {
// Default the kernel image if unset.
if obj.OCI.IsUnset() {
obj.OCI, _ = meta.NewOCIImageRef(version.GetIgnite().KernelImage.String())
}

if len(obj.CmdLine) == 0 {
obj.CmdLine = constants.VM_DEFAULT_KERNEL_ARGS
}
}

func SetDefaults_VMSandboxSpec(obj *VMSandboxSpec) {
// Default the sandbox image if unset.
if obj.OCI.IsUnset() {
obj.OCI, _ = meta.NewOCIImageRef(version.GetIgnite().SandboxImage.String())
}
}

func calcMetadataDevSize(obj *PoolSpec) meta.Size {
// The minimum size is 2 MB and the maximum size is 16 GB
minSize := meta.NewSizeFromBytes(2 * constants.MB)
maxSize := meta.NewSizeFromBytes(16 * constants.GB)

return meta.NewSizeFromBytes(48 * obj.DataSize.Bytes() / obj.AllocationSize.Bytes()).Min(maxSize).Max(minSize)
}
5 changes: 5 additions & 0 deletions pkg/apis/ignite/v1alpha3/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// +k8s:deepcopy-gen=package
// +k8s:defaulter-gen=TypeMeta
// +k8s:openapi-gen=true
// +k8s:conversion-gen=github.com/weaveworks/ignite/pkg/apis/ignite
package v1alpha3
50 changes: 50 additions & 0 deletions pkg/apis/ignite/v1alpha3/json.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package v1alpha3

import (
"encoding/json"
)

// In this package custom marshal/unmarshal functions are registered

func (s *SSH) MarshalJSON() ([]byte, error) {
if len(s.PublicKey) != 0 {
return json.Marshal(s.PublicKey)
}

if s.Generate {
return json.Marshal(true)
}

return []byte("{}"), nil
}

func (s *SSH) UnmarshalJSON(b []byte) error {
var str string
if err := json.Unmarshal(b, &str); err == nil {
if str == "true" {
*s = SSH{
Generate: true,
}
} else {
*s = SSH{
PublicKey: str,
}
}

return nil
}

var boolVar bool
if err := json.Unmarshal(b, &boolVar); err == nil {
if boolVar {
*s = SSH{
Generate: true,
}

return nil
}
}

// The user did not specify this field, just return
return nil
}
39 changes: 39 additions & 0 deletions pkg/apis/ignite/v1alpha3/register.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package v1alpha3

import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
)

var (
// SchemeBuilder the schema builder
SchemeBuilder = runtime.NewSchemeBuilder(
addKnownTypes,
addDefaultingFuncs,
)

localSchemeBuilder = &SchemeBuilder
AddToScheme = localSchemeBuilder.AddToScheme
)

const (
// GroupName is the group name use in this package
GroupName = "ignite.weave.works"
)

// SchemeGroupVersion is group version used to register these objects
var SchemeGroupVersion = schema.GroupVersion{
Group: GroupName,
Version: "v1alpha3",
}

// Adds the list of known types to the given scheme.
func addKnownTypes(scheme *runtime.Scheme) error {
scheme.AddKnownTypes(SchemeGroupVersion,
&VM{},
&Kernel{},
&Pool{},
&Image{},
)
return nil
}
Loading

0 comments on commit d44db2f

Please sign in to comment.