Skip to content

Commit 5b41f7c

Browse files
authored
Merge pull request #17 from appuio/feat/custom-logo
Add option to configure a custom logo
2 parents 3f32284 + 0f8e5a7 commit 5b41f7c

File tree

8 files changed

+159
-8
lines changed

8 files changed

+159
-8
lines changed

class/defaults.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ parameters:
1212
cert_manager_certs: {}
1313

1414
console_links: {}
15+
custom_logo: {}

component/main.jsonnet

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,19 @@ local oldConfig = clusterVersion.minor < 8;
2525

2626
local versionGroup = 'operator.openshift.io/v1';
2727

28+
local logoFileName =
29+
if std.length(std.objectFields(params.custom_logo)) > 0 then
30+
assert std.length(std.objectFields(params.custom_logo)) == 1 :
31+
'The parameter custom_logo can only contain a single logo';
32+
local name = std.objectFields(params.custom_logo)[0];
33+
local nameParts = std.split(name, '.');
34+
assert std.length(nameParts) > 1 :
35+
'The key of custom_logo must provide a filename with a valid filename extension';
36+
name
37+
else
38+
'';
39+
40+
2841
// Extract route config from console spec, this allows legacy
2942
// configs to work unchanged
3043
local consoleRoute =
@@ -65,12 +78,27 @@ local consoleSpec =
6578
for k in std.objectFields(params.config)
6679
if k != 'route'
6780
} +
68-
// Inject route config using both parameters in consoleSpec on OCP4.7 and
69-
// older.
70-
if oldConfig then
71-
{ route: oldRouteCfg }
72-
else
73-
{};
81+
(
82+
// Inject route config using both parameters in consoleSpec on OCP4.7 and
83+
// older.
84+
if oldConfig then
85+
{ route: oldRouteCfg }
86+
else
87+
{}
88+
) +
89+
(
90+
if logoFileName != '' then
91+
{
92+
customization+: {
93+
customLogoFile: {
94+
key: logoFileName,
95+
name: 'console-logo',
96+
},
97+
},
98+
}
99+
else
100+
{}
101+
);
74102

75103
// Create ResourceLocker patch to configure console route in
76104
// ingress.config.openshift.io/cluster object
@@ -137,6 +165,20 @@ local tls = import 'tls.libsonnet';
137165
},
138166
[if std.length(tls.secrets) > 0 then '01_tls_secrets']: tls.secrets,
139167
[if std.length(tls.certs) > 0 then '01_certs']: tls.certs,
168+
[if logoFileName != '' then '01_logo']:
169+
kube.ConfigMap('console-logo') {
170+
metadata+: {
171+
// ConfigMap must be deployed in namespace openshift-config
172+
namespace: 'openshift-config',
173+
// ConfigMap will be copied to namespace openshift-console
174+
// To prevent ArgoCD from removing or complaining about the copy we add these annotations
175+
annotations+: {
176+
'argocd.argoproj.io/sync-options': 'Prune=false',
177+
'argocd.argoproj.io/compare-options': 'IgnoreExtraneous',
178+
},
179+
},
180+
data: params.custom_logo,
181+
},
140182
'10_console': kube._Object(versionGroup, 'Console', 'cluster') {
141183
spec+: consoleSpec,
142184
},

docs/modules/ROOT/pages/references/parameters.adoc

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,22 @@ The value of the entry will be used as the `ConsoleLink` specification.
7272
Entries with `null` values are skipped.
7373
This allows users to remove links which were configured higher up in the hierarchy.
7474

75+
== `custom_logo`
76+
77+
[horizontal]
78+
type:: dictionary
79+
default:: `{}`
80+
81+
Add a custom logo to the console.
82+
Takes a single key with the filename and the value is the base64 encoded logo.
83+
The logo can be a file in any common image format, including GIF, JPG, PNG, or SVG, and is constrained to a max-height of 60px
84+
The filename needs to have a filename extension which matches the image format.
85+
86+
[NOTE]
87+
====
88+
For SVG logos the file must *not* be base64 encoded, but inserted directly as a string.
89+
====
90+
7591
== `secrets`
7692

7793
[horizontal]
@@ -158,7 +174,7 @@ openshift4_console:
158174
----
159175

160176

