From 73934d9233851dff893239521002a497689d9b16 Mon Sep 17 00:00:00 2001
From: Mark <mark@openappstack.net>
Date: Fri, 20 Dec 2019 00:00:22 +0100
Subject: [PATCH] Enable Grafana single-sign on

---
 ansible/group_vars/all/oas.yml                   |  1 +
 .../apps/templates/monitoring-settings.yaml      | 14 +++++++++++++-
 .../apps/templates/single-sign-on-settings.yaml  | 16 ++++++++++++++++
 3 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/ansible/group_vars/all/oas.yml b/ansible/group_vars/all/oas.yml
index 2e306966c..05c0cdc1c 100644
--- a/ansible/group_vars/all/oas.yml
+++ b/ansible/group_vars/all/oas.yml
@@ -24,6 +24,7 @@ grafana_admin_password: "{{ lookup('password', '{{ cluster_dir }}/secrets/grafan
 # Single sign-on passwords
 userpanel_oauth_client_secret: "{{ lookup('password', '{{ cluster_dir }}/secrets/userpanel_oauth_client_secret chars=ascii_letters') }}"
 nextcloud_oauth_client_secret: "{{ lookup('password', '{{ cluster_dir }}/secrets/nextcloud_oauth_client_secret chars=ascii_letters') }}"
+grafana_oauth_client_secret: "{{ lookup('password', '{{ cluster_dir }}/secrets/grafana_oauth_client_secret chars=ascii_letters') }}"
 userbackend_postgres_password: "{{ lookup('password', '{{ cluster_dir }}/secrets/userbackend_postgres_password chars=ascii_letters') }}"
 userbackend_admin_username: "admin"
 userbackend_admin_password: "{{ lookup('password', '{{ cluster_dir }}/secrets/userbackend_admin_password chars=ascii_letters') }}"
diff --git a/ansible/roles/apps/templates/monitoring-settings.yaml b/ansible/roles/apps/templates/monitoring-settings.yaml
index c36732059..9180c501f 100644
--- a/ansible/roles/apps/templates/monitoring-settings.yaml
+++ b/ansible/roles/apps/templates/monitoring-settings.yaml
@@ -121,7 +121,19 @@ additionalPrometheusRulesMap:
 
 grafana:
   adminPassword: "{{ grafana_admin_password }}"
-
+  grafana.ini:
+    server:
+      root_url: "https://grafana.{{ domain }}"
+    auth.generic_oauth:
+      name: grafana
+      enabled: true
+      client_id: grafana
+      client_secret: "{{ grafana_oauth_client_secret }}"
+      scopes: "openid profile email openappstack_roles"
+      auth_url: "https://sso.{{ domain }}/oauth2/auth"
+      token_url: "https://sso.{{ domain }}/oauth2/token"
+      api_url: "https://sso.{{ domain }}/userinfo"
+      role_attribute_path: contains(openappstack_roles[*], 'admin') && 'Admin' || 'Viewer'
   ingress:
     enabled: true
     annotations:
diff --git a/ansible/roles/apps/templates/single-sign-on-settings.yaml b/ansible/roles/apps/templates/single-sign-on-settings.yaml
index 79e48aad6..247a27f19 100644
--- a/ansible/roles/apps/templates/single-sign-on-settings.yaml
+++ b/ansible/roles/apps/templates/single-sign-on-settings.yaml
@@ -26,6 +26,8 @@ userbackend:
       description: Administration interface to manage user accounts
     - name: &NEXTCLOUD nextcloud
       description: "Nextcloud Files offers an on-premise Universal File Access and sync platform with powerful collaboration capabilities and desktop, mobile and web interfaces."
+    - name: &GRAFANA grafana
+      description: "Grafana allows you to query, visualize, alert on and understand metrics generated by OpenAppStack. It can be used to create explore and share dashboards."
   username: "{{ userbackend_admin_username }}"
   password: "{{ userbackend_admin_password }}"
   email: "{{ userbackend_admin_email }}"
@@ -91,3 +93,17 @@ oAuthClients:
     - "authorization_code"
     - "refresh_token"
     - "client_credentials"
+- clientName: *GRAFANA
+  clientSecret: "{{ grafana_oauth_client_secret }}"
+  redirectUri: "https://grafana.{{ domain }}/login/generic_oauth"
+  scopes: "openid profile email openappstack_roles"
+  clientUri: "https://grafana.{{ domain }}"
+  clientLogoUri: "https://files.{{ domain }}/public/img/grafana_icon.svg"
+  tokenEndpointAuthMethod: "client_secret_post"
+  responseTypes:
+    - "code"
+    - "id_token"
+  grantTypes:
+    - "authorization_code"
+    - "refresh_token"
+    - "client_credentials"
-- 
GitLab