Link Search Menu Expand Document

Add schematics to the system

As described in the OAM playground concepts, an application is composed by different components that are then referenced in the application configuration. The application configuration can also use traits and scopes. Adding schematics is as simple as any other kubernetes entity.

Prerequirements

  • Playground tools are installed (kubectl & playground)
  • A napptive-kubeconfig file is available
$ playground login
Login success
$ playground get-kubeconfig
...

Use this kubeconfig to connect to the cluster and deploy applications:
kubectl --kubeconfig <napptive-kubeconfig> ...

Adding schematics

Let’s assume you want to add a new component to the system. Using the drawio component from the tutorial, save the following content to a new file named drawio_component.yaml (you can choose any name for the file).

apiVersion: core.oam.dev/v1alpha2
kind: Component
metadata:
  name: drawio
spec:
  workload:
    apiVersion: core.oam.dev/v1alpha2
    kind: ContainerizedWorkload
    metadata:
      name: drawio
    spec:
      osType: linux
      containers:
        - name: drawio
          securityContext:
            runAsUser: 1001
          image: jgraph/drawio:14.3.0
          imagePullPolicy: IfNotPresent
          resources:
            cpu:
              required: 150m
            memory:
              required: 256Mi
          ports:
            - name: http
              value: 8080
              containerPort: 8080
              type: tcp
            - name: https
              value: 8443
              containerPort: 8443
              type: tcp

Now you can deploy it with:

$ playground schematics components add drawio_component.yaml

STATUS     INFO
SUCCESS    component [drawio] added

or using kubectl command:

$ kubectl --kubeconfig <path_to>/napptive-kubeconfig create -f drawio_component.yaml
component.core.oam.dev/drawio created

The same process applies to traits and scopes. To list the existing schematics:

$ playground schematics components
NAME
drawio

$ playground schematics traits
NAME
manualscalertraits.core.oam.dev

$ playground schematics scopes
NAME
healthscopes.core.oam.dev

$ playground schematics workloads
NAME
containerizedworkloads.core.oam.dev

In the web interface, the left-side column allows you to navigate easily through the different schematics.

Drawio component schematic

Alternatively, you can use the standard kubectl approach:

$ kubectl --kubeconfig <path_to>/napptive-kubeconfig get components.core.oam.dev
NAME     WORKLOAD-KIND           AGE
drawio   ContainerizedWorkload   5m15s

$ kubectl --kubeconfig <path_to>/napptive-kubeconfig get traitdefinitions.core.oam.dev
NAME                              DEFINITION-NAME
manualscalertraits.core.oam.dev   manualscalertraits.core.oam.dev

$ kubectl --kubeconfig <path_to>/napptive-kubeconfig get scopedefinitions.core.oam.dev
NAME                        DEFINITION-NAME
healthscopes.core.oam.dev   healthscope.core.oam.dev

$ kubectl --kubeconfig <path_to>/napptive-kubeconfig get workloaddefinitions.core.oam.dev
NAME                                  DEFINITION-NAME
containerizedworkloads.core.oam.dev   containerizedworkloads.core.oam.dev

What’s next