Skip to content

Instantly share code, notes, and snippets.

@haarchri
Created July 29, 2021 10:47
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save haarchri/a704a0e780c157df4d846a38e28bd95f to your computer and use it in GitHub Desktop.
Save haarchri/a704a0e780c157df4d846a38e28bd95f to your computer and use it in GitHub Desktop.
crossplane-composition-efs
---
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: example-efs
spec:
writeConnectionSecretsToNamespace: crossplane-system
compositeTypeRef:
apiVersion: platform.example.intern/v1alpha1
kind: Efs
patchSets:
- name: Common
patches:
- fromFieldPath: metadata.name
toFieldPath: metadata.name
- name: AwsParameters
patches:
- fromFieldPath: spec.region
toFieldPath: spec.forProvider.region
- name: fileSystemIDStatus
patches:
# track the autogenerated fileSystemID as we need this later
- type: ToCompositeFieldPath
fromFieldPath: status.atProvider.fileSystemID
toFieldPath: status.filesystem.fileSystemID
policy:
fromFieldPath: Optional
- name: MounttargetParameters
patches:
# inject the fileSystemId
- type: FromCompositeFieldPath
fromFieldPath: status.filesystem.fileSystemID
toFieldPath: spec.forProvider.fileSystemID
policy:
fromFieldPath: Required
- name: StorageClassParameters
patches:
# inject the fileSystemId
- type: FromCompositeFieldPath
fromFieldPath: status.filesystem.fileSystemID
toFieldPath: spec.forProvider.manifest.parameters.fileSystemId
policy:
fromFieldPath: Required
resources:
- name: efs-filesystem
base:
apiVersion: efs.aws.crossplane.io/v1alpha1
kind: FileSystem
spec:
forProvider:
region: # patched
providerConfigRef:
name: default
patches:
- patchSetName: AwsParameters
type: PatchSet
- patchSetName: Common
type: PatchSet
- patchSetName: fileSystemIDStatus
type: PatchSet
- name: efs-mounttarget
base:
apiVersion: efs.aws.crossplane.io/v1alpha1
kind: MountTarget
spec:
forProvider:
region: # patched
fileSystemID: # patched
subnetIDRef:
name: sample-subnet1
securityGroupsRefs:
- name: example
providerConfigRef:
name: default
patches:
- patchSetName: Common
type: PatchSet
- patchSetName: AwsParameters
type: PatchSet
- patchSetName: MounttargetParameters
type: PatchSet
- name: storage-class
base:
apiVersion: kubernetes.crossplane.io/v1alpha1
kind: Object
spec:
forProvider:
manifest:
kind: StorageClass
apiVersion: storage.k8s.io/v1
provisioner: efs.csi.aws.com
parameters:
provisioningMode: efs-ap
fileSystemId: "" # patched
directoryPerms: "700"
gidRangeStart: "1000"
gidRangeEnd: "2000"
basePath: "/dynamic_provisioning"
providerConfigRef:
name: kubernetes-provider
patches:
- patchSetName: Common
type: PatchSet
- patchSetName: StorageClassParameters
type: PatchSet
---
apiVersion: platform.example.intern/v1alpha1
kind: Efs
metadata:
name: efs-test
namespace: api-service
spec:
region: eu-central-1
---
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
name: efs.platform.example.intern
spec:
defaultCompositionRef:
name: example-efs
group: platform.example.intern
names:
kind: Efs
listKind: EfsList
plural: efs
singular: efs
versions:
- name: v1alpha1
served: true
referenceable: true
schema:
openAPIV3Schema:
description: Efs
type: object
properties:
spec:
type: object
properties:
region:
type: string
description: AWS Region
required:
- region
status:
description: >
A Status represents the observed state of this installation.
type: object
properties:
filesystem:
description: >
Freeform field containing information about the efs filesystem
configured by this Controller.
type: object
x-kubernetes-preserve-unknown-fields: true
kubectl describe -f efs-driver-xrc.yaml
Name: efs-test
Namespace:
Labels: crossplane.io/composite=efs-test
Annotations: <none>
API Version: platform.example.intern/v1alpha1
Kind: Efs
Spec:
Composition Ref:
Name: example-efs
Region: eu-central-1
Resource Refs:
API Version: efs.aws.crossplane.io/v1alpha1
Kind: FileSystem
Name: efs-test
API Version: efs.aws.crossplane.io/v1alpha1
Kind: MountTarget
Name: efs-test
API Version: kubernetes.crossplane.io/v1alpha1
Kind: Object
Name: efs-test
Status:
Filesystem:
File System ID: fs-fba21fa0
---
kubectl get StorageClass efs-test -o yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: efs-test
parameters:
basePath: /dynamic_provisioning
directoryPerms: "700"
fileSystemId: fs-fba21fa0 # <-- patched automatically from status
gidRangeEnd: "2000"
gidRangeStart: "1000"
provisioningMode: efs-ap
provisioner: efs.csi.aws.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment