ARO-RP/docs/admin-portal.md

3.9 KiB

Admin Portal

Introduction

The admin portal is a SRE-facing front end used for performing various actions and retrieving information for clusters in a given region.

The admin portal runs inside the RP and calls against the RP for cluster information and serves that information using a MSFT inspired front end.

The front end is developed using react and typescript. The back end api is written in golang and makes direct calls to CosmosDB for cluster information.

The portal front end lives in the top level directory of the ARO-RP repo within the portal directory. The portal back end exists within pkg/portal

The front end code is built into the aro binary (via go embed) and the static files are served by aro portal.

The admin portal also serves a static Prometheus web frontend. The contents are taken from a Prometheus release's web-ui artifact (e.g. 2.48), and the static/react subdirectory is mirrored to this repository's pkg/portal/assets/prometheus-ui directory.

Developing

You will require Node.js and npm. These instructions were tested with the versions from the Fedora 34 repos.

  1. Make your desired changes in portal/v2/src/ and commit them.

  2. Run make build-portal from the main directory. This will install the dependencies and kick off the Webpack build, placing the results in portal/v2/build/.

NOTE: Due to security compliance requirements, the make build-portal target pulls from arointsvc.azurecr.io. You can either authenticate to this registry using az acr login --name arointsvc to pull the image, or modify the $RP_IMAGE_ACR environment variable to point the builds at registry.access.redhat.com instead.

  1. Run make generate. This will regenerate the golang file containing the portal content to be served.

  2. Commit the results of build-portal and generate.

Running Admin Portal in development

Running Portal Served from development RP

  1. Complete Steps mentioned above to build and compile portal.

  2. Make sure development environment variables are set and also set export NO_NPM=1. Setting this environment variable will make sure in development mode that the admin portal does not redirect to the front end development server at localhost:3000 and instead will route to localhost:8444 where the front end code is being served by the RP

  3. Run make run-portal

  4. Go to localhost:8444 to view admin portal running

Running Portal Served from the front end development server

  1. Complete Steps mentioned above to build and compile portal.

  2. Make sure development environment variables are set

  3. Run make run-portal

  4. In a seperate tab change directory to portal/v2/ and run npm run start to run front end development server

  5. Go to localhost:3000 to view admin portal running

Pointing Portal At Fake APIServer

  1. Create a file containing the following as fakekubeconfig:
kind: Config
apiVersion: v1
clusters:
- cluster:
    insecure-skip-tls-verify: true
    server: https://localhost:6443
  name: test:6443
contexts:
- context:
    cluster: test:6443
    namespace: default
    user: test
  name: test
current-context: test
users:
- name: test
  user:
    token: sha256~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  1. source secrets/env

  2. go run hack/aead/aead.go --file fakekubeconfig

  3. Replace the CosmosDB Kubeconfig entries with what's returned (except the logs)

  4. Replace OpenShiftCluster.Properties.APIServerProfile.IP value in CosmosDB with "127.0.0.1"

Running the fake API Server

  1. go run hack/fakecluster/fakecluster.go

Adding Fake Data

  1. Use oc get --raw="/path/to/api to get the raw output, and put it in pkg/portal/cluster/testdata/<api.json>

  2. Add a new route to hack/fakecluster/fakecluster.go

  3. Add new fetcher tests in pkg/portal/cluster, too!