apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
  name: node-server
spec:
  source:
    type: Dockerfile
    dockerfile: |
      FROM registry.ocp4.example.com:8443/ubi8/nodejs-16:latest

      RUN echo "const http = require('http'); \
      const hostname = '0.0.0.0'; \
      const port = 4000; \
      const server = http.createServer((req, res) => { \
        res.statusCode = 200; \
        res.setHeader('Content-Type', 'text/plain'); \
        res.end('Hello World'); \
      }); \
      server.listen(port, hostname, () => { \
        console.log(\`Server running: \${hostname}:\${port}\`); \
      }); \
      " > server.js

      EXPOSE 4000

      CMD ["node", "server.js"]
  strategy:
    type: Docker
  output:
    to:
      kind: ImageStreamTag
      name: node-server:latest
  triggers:
    - type: ConfigChange
---
apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
  name: node-server
spec:
  tags:
    - name: latest
      importPolicy:
        insecure: true
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: node-server
  template:
    metadata:
      labels:
        app: node-server
    spec:
      containers:
        - name: node-server
          image: image-registry.openshift-image-registry.svc:5000/deploy-introduction/node-server:latest
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: node-server
spec:
  selector:
    app: node-server
  ports:
    - protocol: TCP
      port: 4000
      targetPort: 4000
  type: ClusterIP
---
apiVersion: route.openshift.io/v1
kind: Route
metadata:
  name: node-server
spec:
  port:
    targetPort: 4000
  to:
    kind: Service
    name: node-server