161-
=== Example: Custom links in the web console
177+
=== Example: Custom links and logo in the web console
162178

163179
[source,yaml]
164180
----
@@ -184,7 +200,11 @@ openshift4_console:
184200
matchExpressions:
185201
- key: organization
186202
operation: Exists
203+
custom_logo:
204+
logo.png: |- <4>
205+
<base64-encoded_logo>
187206
----
188207
<1> Adds a link to an overflow menu at the top of every page
189208
<2> Adds a link to the help menu at the top of every page
190-
<3> Adds a link to the the dashboard of every namespace with a label `organization`
209+
<3> Adds a link to the dashboard of every namespace with a label `organization`
210+
<4> Provide a single base64-encoded logo and the key needs to have the correct filename extension

tests/custom-logo.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
parameters:
2+
openshift4_console:
3+
config:
4+
customization:
5+
customProductName: Company Cloud
6+
custom_logo:
7+
logo.png: |-
8+
V2FpdCB0aGlzIGlzbid0IGEgcGljdHVyZS4uCgpMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4g
9+
VmVsIGFjY3VzYW50aXVtIGFwZXJpYW0gc2VkIG9tbmlzIG1vbGVzdGlhZSBldW0gb21uaXMgaXBz
10+
YW0gdmVsIGVhcXVlIG5lbW8gdXQgcXVpYSB2b2x1cHRhcyBldCBtb2xlc3RpYWUgY29ycnVwdGkg
11+
Y3VtIHBsYWNlYXQgcXVpYnVzZGFtLiBBdXQgZG9sb3J1bSBkb2xvcmVtIGlkIGZ1Z2EgY29uc2Vx
12+
dWF0dXIgZXQgY29tbW9kaSBsYWJvcmlvc2FtIGF1dCBzaW50IGFuaW1pIGN1bSBlcnJvciBxdW9k
13+
IGF1dCBxdWFtIG1pbnVzIGV0IGxhYm9yZSBjb3Jwb3Jpcy4gRXQgcGVyc3BpY2lhdGlzIHF1b2Qg
14+
YWQgYXJjaGl0ZWN0byBjdXBpZGl0YXRlIGV1bSBmdWdpYXQgZXhlcmNpdGF0aW9uZW0uIEV0IG5p
15+
c2kgbmVzY2l1bnQgcXVpIGRpZ25pc3NpbW9zIGlwc3VtIHNlZCBkdWNpbXVzIHF1aWEgdXQgcmVp
16+
Y2llbmRpcyBhbmltaSBhdXQgYWxpcXVhbSBhbWV0IGVzdCBjb25zZXF1YXR1ciBtYWduaSBzZWQg
17+
cXVhZXJhdCBhZGlwaXNjaS4KClNlZCBvcHRpbyBub3N0cnVtIHF1aSBhY2N1c2FtdXMgbGFib3Jl
18+
IHV0IHZvbHVwdGFzIGxhdWRhbnRpdW0gaWQgdGVtcG9yaWJ1cyBvZmZpY2lhIHZlbCBxdWFzIGlt
19+
cGVkaXQgYWIgdm9sdXB0YXRlbSBkZWJpdGlzIHF1byBkdWNpbXVzIGR1Y2ltdXMhIFNpdCBtYWdu
20+
aSBuZXF1ZSB1dCB2ZW5pYW0gUXVpcyBpbiBwcm92aWRlbnQgcXVvcyBhdXQgaXRhcXVlIGV4cGVk
21+
aXRhLgoKUXVvIGRvbG9yZW0gcmVwZWxsZW5kdXMgZXQgcmVydW0gbmVxdWUgdmVsIHRlbXBvcmli
22+
dXMgaW5jaWR1bnQgZXQgcGVyc3BpY2lhdGlzIGV4ZXJjaXRhdGlvbmVtLiBFdCBhc3Blcm5hdHVy
23+
IGxhYm9yZSByZXByZWhlbmRlcml0IHNpbnQgZXN0IGFjY3VzYW11cyBleGVyY2l0YXRpb25lbSBp
24+
biBxdWFzIHZvbHVwdGF0ZW0gZWEgbmVzY2l1bnQgZGVzZXJ1bnQuCg==

tests/golden/custom-logo/openshift4-console/apps/openshift4-console.yaml

