RainerP
September 27, 2024, 1:50pm
1
Hi,
I am using AWX 24.6.0 and would like to use a custom logo on the top left of the Dashboard.
I was happy this version supports to upload a custom logo, but this only works for the login screen.
I noticed Setting a custom logo doesn't replace AWX logo in top-left of UI · Issue #1316 · ansible/awx · GitHub but was hoping to find a solution here.
Many thanks
Rainer
kurokobo
(kurokobo)
September 27, 2024, 1:58pm
2
Hi,
This can be achieved by customizing the AWX CR to mount your images at the path where the default logos are placed.
See Custom Logos
section in the Operator docs:
https://ansible.readthedocs.io/projects/awx-operator/en/latest/user-guide/advanced-configuration/custom-volume-and-volume-mount-options.html?h=logo#custom-logos
RainerP
September 30, 2024, 8:25am
3
Hi,
thank you very much.
Unfortunately it doesn’t work for the me, my new *.svg logo isn’t displayed. I fixed errors I noticed with kubectl describe pod awx-webxxxx
and saw there are no errors in the log kubectl logs awx-webxxxx
.
Are there specific svg format requirements to get it work ? (also tried with *.png without success).
Thanks
Rainer
kurokobo
(kurokobo)
September 30, 2024, 9:09am
4
Please provide how did you configure your AWX CR and result of kubectl describe
command
RainerP
September 30, 2024, 11:16am
5
I think I basicly did it like described:
kubectl create configmap iso-logo-header-configmap --from-file iso-logo-header.svg -n awx
kubectl create configmap iso-logo-login-configmap --from-file iso-logo-login.svg -n awx
added this to file awx.yaml
## add custom logos
extra_volumes: |
- name: logo-login
configMap:
defaultMode: 420
items:
- key: iso-logo-login.svg
path: iso-logo-login.svg
name: iso-logo-login-configmap
- name: logo-header
configMap:
defaultMode: 420
items:
- key: iso-logo-header.svg
path: iso-logo-header.svg
name: iso-logo-header-configmap
web_extra_volume_mounts: |
- name: logo-login
mountPath: /home/ansible/awx/awx-on-k3s/mount/iso-logo-login.svg
subPath: iso-logo-login.svg
- name: logo-header
mountPath: /home/ansible/awx/awx-on-k3s/mount/iso-logo-header.svg
subPath: iso-logo-header.svg
executed:
kubectl apply -f awx.yaml -n awx
awx.awx.ansible.com/awx configured
logo files
ll /home/ansible/awx/awx-on-k3s/mount
total 40
-rw-r-----. 1 ansible ansible 14142 Sep 27 15:31 iso-logo-header.png
-rw-r-----. 1 ansible ansible 2051 Sep 27 18:11 iso-logo-header.svg
-rw-r-----. 1 ansible ansible 14142 Sep 27 15:31 iso-logo-login.png
-rw-r-----. 1 ansible ansible 2051 Sep 27 18:11 iso-logo-login.svg
kubectl describe pods awx-web-5dff48b9db-sfb7d -n awx
Name: awx-web-5dff48b9db-sfb7d
Namespace: awx
Priority: 0
Service Account: awx
Node: ipsnbg6vm48/10.55.127.85
Start Time: Mon, 30 Sep 2024 13:12:05 +0200
Labels: app.kubernetes.io/component=awx
app.kubernetes.io/managed-by=awx-operator
app.kubernetes.io/name=awx-web
app.kubernetes.io/operator-version=2.19.0
app.kubernetes.io/part-of=awx
app.kubernetes.io/version=24.6.0
pod-template-hash=5dff48b9db
Annotations: checksum-configmaps-config: 416f2808f9764fd68076cf21791805a14c756513
checksum-secret-bundle_cacert: da39a3ee5e6b4b0d3255bfef95601890afd80709
checksum-secret-ldap_cacert: da39a3ee5e6b4b0d3255bfef95601890afd80709
checksum-secret-receptor_ca: b4feee9cb6c2df87d6c9e28ee2d9752ef5f1a926
checksum-secret-receptor_work_signing: 5587d2b225e686a6a29b2810a7a6a260f65560e0
checksum-secret-route_tls: da39a3ee5e6b4b0d3255bfef95601890afd80709
checksum-secret-secret_key: 74ed28c0cff87d66b2b34a8ac215214246af4eb2
checksum-secrets-app_credentials: 9eff3e8abdbb683942720b674e2de7b12cbaa284
checksum-storage-persistent: adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
kubectl.kubernetes.io/default-container: awx-web
Status: Running
IP: 10.42.0.14
IPs:
IP: 10.42.0.14
Controlled By: ReplicaSet/awx-web-5dff48b9db
Init Containers:
init-projects:
Container ID: containerd://199af1b5f8bb9cc49332657c0057eefb67f2830eea7658012b183c7b3e981c16
Image: quay.io/centos/centos:stream9
Image ID: quay.io/centos/centos@sha256:ac0212d48e014fec37f496485b403453e9e92802e68ee276b749560ea26ddd08
Port: <none>
Host Port: <none>
Command:
/bin/sh
-c
chmod 775 /var/lib/awx/projects
chgrp 1000 /var/lib/awx/projects
State: Terminated
Reason: Completed
Exit Code: 0
Started: Mon, 30 Sep 2024 13:12:05 +0200
Finished: Mon, 30 Sep 2024 13:12:06 +0200
Ready: True
Restart Count: 0
Environment:
MY_POD_NAME: awx-web-5dff48b9db-sfb7d (v1:metadata.name)
Mounts:
/var/lib/awx/projects from awx-projects (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-g5bz7 (ro)
Containers:
redis:
Container ID: containerd://782ced11bff11670ed636269f440b24e9a6111b54c25544afc0dfe0b4636dec6
Image: docker.io/redis:7
Image ID: docker.io/library/redis@sha256:fb534a36ac2034a6374933467d971fbcbfa5d213805507f560d564851a720355
Port: <none>
Host Port: <none>
Args:
redis-server
/etc/redis.conf
State: Running
Started: Mon, 30 Sep 2024 13:12:06 +0200
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/data from awx-redis-data (rw)
/etc/redis.conf from awx-redis-config (ro,path="redis.conf")
/var/run/redis from awx-redis-socket (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-g5bz7 (ro)
awx-web:
Container ID: containerd://a5af898f246ffdb5b2271307842a3deeb818b7271d43b053384f312e2b63d04c
Image: quay.io/ansible/awx:24.6.0
Image ID: quay.io/ansible/awx@sha256:8221b859aede2a155038fa07af50078ba37b06b969b259f3dd1147a931e30fac
Port: 8052/TCP
Host Port: 0/TCP
Args:
/usr/bin/launch_awx_web.sh
State: Running
Started: Mon, 30 Sep 2024 13:12:07 +0200
Ready: True
Restart Count: 0
Environment:
AWX_COMPONENT: web
SUPERVISOR_CONFIG_PATH: /etc/supervisord_web.conf
MY_POD_NAMESPACE: awx (v1:metadata.namespace)
MY_POD_IP: (v1:status.podIP)
UWSGI_MOUNT_PATH: /
Mounts:
/etc/nginx/nginx.conf from awx-nginx-conf (ro,path="nginx.conf")
/etc/receptor/tls/ca/mesh-CA.crt from awx-receptor-ca (ro,path="tls.crt")
/etc/receptor/tls/ca/mesh-CA.key from awx-receptor-ca (ro,path="tls.key")
/etc/receptor/work_public_key.pem from awx-receptor-work-signing (ro,path="work-public-key.pem")
/etc/tower/SECRET_KEY from awx-secret-key (ro,path="SECRET_KEY")
/etc/tower/conf.d/credentials.py from awx-application-credentials (ro,path="credentials.py")
/etc/tower/conf.d/execution_environments.py from awx-application-credentials (ro,path="execution_environments.py")
/etc/tower/conf.d/ldap.py from awx-application-credentials (ro,path="ldap.py")
/etc/tower/settings.py from awx-settings (ro,path="settings.py")
/etc/tower/uwsgi.ini from awx-uwsgi-config (ro,path="uwsgi.conf")
/home/ansible/awx/awx-on-k3s/mount/iso-logo-header.svg from logo-header (rw,path="iso-logo-header.svg")
/home/ansible/awx/awx-on-k3s/mount/iso-logo-login.svg from logo-login (rw,path="iso-logo-login.svg")
/var/lib/awx/projects from awx-projects (rw)
/var/run/awx-rsyslog from rsyslog-socket (rw)
/var/run/redis from awx-redis-socket (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-g5bz7 (ro)
awx-rsyslog:
Container ID: containerd://9e10b00bcb4086e07b8f2789174741d078fc15c9e17124b7370b90a0a253b649
Image: quay.io/ansible/awx:24.6.0
Image ID: quay.io/ansible/awx@sha256:8221b859aede2a155038fa07af50078ba37b06b969b259f3dd1147a931e30fac
Port: <none>
Host Port: <none>
Args:
/usr/bin/launch_awx_rsyslog.sh
State: Running
Started: Mon, 30 Sep 2024 13:12:07 +0200
Ready: True
Restart Count: 0
Environment:
SUPERVISOR_CONFIG_PATH: /etc/supervisord_rsyslog.conf
Mounts:
/etc/tower/SECRET_KEY from awx-secret-key (ro,path="SECRET_KEY")
/etc/tower/conf.d/credentials.py from awx-application-credentials (ro,path="credentials.py")
/etc/tower/settings.py from awx-settings (ro,path="settings.py")
/var/run/awx-rsyslog from rsyslog-socket (rw)
/var/run/redis from awx-redis-socket (rw)
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-g5bz7 (ro)
Conditions:
Type Status
PodReadyToStartContainers True
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
awx-receptor-ca:
Type: Secret (a volume populated by a Secret)
SecretName: awx-receptor-ca
Optional: false
awx-receptor-work-signing:
Type: Secret (a volume populated by a Secret)
SecretName: awx-receptor-work-signing
Optional: false
awx-application-credentials:
Type: Secret (a volume populated by a Secret)
SecretName: awx-app-credentials
Optional: false
awx-secret-key:
Type: Secret (a volume populated by a Secret)
SecretName: awx-secret-key
Optional: false
awx-settings:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: awx-awx-configmap
Optional: false
awx-nginx-conf:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: awx-awx-configmap
Optional: false
awx-redis-config:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: awx-awx-configmap
Optional: false
awx-uwsgi-config:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: awx-awx-configmap
Optional: false
awx-redis-socket:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
awx-redis-data:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
rsyslog-socket:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
receptor-socket:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
awx-receptor-config:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: awx-awx-configmap
Optional: false
awx-projects:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: awx-projects-claim
ReadOnly: false
logo-login:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: iso-logo-login-configmap
Optional: false
logo-header:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: iso-logo-header-configmap
Optional: false
kube-api-access-g5bz7:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 51m default-scheduler Successfully assigned awx/awx-web-5dff48b9db-sfb7d to ipsnbg6vm48
Normal Pulled 51m kubelet Container image "quay.io/centos/centos:stream9" already present on machine
Normal Created 51m kubelet Created container init-projects
Normal Started 51m kubelet Started container init-projects
Normal Pulled 51m kubelet Container image "docker.io/redis:7" already present on machine
Normal Created 51m kubelet Created container redis
Normal Started 51m kubelet Started container redis
Normal Pulled 51m kubelet Container image "quay.io/ansible/awx:24.6.0" already present on machine
Normal Created 51m kubelet Created container awx-web
Normal Started 51m kubelet Started container awx-web
Normal Pulled 51m kubelet Container image "quay.io/ansible/awx:24.6.0" already present on machine
Normal Created 51m kubelet Created container awx-rsyslog
Normal Started 51m kubelet Started container awx-rsyslog
Thank you
Rainer
kurokobo
(kurokobo)
September 30, 2024, 2:20pm
6
@RainerP
The mountPath
is the target path where your svg file is mounted as inside the container , instead of the path of he source file on your host. These paths must be the same as documented:
web_extra_volume_mounts: |
- name: logo-login
mountPath: /var/lib/awx/public/static/media/logo-login.svg ✅
subPath: logo-login.svg
- name: logo-header
mountPath: /var/lib/awx/public/static/media/logo-header.svg ✅
subPath: logo-header.svg
1 Like
Thank you, this solved my issue.
However the logos look some kind of different compared to before / outside of AWX (eg. white color is now grey). Any advise how to create svg files from png/screenshots ?
kurokobo
(kurokobo)
October 1, 2024, 2:10pm
8
I don’t know if this is a valid choice for you, but I usually use Photoshop