Skip to content

Commit

Permalink
add exp api for docker machine pool
Browse files Browse the repository at this point in the history
  • Loading branch information
devigned committed Aug 27, 2020
1 parent f3a7a4d commit 4255d3b
Show file tree
Hide file tree
Showing 15 changed files with 972 additions and 1 deletion.
30 changes: 30 additions & 0 deletions exp/util/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema"
clusterv1exp "sigs.k8s.io/cluster-api/exp/api/v1alpha3"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
)

// GetOwnerMachinePool returns the MachinePool objects owning the current resource.
Expand Down Expand Up @@ -52,3 +54,31 @@ func GetMachinePoolByName(ctx context.Context, c client.Client, namespace, name
}
return m, nil
}

// MachinePoolToInfrastructureMapFunc returns a handler.ToRequestsFunc that watches for
// MachinePool events and returns reconciliation requests for an infrastructure provider object.
func MachinePoolToInfrastructureMapFunc(gvk schema.GroupVersionKind) handler.ToRequestsFunc {
return func(o handler.MapObject) []reconcile.Request {
m, ok := o.Object.(*clusterv1exp.MachinePool)
if !ok {
return nil
}

gk := gvk.GroupKind()
ref := m.Spec.Template.Spec.InfrastructureRef
// Return early if the GroupKind doesn't match what we expect.
infraGK := ref.GroupVersionKind().GroupKind()
if gk != infraGK {
return nil
}

return []reconcile.Request{
{
NamespacedName: client.ObjectKey{
Namespace: m.Namespace,
Name: ref.Name,
},
},
}
}
}
5 changes: 4 additions & 1 deletion test/infrastructure/docker/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ export DOCKER_CLI_EXPERIMENTAL := enabled
TOOLS_DIR := hack/tools
TOOLS_BIN_DIR := $(TOOLS_DIR)/bin
BIN_DIR := bin
EXP_DIR := exp

# Binaries.
CONTROLLER_GEN := $(TOOLS_BIN_DIR)/controller-gen
Expand Down Expand Up @@ -108,7 +109,8 @@ generate: $(CONTROLLER_GEN) ## Generate code
generate-go: $(CONTROLLER_GEN) $(CONVERSION_GEN) ## Runs Go related generate targets
$(CONTROLLER_GEN) \
object:headerFile=$(ROOT)/hack/boilerplate/boilerplate.generatego.txt \
paths=./api/...
paths=./api/... \
paths=./$(EXP_DIR)/api/...
$(CONVERSION_GEN) \
--input-dirs=./api/v1alpha3 \
--output-file-base=zz_generated.conversion \
Expand All @@ -118,6 +120,7 @@ generate-go: $(CONTROLLER_GEN) $(CONVERSION_GEN) ## Runs Go related generate tar
generate-manifests: $(CONTROLLER_GEN) ## Generate manifests e.g. CRD, RBAC etc.
$(CONTROLLER_GEN) \
paths=./api/... \
paths=./$(EXP_DIR)/api/... \
paths=./controllers/... \
crd:crdVersions=v1 \
rbac:roleName=manager-role \
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,230 @@

