Skip to content

Commit

Permalink
Add apis for machine-class (#488)
Browse files Browse the repository at this point in the history
* Add APIs for MachineClass

* Autogenerated files
  • Loading branch information
hardikdr authored and k8s-ci-robot committed Oct 22, 2018
1 parent f80969d commit 8525414
Show file tree
Hide file tree
Showing 9 changed files with 223 additions and 3 deletions.
6 changes: 6 additions & 0 deletions config/crds/cluster_v1alpha1_cluster.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ spec:
value:
type: object
valueFrom:
properties:
machineClass:
properties:
provider:
type: string
type: object
type: object
type: object
required:
Expand Down
6 changes: 6 additions & 0 deletions config/crds/cluster_v1alpha1_machine.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ spec:
value:
type: object
valueFrom:
properties:
machineClass:
properties:
provider:
type: string
type: object
type: object
type: object
taints:
Expand Down
33 changes: 33 additions & 0 deletions config/crds/cluster_v1alpha1_machineclass.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
creationTimestamp: null
labels:
controller-tools.k8s.io: "1.0"
name: machineclasses.cluster.k8s.io
spec:
group: cluster.k8s.io
names:
kind: MachineClass
plural: machineclasses
scope: Namespaced
validation:
openAPIV3Schema:
properties:
apiVersion:
type: string
kind:
type: string
metadata:
type: object
providerConfig:
type: object
required:
- providerConfig
version: v1alpha1
status:
acceptedNames:
kind: ""
plural: ""
conditions: []
storedVersions: []
6 changes: 6 additions & 0 deletions config/crds/cluster_v1alpha1_machinedeployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,12 @@ spec:
value:
type: object
valueFrom:
properties:
machineClass:
properties:
provider:
type: string
type: object
type: object
type: object
taints:
Expand Down
6 changes: 6 additions & 0 deletions config/crds/cluster_v1alpha1_machineset.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@ spec:
value:
type: object
valueFrom:
properties:
machineClass:
properties:
provider:
type: string
type: object
type: object
type: object
taints:
Expand Down
19 changes: 17 additions & 2 deletions pkg/apis/cluster/v1alpha1/common_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ limitations under the License.

package v1alpha1

import "k8s.io/apimachinery/pkg/runtime"
import (
corev1 "k8s.io/api/core/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
)

// ProviderConfig defines the configuration to use during node creation.
type ProviderConfig struct {
Expand All @@ -39,5 +42,17 @@ type ProviderConfig struct {
// ProviderConfigSource represents a source for the provider-specific
// resource configuration.
type ProviderConfigSource struct {
// TODO(roberthbailey): Fill these in later
// The machine class from which the provider config should be sourced.
// +optional
MachineClass *MachineClassRef `json:"machineClass,omitempty"`
}

// MachineClassRef is a reference to the MachineClass object. Controllers should find the right MachineClass using this reference.
type MachineClassRef struct {
// +optional
*corev1.ObjectReference `json:",inline"`

// Provider is the name of the cloud-provider which MachineClass is intended for.
// +optional
Provider string `json:"provider,omitempty"`
}
64 changes: 64 additions & 0 deletions pkg/apis/cluster/v1alpha1/machineclass_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/*
Copyright 2018 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
)

// +genclient
// +genclient:noStatus
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// MachineClass can be used to templatize and re-use provider configuration
// across multiple Machines / MachineSets / MachineDeployments.
// +k8s:openapi-gen=true
// +resource:path=machineclasses
type MachineClass struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`

// The total capacity available on this machine type (cpu/memory/disk).
//
// WARNING: It is up to the creator of the MachineClass to ensure that
// this field is consistent with the underlying machine that will
// be provisioned when this class is used, to inform higher level
// automation (e.g. the cluster autoscaler).
// TODO(hardikdr) Add allocatable field once requirements are clear from autoscaler-clusterapi // integration topic.
// Capacity corev1.ResourceList `json:"capacity"`

// How much capacity is actually allocatable on this machine.
// Must be equal to or less than the capacity, and when less
// indicates the resources reserved for system overhead.
//
// WARNING: It is up to the creator of the MachineClass to ensure that
// this field is consistent with the underlying machine that will
// be provisioned when this class is used, to inform higher level
// automation (e.g. the cluster autoscaler).
// TODO(hardikdr) Add allocatable field once requirements are clear from autoscaler-clusterapi // integration topic.
// Allocatable corev1.ResourceList `json:"allocatable"`

// Provider-specific configuration to use during node creation.
ProviderConfig runtime.RawExtension `json:"providerConfig"`

// TODO: should this use an api.ObjectReference to a 'MachineTemplate' instead?
// A link to the MachineTemplate that will be used to create provider
// specific configuration for Machines of this class.
// MachineTemplate corev1.ObjectReference `json:machineTemplate`
}
55 changes: 54 additions & 1 deletion pkg/apis/cluster/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 31 additions & 0 deletions sample/machineclass.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Sample machine-class object
apiVersion: "cluster.k8s.io/v1alpha1"
kind: MachineClass
metadata:
name: small
namespace: foo
providerConfig:
apiVersion: "gceproviderconfig/v1alpha1"
kind: "GCEProviderConfig"
project: "$GCLOUD_PROJECT"
zone: "us-central1-f"
machineType: "n1-standard-2"
image: "projects/ubuntu-os-cloud/global/images/family/ubuntu-1604-lts"

---

# Sample machine object
apiVersion: cluster.k8s.io/v1alpha1
kind: Machine
metadata:
name: test-machine
namespace: foo
labels:
test-label: test-label
spec:
providerConfig:
valueFrom:
machineClass:
provider: gcp
name: small
namespace: foo

0 comments on commit 8525414

Please sign in to comment.