apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: routers.eos.netclab.dev
creationTimestamp: null
spec:
compositeTypeRef:
apiVersion: eos.netclab.dev/v1alpha1
kind: Router
mode: Pipeline
pipeline:
- step: router
functionRef:
name: crossplane-contrib-function-go-templating
input:
apiVersion: gotemplating.fn.crossplane.io/v1beta1
inline:
template: |
{{- $endpoint := .observed.composite.resource.spec.endpoint }}
---
apiVersion: eos.netclab.dev/v1alpha1
kind: LoopbackInterface
metadata:
annotations:
gotemplating.fn.crossplane.io/composition-resource-name: {{ .observed.composite.resource.metadata.name }}-lo0
spec:
endpoint: {{ $endpoint }}
ifName: Loopback0
---
apiVersion: eos.netclab.dev/v1alpha1
kind: RoutedInterface
metadata:
annotations:
gotemplating.fn.crossplane.io/composition-resource-name: {{ .observed.composite.resource.metadata.name }}-lo0-ip
spec:
endpoint: {{ $endpoint }}
ifName: Loopback0
ipv4Address: "{{ .observed.composite.resource.spec.routerId }}"
ipv4PrefixLength: 32
---
apiVersion: eos.netclab.dev/v1alpha1
kind: BgpGlobal
metadata:
annotations:
gotemplating.fn.crossplane.io/composition-resource-name: {{ .observed.composite.resource.metadata.name }}-bgp
spec:
endpoint: {{ $endpoint }}
asn: {{ int .observed.composite.resource.spec.asn }}
routerId: "{{ .observed.composite.resource.spec.routerId }}"
---
apiVersion: eos.netclab.dev/v1alpha1
kind: IpRouting
metadata:
annotations:
gotemplating.fn.crossplane.io/composition-resource-name: {{ .observed.composite.resource.metadata.name }}-routing
spec:
endpoint: {{ $endpoint }}
{{- range .observed.composite.resource.spec.routedInterfaces }}
---
apiVersion: eos.netclab.dev/v1alpha1
kind: RoutedInterface
metadata:
annotations:
gotemplating.fn.crossplane.io/composition-resource-name: {{ $.observed.composite.resource.metadata.name }}-{{ .name }}
spec:
endpoint: {{ $endpoint }}
ifName: {{ .ifName }}
ipv4Address: "{{ .ipv4Address }}"
ipv4PrefixLength: {{ .ipv4PrefixLength }}
{{- end }}
{{- range .observed.composite.resource.spec.bgpNeighbors }}
---
apiVersion: eos.netclab.dev/v1alpha1
kind: BgpNeighbor
metadata:
annotations:
gotemplating.fn.crossplane.io/composition-resource-name: {{ $.observed.composite.resource.metadata.name }}-{{ .neighborIp }}
spec:
endpoint: {{ $endpoint }}
networkInstance: {{ .networkInstance }}
neighborAsn: {{ int .neighborAsn }}
neighborIp: "{{ .neighborIp }}"
{{- end }}
kind: GoTemplate
source: Inline
- step: auto-ready
functionRef:
name: crossplane-contrib-function-auto-ready