* scheme update

This commit is contained in:
2025-11-30 01:31:03 +01:00
parent 49f0002fc6
commit e3816d8948
27 changed files with 307 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
# =============================================================================
# EXEMPLE D'UTILISATION
# Crée une instance de la ressource composite
# =============================================================================
apiVersion: mathod.io/v1alpha1
kind: X<ResourceName>
metadata:
name: <instance-name>
namespace: default
spec:
parameters:
<paramName>: <value>
<boolParam>: true
<intParam>: 200
crossplane:
compositionRef:
name: <resource>.<provider>.mathod.io

View File

@@ -0,0 +1,137 @@
# =============================================================================
# COMPOSITION
# Configure comment créer les ressources réelles
# =============================================================================
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
# Format: <resource>.<provider>.<group>
# Exemple: database.aws.mathod.io, network.gcp.mathod.io
name: <resource>.<provider>.mathod.io
labels:
provider: <provider_name>
type: <resource_type>
spec:
# Référence vers le XRD
compositeTypeRef:
apiVersion: mathod.io/v1alpha1
kind: X<ResourceName>
# Mode Pipeline (recommandé pour Crossplane v2)
mode: Pipeline
pipeline:
- step: patch-and-transform
functionRef:
name: function-patch-and-transform
input:
apiVersion: pt.fn.crossplane.io/v1beta1
kind: Resources
resources:
# =============================================
# RESSOURCE MANAGÉE #1
# =============================================
- name: <resource-name>
base:
# API de la ressource (provider specific)
apiVersion: <provider>.aws.upbound.io/v1beta1
kind: <ResourceKind>
spec:
forProvider:
# Configuration de base
<field>: <value>
# Référence au ProviderConfig
providerConfigRef:
name: aws-provider
patches:
# -------------------------------------
# FromCompositeFieldPath
# Copie depuis le XR vers la ressource
# -------------------------------------
- type: FromCompositeFieldPath
fromFieldPath: spec.parameters.<paramName>
toFieldPath: spec.forProvider.<targetField>
# -------------------------------------
# ToCompositeFieldPath
# Copie depuis la ressource vers le XR
# -------------------------------------
- type: ToCompositeFieldPath
fromFieldPath: status.atProvider.<sourceField>
toFieldPath: status.<outputField>
# -------------------------------------
# Transform - Map
# Transforme une valeur avec un mapping
# -------------------------------------
- type: FromCompositeFieldPath
fromFieldPath: spec.parameters.<boolParam>
toFieldPath: spec.forProvider.<targetField>
transforms:
- type: map
map:
"true": Enabled
"false": Disabled
# -------------------------------------
# Transform - String
# Formate une string
# -------------------------------------
- type: FromCompositeFieldPath
fromFieldPath: spec.parameters.<paramName>
toFieldPath: spec.forProvider.<targetField>
transforms:
- type: string
string:
fmt: "prefix-%s-suffix"
# -------------------------------------
# Transform - Math
# Opération mathématique
# -------------------------------------
- type: FromCompositeFieldPath
fromFieldPath: spec.parameters.<intParam>
toFieldPath: spec.forProvider.<targetField>
transforms:
- type: math
math:
multiply: 2
# -------------------------------------
# CombineFromComposite
# Combine plusieurs champs
# -------------------------------------
- type: CombineFromComposite
combine:
variables:
- fromFieldPath: spec.parameters.<param1>
- fromFieldPath: spec.parameters.<param2>
strategy: string
string:
fmt: "%s-%s"
toFieldPath: spec.forProvider.<targetField>
# =============================================
# RESSOURCE MANAGÉE #2 (avec référence)
# =============================================
- name: <related-resource>
base:
apiVersion: <provider>.aws.upbound.io/v1beta1
kind: <RelatedResourceKind>
spec:
forProvider:
# Référence vers une autre ressource
<parent>Ref:
name: ""
providerConfigRef:
name: aws-provider
patches:
# Patch la référence
- type: FromCompositeFieldPath
fromFieldPath: spec.parameters.<paramName>
toFieldPath: spec.forProvider.<parent>Ref.name
---

View File

@@ -0,0 +1,98 @@
# =============================================================================
# XRD (Composite Resource Definition)
# Définit le schéma de ton API personnalisée
# =============================================================================
apiVersion: apiextensions.crossplane.io/v2
kind: CompositeResourceDefinition
metadata:
# Format: x<pluriel>.<group>
# Exemple: xdatabases.mathod.io, xnetworks.mathod.io
name: x<RESOURCE_PLURAL>s.mathod.io
spec:
scope: Namespaced
# Le groupe de ton API (doit matcher le suffix du name)
group: mathod.io
names:
# Nom au singulier (PascalCase) - Commence par X
kind: X<ResourceName>
# Nom au pluriel (lowercase)
plural: x<resource_name>s
versions:
- name: v1alpha1
served: true
referenceable: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
parameters:
type: object
properties:
# ========================================
# Paramètres string
# ========================================
<paramName>:
type: string
description: "<Description du paramètre>"
default: "<valeur_par_defaut>"
# ========================================
# Paramètres boolean
# ========================================
<boolParam>:
type: boolean
description: "<Description du paramètre>"
default: false
# ========================================
# Paramètres integer
# ========================================
<intParam>:
type: integer
description: "<Description du paramètre>"
default: 100
# ========================================
# Paramètres array
# ========================================
<arrayParam>:
type: array
description: "<Description du paramètre>"
items:
type: string
default: []
# ========================================
# Paramètres object
# ========================================
<objectParam>:
type: object
description: "<Description du paramètre>"
properties:
<subField>:
type: string
# Paramètres obligatoires
required:
- <paramName>
required:
- parameters
# ========================================
# Status - Informations retournées
# ========================================
status:
type: object
properties:
<outputField>:
type: string
description: "<Description de la sortie>"
---