---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.2.9
creationTimestamp: null
name: dockermachinepools.exp.infrastructure.cluster.x-k8s.io
spec:
group: exp.infrastructure.cluster.x-k8s.io
names:
kind: DockerMachinePool
listKind: DockerMachinePoolList
plural: dockermachinepools
singular: dockermachinepool
scope: Namespaced
versions:
- name: v1alpha3
schema:
openAPIV3Schema:
description: DockerMachinePool is the Schema for the dockermachinepools API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: DockerMachinePoolSpec defines the desired state of DockerMachinePool
properties:
providerID:
description: ProviderID is the identification ID of the Machine Pool
type: string
providerIDList:
description: ProviderIDList are the identification IDs of machine
instances
items:
type: string
type: array
template:
description: Template contains the details used to build a replica
machine within the Machine Pool
properties:
customImage:
description: CustomImage allows customizing the container image
that is used for running the machine
type: string
extraMounts:
description: ExtraMounts describes additional mount points for
the node container These may be used to bind a hostPath
items:
description: Mount specifies a host volume to mount into a container.
This is a simplified version of kind v1alpha4.Mount types
properties:
containerPath:
description: Path of the mount within the container.
type: string
hostPath:
description: Path of the mount on the host. If the hostPath
doesn't exist, then runtimes should report error. If the
hostpath is a symbolic link, runtimes should follow the
symlink and mount the real destination to container.
type: string
readOnly:
description: If set, the mount is read-only.
type: boolean
type: object
type: array
preLoadImages:
description: PreLoadImages allows to pre-load images in a newly
created machine. This can be used to speed up tests by avoiding
e.g. to download CNI images on all the containers.
items:
type: string
type: array
type: object
type: object
status:
description: DockerMachinePoolStatus defines the observed state of DockerMachinePool
properties:
conditions:
description: Conditions defines current service state of the DockerMachinePool.
items:
description: Condition defines an observation of a Cluster API resource
operational state.
properties:
lastTransitionTime:
description: Last time the condition transitioned from one status
to another. This should be when the underlying condition changed.
If that is not known, then using the time when the API field
changed is acceptable.
format: date-time
type: string
message:
description: A human readable message indicating details about
the transition. This field may be empty.
type: string
reason:
description: The reason for the condition's last transition
in CamelCase. The specific API may choose whether or not this
field is considered a guaranteed API. This field may not be
empty.
type: string
severity:
description: Severity provides an explicit classification of
Reason code, so the users or machines can immediately understand
the current situation and act accordingly. The Severity field
MUST be set only when Status=False.
type: string
status:
description: Status of the condition, one of True, False, Unknown.
type: string
type:
description: Type of condition in CamelCase or in foo.example.com/CamelCase.
Many .condition.type values are consistent across resources
like Available, but because arbitrary conditions can be useful
(see .node.status.conditions), the ability to deconflict is
important.
type: string
required:
- status
- type
type: object
type: array
machines:
description: Machines contains the status for each machine in the
pool
items:
description: DockerMachineStatus defines the observed state of DockerMachine
properties:
addresses:
description: Addresses contains the associated addresses for
the docker machine.
items:
description: MachineAddress contains information for the node's
address.
properties:
address:
description: The machine address.
type: string
type:
description: Machine address type, one of Hostname, ExternalIP
or InternalIP.
type: string
required:
- address
- type
type: object
type: array
conditions:
description: Conditions defines current service state of the
DockerMachine.
items:
description: Condition defines an observation of a Cluster
API resource operational state.
properties:
lastTransitionTime:
description: Last time the condition transitioned from
one status to another. This should be when the underlying
condition changed. If that is not known, then using
the time when the API field changed is acceptable.
format: date-time
type: string
message:
description: A human readable message indicating details
about the transition. This field may be empty.
type: string
reason:
description: The reason for the condition's last transition
in CamelCase. The specific API may choose whether or
not this field is considered a guaranteed API. This
field may not be empty.
type: string
severity:
description: Severity provides an explicit classification
of Reason code, so the users or machines can immediately
understand the current situation and act accordingly.
The Severity field MUST be set only when Status=False.
type: string
status:
description: Status of the condition, one of True, False,
Unknown.
type: string
type:
description: Type of condition in CamelCase or in foo.example.com/CamelCase.
Many .condition.type values are consistent across resources
like Available, but because arbitrary conditions can
be useful (see .node.status.conditions), the ability
to deconflict is important.
type: string
required:
- status
- type
type: object
type: array
loadBalancerConfigured:
description: LoadBalancerConfigured denotes that the machine
has been added to the load balancer
type: boolean
ready:
description: Ready denotes that the machine (docker container)
is ready
type: boolean
type: object
type: array
observedGeneration:
description: The generation observed by the deployment controller.
format: int64
type: integer
ready:
description: Ready denotes that the machine pool is ready
type: boolean
type: object
type: object
served: true
storage: true
status:
acceptedNames:
kind: ""
plural: ""
conditions: []
storedVersions: []
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# The following patch adds a directive for certmanager to inject CA into the CRD
# CRD conversion requires k8s 1.13 or later.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME)
name: dockermachinepools.exp.infrastructure.cluster.x-k8s.io
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# The following patch enables conversion webhook for CRD
# CRD conversion requires k8s 1.13 or later.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: dockermachinepools.exp.infrastructure.cluster.x-k8s.io
spec:
conversion:
strategy: Webhook
webhook:
conversionReviewVersions: ["v1", "v1beta1"]
clientConfig:
# this is "\n" used as a placeholder, otherwise it will be rejected by the apiserver for being blank,
# but we're going to set it later using the cert-manager (or potentially a patch if not using cert-manager)
caBundle: Cg==
service:
namespace: system
name: webhook-service
path: /convert
Loading

0 comments on commit 4255d3b

Please sign in to comment.