diff --git a/base/grafana/deploy-grafana.sh b/base/grafana/deploy-grafana.sh new file mode 100755 index 0000000..e9fe1b9 --- /dev/null +++ b/base/grafana/deploy-grafana.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +set -exuo pipefail +command -v envsubst + +FILE_ROOT=${BASH_SOURCE%/*} +NAMESPACE=${NAMESPACE:=tools} + +export FILE_ROOT NAMESPACE + +# make sure user-workloads are enabled +USER_WORKLOADS=$(oc get cm/cluster-monitoring-config -n openshift-monitoring -ojsonpath='{.data.config\.yaml}') + +if ! [ "$USER_WORKLOADS" = "enableUserWorkload: true" ]; then + echo "User Workload is not enabled" + exit ; +fi + +envsubst < "${FILE_ROOT}"/operator-group.yaml | oc apply -n "${NAMESPACE}" -f - +oc apply -f "${FILE_ROOT}"/subscription.yaml -n ${NAMESPACE} + +oc wait -n "${NAMESPACE}" --for=jsonpath=status.installPlanRef.name subscription grafana-operator --timeout=120s +oc wait -n "${NAMESPACE}" installplan "$(oc get -n "${NAMESPACE}" subscription grafana-operator -o=jsonpath='{.status.installPlanRef.name}')" --for=condition=Installed --timeout=120s + +oc -n "$NAMESPACE" apply -f "$FILE_ROOT"/grafana.yaml + +oc adm policy add-cluster-role-to-user cluster-monitoring-view -z grafana-sa -n "$NAMESPACE" + +TOKEN="$(oc serviceaccounts new-token grafana-sa -n "$NAMESPACE")" +THANOS_URL="$(oc get route/thanos-querier -n openshift-monitoring -ojsonpath='{.spec.host}')" +export TOKEN THANOS_URL + +envsubst < "$FILE_ROOT"/grafanadatasource.yaml | oc -n "$NAMESPACE" apply -f - + +unset TOKEN + diff --git a/base/grafana/grafana.yaml b/base/grafana/grafana.yaml new file mode 100644 index 0000000..f655cd3 --- /dev/null +++ b/base/grafana/grafana.yaml @@ -0,0 +1,20 @@ +apiVersion: grafana.integreatly.org/v1beta1 +kind: Grafana +metadata: + name: grafana + labels: + dashboards: grafana + folders: grafana +spec: + config: + auth.anonymous: + enabled: 'true' + org_role: Admin + auth.basic: + enabled: 'true' + log: + mode: console + security: + admin_password: admin + admin_user: admin + diff --git a/base/grafana/grafanadatasource.yaml b/base/grafana/grafanadatasource.yaml new file mode 100644 index 0000000..7a19a95 --- /dev/null +++ b/base/grafana/grafanadatasource.yaml @@ -0,0 +1,24 @@ +kind: GrafanaDatasource +apiVersion: grafana.integreatly.org/v1beta1 +metadata: + name: grafanadatasource +spec: + datasource: + access: proxy + editable: true + isDefault: true + jsonData: + httpHeaderName1: 'Authorization' + timeInterval: 5s + tlsSkipVerify: true + name: Prometheus + secureJsonData: + httpHeaderValue1: 'Bearer $TOKEN' + type: prometheus + url: 'https://$THANOS_URL' + instanceSelector: + matchLabels: + dashboards: grafana + plugins: + - name: grafana-clock-panel + version: 1.3.0 diff --git a/base/grafana/operator-group.yaml b/base/grafana/operator-group.yaml new file mode 100644 index 0000000..e8abe20 --- /dev/null +++ b/base/grafana/operator-group.yaml @@ -0,0 +1,8 @@ +--- +apiVersion: operators.coreos.com/v1 +kind: OperatorGroup +metadata: + name: ${NAMESPACE} +spec: + targetNamespaces: + - ${NAMESPACE} diff --git a/base/grafana/subscription.yaml b/base/grafana/subscription.yaml new file mode 100644 index 0000000..a89dca1 --- /dev/null +++ b/base/grafana/subscription.yaml @@ -0,0 +1,12 @@ +--- +apiVersion: operators.coreos.com/v1alpha1 +kind: Subscription +metadata: + name: grafana-operator +spec: + channel: v5 + installPlanApproval: Automatic + name: grafana-operator + source: community-operators + sourceNamespace: openshift-marketplace + diff --git a/overlays/kuadrant/grafana-dashboards/app_developer.json b/overlays/kuadrant/grafana-dashboards/app_developer.json new file mode 100644 index 0000000..77b0865 --- /dev/null +++ b/overlays/kuadrant/grafana-dashboards/app_developer.json @@ -0,0 +1,9 @@ +--- +apiVersion: integreatly.org/v1alpha1 +kind: GrafanaDashboard +metadata: + name: app-developer-dashboard + namespace: +spec: + json: + url: "https://raw.githubusercontent.com/Kuadrant/kuadrant-operator/main/examples/dashboards/app_developer.json" diff --git a/overlays/kuadrant/grafana-dashboards/business_user.json b/overlays/kuadrant/grafana-dashboards/business_user.json new file mode 100644 index 0000000..9439b1f --- /dev/null +++ b/overlays/kuadrant/grafana-dashboards/business_user.json @@ -0,0 +1,10 @@ +--- +apiVersion: integreatly.org/v1alpha1 +kind: GrafanaDashboard +metadata: + name: business-user-dashboard + namespace: +spec: + json: + url: "https://raw.githubusercontent.com/Kuadrant/kuadrant-operator/main/examples/dashboards/business_user.json" + diff --git a/overlays/kuadrant/grafana-dashboards/kustomization.yaml b/overlays/kuadrant/grafana-dashboards/kustomization.yaml new file mode 100644 index 0000000..bf9aaab --- /dev/null +++ b/overlays/kuadrant/grafana-dashboards/kustomization.yaml @@ -0,0 +1,9 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - app_developer_dashboard.yaml + - business_user_dashboard.yaml + - platform_engineer_dashboard.yaml + diff --git a/overlays/kuadrant/grafana-dashboards/platform_engineer.json b/overlays/kuadrant/grafana-dashboards/platform_engineer.json new file mode 100644 index 0000000..6b12b37 --- /dev/null +++ b/overlays/kuadrant/grafana-dashboards/platform_engineer.json @@ -0,0 +1,10 @@ +--- +apiVersion: integreatly.org/v1alpha1 +kind: GrafanaDashboard +metadata: + name: platform-engineer-dashboard + namespace: +spec: + json: + url: "https://raw.githubusercontent.com/Kuadrant/kuadrant-operator/main/examples/dashboards/platform_engineer.json" + diff --git a/overlays/kuadrant/kustomization.yml b/overlays/kuadrant/kustomization.yml index b006bae..7ae9eeb 100644 --- a/overlays/kuadrant/kustomization.yml +++ b/overlays/kuadrant/kustomization.yml @@ -6,6 +6,7 @@ resources: - ../../base/mockserver/ - ../../base/jaeger/ - ../../base/keycloak-deployment/ + - /grafana-dashboards/ images: - name: quay.io/rh_integration/go-httpbin