YAMLMerge
Takes an arbitrary number of yaml files, extracts $path from each, and merges these into a template at a new $path
Configuration
Create a new file config.yaml with the following:
template String. The template to merge keys into
crds List. The yaml files you wish to extract from
The structure for crds is an object as such:
mergeAt The yaml path in the template you wish to merge to
mergeFrom The yaml path in the remote file you need to extract
fileUrl The URL to the remote file
version The version to load
Example:
template: ./xrd/definition.yaml
crds:
- mergeAt: .spec.versions[0].schema.openAPIV3Schema.properties.status.properties.aws.properties.cluster.properties
mergeFrom: .spec.versions[0].schema.openAPIV3Schema.properties.status.properties.atProvider.properties
fileUrl: "https://raw.githubusercontent.com/upbound/provider-aws/{{ .Version }}/package/crds/eks.aws.upbound.io_clusters.yaml"
version: v0.43.0
- mergeAt: .spec.versions[0].schema.openAPIV3Schema.properties.status.properties.aws.properties.vpc.properties
mergeFrom: .spec.versions[0].schema.openAPIV3Schema.properties.status.properties.atProvider.properties
fileUrl: "https://raw.githubusercontent.com/upbound/provider-aws/{{ .Version }}/package/crds/ec2.aws.upbound.io_vpcs.yaml"
version: v0.43.0
- mergeAt: .spec.versions[0].schema.openAPIV3Schema.properties.status.properties.azure.properties.cluster.properties
mergeFrom: .spec.versions[0].schema.openAPIV3Schema.properties.status.properties.atProvider.properties
fileUrl: "https://raw.githubusercontent.com/upbound/provider-azure/{{ .Version }}/package/crds/containerservice.azure.upbound.io_kubernetesclusters.yaml"
version: v0.38.0
- mergeAt: .spec.versions[0].schema.openAPIV3Schema.properties.status.properties.gcp.properties.cluster.properties
mergeFrom: .spec.versions[0].schema.openAPIV3Schema.properties.status.properties.atProvider.properties
fileUrl: "https://raw.githubusercontent.com/upbound/provider-gcp//{{ .Version }}/package/crds/container.gcp.upbound.io_clusters.yaml"
version: v0.38.0
Results in the structure:
status:
type: object
properties:
azure:
type: object
properties:
cluster:
type: object
properties:
...
aws:
type: object
properties:
cluster:
type: object
properties:
...
vpc:
type: object
properties:
...
gcp:
type: object
properties:
cluster:
type: object
properties:
...
TODO: recursive merge