Routernetclab/netclab-xp@v0.2.13
TypeComposition
Referenced XRDRouter
YAML
Composition
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