Whitespace-only changes.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
apiVersion: v1
2+
kind: Namespace
3+
metadata:
4+
labels:
5+
name: openshift-console
6+
name: openshift-console
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
apiVersion: v1
2+
data:
3+
logo.png: 'V2FpdCB0aGlzIGlzbid0IGEgcGljdHVyZS4uCgpMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4g
4+
5+
VmVsIGFjY3VzYW50aXVtIGFwZXJpYW0gc2VkIG9tbmlzIG1vbGVzdGlhZSBldW0gb21uaXMgaXBz
6+
7+
YW0gdmVsIGVhcXVlIG5lbW8gdXQgcXVpYSB2b2x1cHRhcyBldCBtb2xlc3RpYWUgY29ycnVwdGkg
8+
9+
Y3VtIHBsYWNlYXQgcXVpYnVzZGFtLiBBdXQgZG9sb3J1bSBkb2xvcmVtIGlkIGZ1Z2EgY29uc2Vx
10+
11+
dWF0dXIgZXQgY29tbW9kaSBsYWJvcmlvc2FtIGF1dCBzaW50IGFuaW1pIGN1bSBlcnJvciBxdW9k
12+
13+
IGF1dCBxdWFtIG1pbnVzIGV0IGxhYm9yZSBjb3Jwb3Jpcy4gRXQgcGVyc3BpY2lhdGlzIHF1b2Qg
14+
15+
YWQgYXJjaGl0ZWN0byBjdXBpZGl0YXRlIGV1bSBmdWdpYXQgZXhlcmNpdGF0aW9uZW0uIEV0IG5p
16+
17+
c2kgbmVzY2l1bnQgcXVpIGRpZ25pc3NpbW9zIGlwc3VtIHNlZCBkdWNpbXVzIHF1aWEgdXQgcmVp
18+
19+
Y2llbmRpcyBhbmltaSBhdXQgYWxpcXVhbSBhbWV0IGVzdCBjb25zZXF1YXR1ciBtYWduaSBzZWQg
20+
21+
cXVhZXJhdCBhZGlwaXNjaS4KClNlZCBvcHRpbyBub3N0cnVtIHF1aSBhY2N1c2FtdXMgbGFib3Jl
22+
23+
IHV0IHZvbHVwdGFzIGxhdWRhbnRpdW0gaWQgdGVtcG9yaWJ1cyBvZmZpY2lhIHZlbCBxdWFzIGlt
24+
25+
cGVkaXQgYWIgdm9sdXB0YXRlbSBkZWJpdGlzIHF1byBkdWNpbXVzIGR1Y2ltdXMhIFNpdCBtYWdu
26+
27+
aSBuZXF1ZSB1dCB2ZW5pYW0gUXVpcyBpbiBwcm92aWRlbnQgcXVvcyBhdXQgaXRhcXVlIGV4cGVk
28+
29+
aXRhLgoKUXVvIGRvbG9yZW0gcmVwZWxsZW5kdXMgZXQgcmVydW0gbmVxdWUgdmVsIHRlbXBvcmli
30+
31+
dXMgaW5jaWR1bnQgZXQgcGVyc3BpY2lhdGlzIGV4ZXJjaXRhdGlvbmVtLiBFdCBhc3Blcm5hdHVy
32+
33+
IGxhYm9yZSByZXByZWhlbmRlcml0IHNpbnQgZXN0IGFjY3VzYW11cyBleGVyY2l0YXRpb25lbSBp
34+
35+
biBxdWFzIHZvbHVwdGF0ZW0gZWEgbmVzY2l1bnQgZGVzZXJ1bnQuCg=='
36+
kind: ConfigMap
37+
metadata:
38+
annotations:
39+
argocd.argoproj.io/compare-options: IgnoreExtraneous
40+
argocd.argoproj.io/sync-options: Prune=false
41+
labels:
42+
name: console-logo
43+
name: console-logo
44+
namespace: openshift-config
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: operator.openshift.io/v1
2+
kind: Console
3+
metadata:
4+
annotations: {}
5+
labels:
6+
name: cluster
7+
name: cluster
8+
spec:
9+
customization:
10+
customLogoFile:
11+
key: logo.png
12+
name: console-logo
13+
customProductName: Company Cloud
14+
managementState: Managed

0 commit comments

Comments
 (0)