From 8e5955138a37207b1e33a9fd06675b3f15f97857 Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Sat, 1 Oct 2022 21:30:32 -0400 Subject: [PATCH 1/2] add k3s server + agent example composition Signed-off-by: Marques Johansson --- examples/k3s/composition.yaml | 119 ++++++++++++++++++++++++++++++++++ examples/k3s/definition.yaml | 38 +++++++++++ examples/k3s/k3s.yaml | 7 ++ 3 files changed, 164 insertions(+) create mode 100644 examples/k3s/composition.yaml create mode 100644 examples/k3s/definition.yaml create mode 100644 examples/k3s/k3s.yaml diff --git a/examples/k3s/composition.yaml b/examples/k3s/composition.yaml new file mode 100644 index 0000000..8e561c2 --- /dev/null +++ b/examples/k3s/composition.yaml @@ -0,0 +1,119 @@ +apiVersion: apiextensions.crossplane.io/v1 +kind: Composition +metadata: + name: k3sclusters.deployments.equinix.com +spec: + writeConnectionSecretsToNamespace: crossplane-system + compositeTypeRef: + apiVersion: deployments.equinix.com/v1alpha1 + kind: K3sCluster + resources: + - name: k3s-project + base: + apiVersion: metal.equinix.jet.crossplane.io/v1alpha1 + kind: Project + patches: + - type: FromCompositeFieldPath + fromFieldPath: metadata.name + toFieldPath: spec.forProvider.name + - name: k3s-server + base: + apiVersion: metal.equinix.jet.crossplane.io/v1alpha1 + kind: Device + metadata: + labels: + k3s-server: 'true' + spec: + forProvider: + hostname: k3s-server + plan: c3.small.x86 + operatingSystem: ubuntu_20_04 + billingCycle: hourly + locked: false + networkType: hybrid + tags: + - crossplane + projectIdSelector: + matchControllerRef: true + writeConnectionSecretToRef: + name: server + namespace: crossplane-system + reclaimPolicy: Delete + patches: + - type: ToCompositeFieldPath + fromFieldPath: status.atProvider.accessPublicIpv4 + toFieldPath: status.serverIP + - type: FromCompositeFieldPath + fromFieldPath: spec.metro + toFieldPath: spec.forProvider.metro + - type: CombineFromComposite + toFieldPath: spec.forProvider.userData + combine: + variables: + - fromFieldPath: spec.k3stoken + strategy: string + string: + fmt: | + #cloud-config + write_files: + #- permissions: '0660' + # path: /etc/rancher/k3s/config.yaml + # content: | + # # k3s config + runcmd: + - sudo apt update + - sudo apt upgrade -y + - curl -sfL https://get.k3s.io | \ + INSTALL_K3S_EXEC="server" \ + K3S_TOKEN="%s" sh - + - name: k3s-agent + base: + apiVersion: metal.equinix.jet.crossplane.io/v1alpha1 + kind: Device + metadata: + labels: + k3s-agent: 'true' + spec: + forProvider: + hostname: k3s-agent + plan: c3.small.x86 + operatingSystem: ubuntu_20_04 + billingCycle: hourly + locked: false + networkType: hybrid + tags: + - crossplane + projectIdSelector: + matchControllerRef: true + writeConnectionSecretToRef: + name: crossplane-conformance + namespace: crossplane-system + reclaimPolicy: Delete + patches: + # TODO we reuse metro patches. create a 'patchtype' + - type: FromCompositeFieldPath + fromFieldPath: spec.metro + toFieldPath: spec.forProvider.metro + - type: CombineFromComposite + toFieldPath: spec.forProvider.userData + policy: + fromFieldPath: Required + combine: + variables: + - fromFieldPath: spec.k3stoken + - fromFieldPath: status.serverIP + strategy: string + string: + fmt: | + #cloud-config + write_files: + #- permissions: '0660' + # path: /etc/rancher/k3s/config.yaml + # content: | + # # k3s config + runcmd: + - sudo apt update + - sudo apt upgrade -y + - curl -sfL https://get.k3s.io | \ + K3S_TOKEN="%s" \ + K3S_URL=https://%s:6443 sh - diff --git a/examples/k3s/definition.yaml b/examples/k3s/definition.yaml new file mode 100644 index 0000000..c978a0a --- /dev/null +++ b/examples/k3s/definition.yaml @@ -0,0 +1,38 @@ +apiVersion: apiextensions.crossplane.io/v1 +kind: CompositeResourceDefinition +metadata: + name: k3sclusters.deployments.equinix.com +spec: + group: deployments.equinix.com + names: + kind: K3sCluster + listKind: K3sClusterList + plural: k3sclusters + singular: k3scluster + versions: + - name: v1alpha1 + served: true + referenceable: true + schema: + openAPIV3Schema: + description: Managed resources for provider-jet-equinix crossplane K3s Cluster. Creates a k3s server and agent node in a new project named after the composition resource. + type: object + properties: + spec: + type: object + properties: + metro: + type: string + description: metro + k3stoken: + type: string + description: K3s Token + required: + - metro + - k3stoken + status: + type: object + properties: + serverIP: + type: string + description: IPv4 of the K3s Server diff --git a/examples/k3s/k3s.yaml b/examples/k3s/k3s.yaml new file mode 100644 index 0000000..2a22978 --- /dev/null +++ b/examples/k3s/k3s.yaml @@ -0,0 +1,7 @@ +apiVersion: deployments.equinix.com/v1alpha1 +kind: K3sCluster +metadata: + name: k3s-sv +spec: + metro: sv + k3stoken: t09s3cr37 # This is an example token. From 94e2dd075f6afe99ed5088be582910d7f1a68a80 Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Fri, 4 Nov 2022 09:38:48 -0400 Subject: [PATCH 2/2] examples: userdata in k3s example must be a secret ref Signed-off-by: Marques Johansson --- examples/k3s/composition.yaml | 106 ++++++++++++++++++++++------------ examples/k3s/definition.yaml | 4 ++ examples/k3s/k3s.yaml | 1 + 3 files changed, 73 insertions(+), 38 deletions(-) diff --git a/examples/k3s/composition.yaml b/examples/k3s/composition.yaml index 8e561c2..9e35370 100644 --- a/examples/k3s/composition.yaml +++ b/examples/k3s/composition.yaml @@ -16,6 +16,45 @@ spec: - type: FromCompositeFieldPath fromFieldPath: metadata.name toFieldPath: spec.forProvider.name + - name: k3s-userdata + base: + apiVersion: v1 + kind: Secret + type: Opaque + metadata: + namespace: crossplane-system + patches: + - type: CombineFromComposite + toFieldPath: metadata.name + combine: + variables: + - fromFieldPath: metadata.name + strategy: string + string: + fmt: "k3s-userdata-%s" + - type: FromCompositeFieldPath + toFieldPath: metadata.namespace + fromFieldPath: spec.secretNamespace + - type: CombineFromComposite + toFieldPath: data.userdata + combine: + variables: + - fromFieldPath: spec.k3stoken + strategy: string + string: + fmt: | + #cloud-config + write_files: + #- permissions: '0660' + # path: /etc/rancher/k3s/config.yaml + # content: | + # # k3s config + runcmd: + - sudo apt update + - sudo apt upgrade -y + - curl -sfL https://get.k3s.io | \ + INSTALL_K3S_EXEC="server" \ + K3S_TOKEN="%s" sh - - name: k3s-server base: apiVersion: metal.equinix.jet.crossplane.io/v1alpha1 @@ -35,6 +74,9 @@ spec: - crossplane projectIdSelector: matchControllerRef: true + userDataSecretRef: + namespace: crossplane-system + key: userdata writeConnectionSecretToRef: name: server namespace: crossplane-system @@ -47,25 +89,13 @@ spec: fromFieldPath: spec.metro toFieldPath: spec.forProvider.metro - type: CombineFromComposite - toFieldPath: spec.forProvider.userData + toFieldPath: spec.forProvider.userDataSecretRef.name combine: variables: - - fromFieldPath: spec.k3stoken + - fromFieldPath: metadata.name strategy: string string: - fmt: | - #cloud-config - write_files: - #- permissions: '0660' - # path: /etc/rancher/k3s/config.yaml - # content: | - # # k3s config - runcmd: - - sudo apt update - - sudo apt upgrade -y - - curl -sfL https://get.k3s.io | \ - INSTALL_K3S_EXEC="server" \ - K3S_TOKEN="%s" sh - + fmt: "%s" - name: k3s-agent base: apiVersion: metal.equinix.jet.crossplane.io/v1alpha1 @@ -94,26 +124,26 @@ spec: - type: FromCompositeFieldPath fromFieldPath: spec.metro toFieldPath: spec.forProvider.metro - - type: CombineFromComposite - toFieldPath: spec.forProvider.userData - policy: - fromFieldPath: Required - combine: - variables: - - fromFieldPath: spec.k3stoken - - fromFieldPath: status.serverIP - strategy: string - string: - fmt: | - #cloud-config - write_files: - #- permissions: '0660' - # path: /etc/rancher/k3s/config.yaml - # content: | - # # k3s config - runcmd: - - sudo apt update - - sudo apt upgrade -y - - curl -sfL https://get.k3s.io | \ - K3S_TOKEN="%s" \ - K3S_URL=https://%s:6443 sh - + # - type: CombineFromComposite + # toFieldPath: spec.forProvider.userData + # policy: + # fromFieldPath: Required + # combine: + # variables: + # - fromFieldPath: spec.k3stoken + # - fromFieldPath: status.serverIP + # strategy: string + # string: + # fmt: | + # #cloud-config + # write_files: + # #- permissions: '0660' + # # path: /etc/rancher/k3s/config.yaml + # # content: | + # # # k3s config + # runcmd: + # - sudo apt update + # - sudo apt upgrade -y + # - curl -sfL https://get.k3s.io | \ + # K3S_TOKEN="%s" \ + # K3S_URL=https://%s:6443 sh - diff --git a/examples/k3s/definition.yaml b/examples/k3s/definition.yaml index c978a0a..541c5d0 100644 --- a/examples/k3s/definition.yaml +++ b/examples/k3s/definition.yaml @@ -27,9 +27,13 @@ spec: k3stoken: type: string description: K3s Token + secretNamespace: + type: string + description: Secret Namespace required: - metro - k3stoken + - secretNamespace status: type: object properties: diff --git a/examples/k3s/k3s.yaml b/examples/k3s/k3s.yaml index 2a22978..0e42e55 100644 --- a/examples/k3s/k3s.yaml +++ b/examples/k3s/k3s.yaml @@ -5,3 +5,4 @@ metadata: spec: metro: sv k3stoken: t09s3cr37 # This is an example token. + secretNamespace: crossplane-system