Marketplace
BrowsePublish
Marketplace
devops-toolkit/dot-application@v0.6.3
app-backend

app-backend

app-backend
devops-toolkit/dot-application@v0.6.3app-backend
Type

Composition

Referenced XRD

App

Source Codegithub.com/vfarcic/crossplane-app
YAML
kind: Composition
apiVersion: apiextensions.crossplane.io/v1
metadata:
  name: app-backend
  creationTimestamp: null
  labels:
    location: local
    type: backend
spec:
  compositeTypeRef:
    apiVersion: devopstoolkitseries.com/v1alpha1
    kind: App
  mode: Pipeline
  patchSets:
    - name: metadata
      patches:
        - fromFieldPath: metadata.labels
  pipeline:
    - step: kcl
      functionRef:
        name: kcl-function
      input:
        apiVersion: krm.kcl.dev/v1alpha1
        kind: KCLRun
        metadata:
          name: kubernetes
        spec:
          source: >
            oxr = option("params").oxr

            dxr = {
                **oxr
                status.host = oxr.spec.parameters.host
            }

            items = [
                {
                    apiVersion = "kubernetes.crossplane.io/v1alpha1"
                    kind = "ProviderConfig"
                    metadata.name = oxr.spec.id
                    spec.credentials.source = "InjectedIdentity"
                } , {
                    apiVersion = "kubernetes.crossplane.io/v1alpha1"
                    kind = "Object"
                    metadata.name = "{}-deployment".format(oxr.spec.id)        
                    spec = {
                        forProvider.manifest = {
                            apiVersion = "apps/v1"
                            kind = "Deployment"
                            metadata = {
                                name = oxr.spec.id
                                namespace = oxr.spec.parameters.namespace
                                labels.app = oxr.spec.id
                            }
                            spec = {
                                selector.matchLabels.app = oxr.spec.id
                                template = {
                                    metadata.labels.app = oxr.spec.id
                                    spec = {
                                        containers = [{
                                            image = oxr.spec.parameters.image
                                            name = "backend"
                                            ports = [{containerPort = 80 }]
                                            livenessProbe = {
                                                httpGet = {
                                                    path = "/"
                                                    port = oxr.spec.parameters.port
                                                }
                                            }
                                            readinessProbe = {
                                                httpGet = {
                                                    path = "/"
                                                    port = oxr.spec.parameters.port
                                                }
                                            }
                                            resources = {
                                                limits = {cpu = "250m", memory = "256Mi" }
                                                requests = {cpu = "125m", memory = "128Mi" }
                                            }
                                            ports = [
                                                {containerPort = oxr.spec.parameters.port }
                                            ]
                                            if oxr.spec.parameters?.db?.secret:
                                                env = [
                                                    {
                                                        name = "DB_ENDPOINT"
                                                        valueFrom.secretKeyRef = {
                                                            key = "endpoint"
                                                            name = oxr.spec.parameters.db.secret
                                                        }
                                                    }, {
                                                        name = "DB_PASSWORD"
                                                        valueFrom.secretKeyRef = {
                                                            key = "password"
                                                            name = oxr.spec.parameters.db.secret
                                                        }
                                                    }, {
                                                        name = "DB_PORT"
                                                        valueFrom.secretKeyRef = {
                                                            key = "port"
                                                            name = oxr.spec.parameters.db.secret
                                                            optional = True
                                                        }
                                                    }, {
                                                        name = "DB_USERNAME"
                                                        valueFrom.secretKeyRef = {
                                                            key = "username"
                                                            name = oxr.spec.parameters.db.secret
                                                        }
                                                    }, {
                                                        name = "DB_NAME"
                                                        value = oxr.spec.id
                                                    },
                                                ]
                                        }]
                                    }
                                }
                            }
                        }
                        providerConfigRef.name = oxr.spec.id
                    }
                }, {
                    apiVersion = "kubernetes.crossplane.io/v1alpha1"
                    kind = "Object"
                    metadata.name = "{}-service".format(oxr.spec.id)        
                    spec = {
                        forProvider.manifest = {
                            apiVersion = "v1"
                            kind = "Service"
                            metadata = {
                                name = oxr.spec.id
                                namespace = oxr.spec.parameters.namespace
                                labels.app = oxr.spec.id
                            }
                            spec = {
                                type = "ClusterIP"
                                ports = [{
                                    port = oxr.spec.parameters.port
                                    targetPort = oxr.spec.parameters.port
                                    protocol = "TCP"
                                    name = "http"
                                }]
                                selector.app = oxr.spec.id
                            }
                        }
                        providerConfigRef.name = oxr.spec.id
                    }
                }, {
                    apiVersion = "kubernetes.crossplane.io/v1alpha1"
                    kind = "Object"
                    metadata.name = "{}-ingress".format(oxr.spec.id)        
                    spec = {
                        forProvider.manifest = {
                            apiVersion = "networking.k8s.io/v1"
                            kind = "Ingress"
                            metadata = {
                                name = oxr.spec.id
                                namespace = oxr.spec.parameters.namespace
                                labels.app = oxr.spec.id
                                annotations = {"ingress.kubernetes.io/ssl-redirect" = "false" }
                            }
                            spec.rules = [{
                                host = oxr.spec.parameters.host
                                http = {
                                    paths = [{
                                        path = "/"
                                        pathType = "ImplementationSpecific"
                                        backend.service = {
                                            name = oxr.spec.id
                                            port.number = oxr.spec.parameters.port
                                        }
                                    }]
                                }
                            }]
                        }
                        providerConfigRef.name = oxr.spec.id
                    }
                }
            ]
          target: Resources
    - step: automatically-detect-ready-composed-resources
      functionRef:
        name: crossplane-contrib-function-auto-ready
Marketplace

Discover the building blocks for your internal cloud platform.

© 2022 Upbound, Inc.

SolutionsProvidersConfigurations
LearnDocumentationTry for Free
MorePrivacy PolicyTerms & Conditions
Marketplace

© 2022 Upbound, Inc.

Marketplace

Discover the building blocksfor your internal cloud platform.