k8s/roles/uyuni/tasks/helm.yml
mrwho 12bcf77d62 style(helm): convert inline JSON ConfigMaps to YAML format
Replace inline JSON string definitions with native YAML syntax for Kubernetes resource manifests in helm.yml, improving readability and maintainability while preserving identical resource configurations.
2026-07-19 18:40:02 +03:00

1745 lines
50 KiB
YAML

---
# ConfigMaps
- name: ConfigMap | uyuni-config
kubernetes.core.k8s:
api_version: v1
kind: ConfigMap
name: uyuni-config
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/part-of: uyuni
name: uyuni-config
namespace: '{{ uyuni_namespace }}'
data:
fqdn: "{{ uyuni_helm_values['global.fqdn'] }}"
email: "{{ uyuni_helm_values['server.email'] }}"
db_host: db
db_port: '5432'
db_name: "{{ uyuni_helm_values['db.internal.name'] }}"
reportdb_host: reportdb
reportdb_port: '5432'
reportdb_name: reportdb
state: present
# PersistentVolumeClaims
- name: PersistentVolumeClaim | ca-certs
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: ca-certs
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: ca-certs
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | etc-apache2
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-apache2
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-apache2
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-cobbler
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-cobbler
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-cobbler
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-postfix
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-postfix
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-postfix
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-rhn
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-rhn
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-rhn
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-salt
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-salt
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-salt
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-sssd
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-sssd
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-sssd
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-sysconfig
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-sysconfig
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-sysconfig
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Mi
state: present
- name: PersistentVolumeClaim | etc-systemd-multi
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-systemd-multi
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-systemd-multi
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-systemd-sockets
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-systemd-sockets
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-systemd-sockets
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-tomcat
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-tomcat
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-tomcat
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | run-salt-master
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: run-salt-master
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: run-salt-master
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | srv-formulametadata
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: srv-formulametadata
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: srv-formulametadata
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | srv-pillar
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: srv-pillar
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: srv-pillar
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | srv-salt
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: srv-salt
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: srv-salt
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | srv-spacewalk
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: srv-spacewalk
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: srv-spacewalk
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | srv-susemanager
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: srv-susemanager
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: srv-susemanager
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | srv-tftpboot
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: srv-tftpboot
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: srv-tftpboot
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 300Mi
state: present
- name: PersistentVolumeClaim | srv-www
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: srv-www
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: srv-www
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
state: present
- name: PersistentVolumeClaim | var-cache
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: var-cache
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: var-cache
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
state: present
- name: PersistentVolumeClaim | var-cobbler
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: var-cobbler
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: var-cobbler
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | var-log
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: var-log
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: var-log
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
state: present
- name: PersistentVolumeClaim | var-pgsql18
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: var-pgsql18
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: var-pgsql18
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
state: present
- name: PersistentVolumeClaim | var-salt
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: var-salt
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: var-salt
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | var-search
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: var-search
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: var-search
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
state: present
- name: PersistentVolumeClaim | var-spacewalk
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: var-spacewalk
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: var-spacewalk
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
state: present
# Services
- name: Service | cobbler
kubernetes.core.k8s:
api_version: v1
kind: Service
name: cobbler
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
name: cobbler
namespace: '{{ uyuni_namespace }}'
spec:
ports:
- name: cobbler
port: 25151
selector:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
type: ClusterIP
state: present
- name: Service | db
kubernetes.core.k8s:
api_version: v1
kind: Service
name: db
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/component: db
app.kubernetes.io/part-of: uyuni
name: db
namespace: '{{ uyuni_namespace }}'
spec:
ports:
- name: pgsql
port: 5432
selector:
app.kubernetes.io/component: db
app.kubernetes.io/part-of: uyuni
type: ClusterIP
state: present
- name: Service | reportdb
kubernetes.core.k8s:
api_version: v1
kind: Service
name: reportdb
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/component: db
app.kubernetes.io/part-of: uyuni
name: reportdb
namespace: '{{ uyuni_namespace }}'
spec:
ports:
- name: pgsql
port: 5432
selector:
app.kubernetes.io/component: db
app.kubernetes.io/part-of: uyuni
type: ClusterIP
state: present
- name: Service | salt
kubernetes.core.k8s:
api_version: v1
kind: Service
name: salt
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
name: salt
namespace: '{{ uyuni_namespace }}'
spec:
ports:
- name: publish
port: 4505
- name: request
port: 4506
selector:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
type: ClusterIP
state: present
- name: Service | taskomatic-internal
kubernetes.core.k8s:
api_version: v1
kind: Service
name: taskomatic-internal
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
name: taskomatic-internal
namespace: '{{ uyuni_namespace }}'
spec:
ports:
- name: jmx
port: 5557
- name: mtrx
port: 9800
selector:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
type: ClusterIP
state: present
- name: Service | tomcat-internal
kubernetes.core.k8s:
api_version: v1
kind: Service
name: tomcat-internal
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
name: tomcat-internal
namespace: '{{ uyuni_namespace }}'
spec:
ports:
- name: node-exporter
port: 9100
- name: jmx
port: 5556
- name: pgsql-exporter
port: 9187
selector:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
type: ClusterIP
state: present
- name: Service | web
kubernetes.core.k8s:
api_version: v1
kind: Service
name: web
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
name: web
namespace: '{{ uyuni_namespace }}'
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
type: ClusterIP
state: present
# Deployments
- name: Deployment | db
kubernetes.core.k8s:
api_version: apps/v1
kind: Deployment
name: db
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: apps/v1
metadata:
creationTimestamp: null
labels:
app.kubernetes.io/component: db
app.kubernetes.io/part-of: uyuni
name: db
namespace: '{{ uyuni_namespace }}'
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: db
app.kubernetes.io/part-of: uyuni
strategy:
type: Recreate
template:
metadata:
labels:
app.kubernetes.io/component: db
app.kubernetes.io/part-of: uyuni
spec:
containers:
- env:
- name: TZ
value: Etc/UTC
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
key: username
name: db-admin-credentials
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
key: password
name: db-admin-credentials
- name: MANAGER_USER
valueFrom:
secretKeyRef:
key: username
name: db-credentials
- name: MANAGER_PASS
valueFrom:
secretKeyRef:
key: password
name: db-credentials
- name: REPORT_DB_USER
valueFrom:
secretKeyRef:
key: username
name: reportdb-credentials
- name: REPORT_DB_PASS
valueFrom:
secretKeyRef:
key: password
name: reportdb-credentials
image: registry.opensuse.org/uyuni/server-postgresql:latest
imagePullPolicy: IfNotPresent
name: db
volumeMounts:
- mountPath: /var/lib/pgsql/data
name: var-pgsql
- mountPath: /etc/pki
name: tls-secret
securityContext:
fsGroup: 999
volumes:
- name: var-pgsql
persistentVolumeClaim:
claimName: var-pgsql18
- name: tls-secret
secret:
items:
- key: tls.crt
path: tls/certs/spacewalk.crt
- key: tls.key
mode: 256
path: tls/private/pg-spacewalk.key
- key: ca.crt
path: trust/anchors/LOCAL-RHN-ORG-TRUSTED-SSL-CERT
secretName: db-cert
state: present
- name: Deployment | uyuni
kubernetes.core.k8s:
api_version: apps/v1
kind: Deployment
name: uyuni
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: apps/v1
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
name: uyuni
namespace: '{{ uyuni_namespace }}'
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
strategy:
type: Recreate
template:
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
spec:
containers:
- env:
- name: container
value: oci
- name: TZ
value: Etc/UTC
- name: ADMIN_USER
valueFrom:
secretKeyRef:
key: username
name: admin-credentials
optional: false
- name: ADMIN_PASS
valueFrom:
secretKeyRef:
key: password
name: admin-credentials
optional: false
- name: MANAGER_USER
valueFrom:
secretKeyRef:
key: username
name: db-credentials
optional: false
- name: MANAGER_PASS
valueFrom:
secretKeyRef:
key: password
name: db-credentials
optional: false
- name: REPORT_DB_USER
valueFrom:
secretKeyRef:
key: username
name: reportdb-credentials
optional: false
- name: REPORT_DB_PASS
valueFrom:
secretKeyRef:
key: password
name: reportdb-credentials
optional: false
- name: MANAGER_DB_NAME
value: "{{ uyuni_helm_values['db.internal.name'] }}"
- name: MANAGER_DB_HOST
value: db
- name: MANAGER_DB_CA_CERT
value: /etc/pki/trust/anchors/DB-RHN-ORG-TRUSTED-SSL-CERT
- name: MANAGER_DB_PORT
value: '5432'
- name: EXTERNALDB_PROVIDER
- name: ISS_PARENT
- name: REPORT_DB_NAME
value: reportdb
- name: REPORT_DB_HOST
value: reportdb
- name: REPORT_DB_CA_CERT
value: /etc/pki/trust/anchors/DB-RHN-ORG-TRUSTED-SSL-CERT
- name: REPORT_DB_PORT
value: '5432'
- name: MANAGER_ADMIN_EMAIL
valueFrom:
configMapKeyRef:
key: email
name: uyuni-config
optional: false
- name: MANAGER_MAIL_FROM
valueFrom:
configMapKeyRef:
key: email
name: uyuni-config
optional: false
- name: UYUNI_HOSTNAME
valueFrom:
configMapKeyRef:
key: fqdn
name: uyuni-config
optional: false
image: registry.opensuse.org/uyuni/server:latest
imagePullPolicy: IfNotPresent
lifecycle:
preStop:
exec:
command:
- /bin/sh
- -c
- spacewalk-service stop
name: uyuni
securityContext:
capabilities:
add:
- SYS_ADMIN
seLinuxOptions:
level: s0
ports:
- containerPort: 80
- containerPort: 4505
- containerPort: 4506
- containerPort: 25151
- containerPort: 9100
- containerPort: 5556
- containerPort: 5557
- containerPort: 9187
- containerPort: 9800
startupProbe:
exec:
command:
- /usr/bin/startup-check.sh
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3600
livenessProbe:
exec:
command:
- /usr/bin/liveness-check.sh
timeoutSeconds: 5
failureThreshold: 5
periodSeconds: 60
readinessProbe:
httpGet:
path: /rhn/manager/api/api/getVersion
port: 80
scheme: HTTP
periodSeconds: 10
successThreshold: 1
initialDelaySeconds: 120
volumeMounts:
- mountPath: /var/lib/cobbler
name: var-cobbler
- mountPath: /var/lib/rhn/search
name: var-search
- mountPath: /var/lib/salt
name: var-salt
- mountPath: /var/cache
name: var-cache
- mountPath: /var/spacewalk
name: var-spacewalk
- mountPath: /var/log
name: var-log
- mountPath: /srv/salt
name: srv-salt
- mountPath: /srv/www/
name: srv-www
- mountPath: /srv/tftpboot
name: srv-tftpboot
- mountPath: /srv/formula_metadata
name: srv-formulametadata
- mountPath: /srv/pillar
name: srv-pillar
- mountPath: /srv/susemanager
name: srv-susemanager
- mountPath: /srv/spacewalk
name: srv-spacewalk
- mountPath: /etc/pki/trust/anchors/
name: ca-certs
- mountPath: /run/salt/master
name: run-salt-master
- mountPath: /etc/apache2
name: etc-apache2
- mountPath: /etc/systemd/system/multi-user.target.wants
name: etc-systemd-multi
- mountPath: /etc/systemd/system/sockets.target.wants
name: etc-systemd-sockets
- mountPath: /etc/salt
name: etc-salt
- mountPath: /etc/tomcat
name: etc-tomcat
- mountPath: /etc/cobbler
name: etc-cobbler
- mountPath: /etc/sysconfig
name: etc-sysconfig
- mountPath: /etc/postfix
name: etc-postfix
- mountPath: /etc/sssd
name: etc-sssd
- mountPath: /etc/rhn
name: etc-rhn
- mountPath: /etc/pki/trust/anchors/LOCAL-RHN-ORG-TRUSTED-SSL-CERT
name: ca-cert
readOnly: true
subPath: ca.crt
- mountPath: /usr/share/susemanager/salt/certs/RHN-ORG-TRUSTED-SSL-CERT
name: ca-cert
readOnly: true
subPath: ca.crt
- mountPath: /srv/www/htdocs/pub/RHN-ORG-TRUSTED-SSL-CERT
name: ca-cert
readOnly: true
subPath: ca.crt
- mountPath: /etc/pki/trust/anchors/DB-RHN-ORG-TRUSTED-SSL-CERT
name: db-ca-cert
readOnly: true
subPath: ca.crt
- mountPath: /etc/pki/
name: tls
- mountPath: /run
name: run
- mountPath: /sys/fs/cgroup
name: sys-fs-cgroup
initContainers:
- command:
- sh
- -x
- -c
- "# Fill the empty volumes\nfor vol in /var/lib/cobbler \\\n /var/lib/rhn/search \\\n /var/lib/salt \\\n /var/cache \\\n /var/log \\\n /srv/salt \\\n /srv/www\
\ \\\n /srv/tftpboot \\\n /srv/formula_metadata \\\n /srv/pillar \\\n /srv/susemanager \\\n /srv/spacewalk \\\n /etc/apache2 \\\n /etc/rhn \\\n \
\ /etc/systemd/system/multi-user.target.wants \\\n /etc/systemd/system/sockets.target.wants \\\n /etc/salt \\\n /etc/tomcat \\\n /etc/cobbler \\\n /etc/sysconfig\
\ \\\n /etc/postfix \\\n /etc/sssd\ndo\n chown --reference=$vol /mnt$vol;\n chmod --reference=$vol /mnt$vol;\n if [ -z \"$(ls -A /mnt$vol)\" ]; then\n cp -a $vol/. /mnt$vol;\n\
\ fi\ndone\n"
image: registry.opensuse.org/uyuni/server:latest
imagePullPolicy: IfNotPresent
name: init-volumes
securityContext:
seLinuxOptions:
level: s0
volumeMounts:
- mountPath: /mnt/var/lib/cobbler
name: var-cobbler
- mountPath: /mnt/var/lib/rhn/search
name: var-search
- mountPath: /mnt/var/lib/salt
name: var-salt
- mountPath: /mnt/var/cache
name: var-cache
- mountPath: /mnt/var/spacewalk
name: var-spacewalk
- mountPath: /mnt/var/log
name: var-log
- mountPath: /mnt/srv/salt
name: srv-salt
- mountPath: /mnt/srv/www/
name: srv-www
- mountPath: /mnt/srv/tftpboot
name: srv-tftpboot
- mountPath: /mnt/srv/formula_metadata
name: srv-formulametadata
- mountPath: /mnt/srv/pillar
name: srv-pillar
- mountPath: /mnt/srv/susemanager
name: srv-susemanager
- mountPath: /mnt/srv/spacewalk
name: srv-spacewalk
- mountPath: /mnt/etc/pki/trust/anchors/
name: ca-certs
- mountPath: /mnt/run/salt/master
name: run-salt-master
- mountPath: /mnt/etc/apache2
name: etc-apache2
- mountPath: /mnt/etc/systemd/system/multi-user.target.wants
name: etc-systemd-multi
- mountPath: /mnt/etc/systemd/system/sockets.target.wants
name: etc-systemd-sockets
- mountPath: /mnt/etc/salt
name: etc-salt
- mountPath: /mnt/etc/tomcat
name: etc-tomcat
- mountPath: /mnt/etc/cobbler
name: etc-cobbler
- mountPath: /mnt/etc/sysconfig
name: etc-sysconfig
- mountPath: /mnt/etc/postfix
name: etc-postfix
- mountPath: /mnt/etc/sssd
name: etc-sssd
- mountPath: /mnt/etc/rhn
name: etc-rhn
- command:
- sh
- -c
- "until pg_isready -U $MANAGER_USER -h $MANAGER_DB_HOST -p $MANAGER_DB_PORT -d $MANAGER_DB_NAME; do\n sleep 60\ndone\n\nuntil pg_isready -U $REPORT_DB_USER -h $REPORT_DB_HOST -p $REPORT_DB_PORT\
\ -d $REPORT_DB_NAME; do\n sleep 60\ndone\n"
env:
- name: MANAGER_DB_HOST
valueFrom:
configMapKeyRef:
key: db_host
name: uyuni-config
optional: false
- name: MANAGER_DB_PORT
valueFrom:
configMapKeyRef:
key: db_port
name: uyuni-config
optional: false
- name: MANAGER_DB_NAME
valueFrom:
configMapKeyRef:
key: db_name
name: uyuni-config
optional: false
- name: MANAGER_USER
valueFrom:
secretKeyRef:
key: username
name: db-credentials
optional: false
- name: REPORT_DB_HOST
valueFrom:
configMapKeyRef:
key: reportdb_host
name: uyuni-config
optional: false
- name: REPORT_DB_PORT
valueFrom:
configMapKeyRef:
key: reportdb_port
name: uyuni-config
optional: false
- name: REPORT_DB_NAME
valueFrom:
configMapKeyRef:
key: reportdb_name
name: uyuni-config
optional: false
- name: REPORT_DB_USER
valueFrom:
secretKeyRef:
key: username
name: reportdb-credentials
optional: false
image: registry.opensuse.org/uyuni/server:latest
imagePullPolicy: IfNotPresent
name: db-waiter
volumes:
- name: var-cobbler
persistentVolumeClaim:
claimName: var-cobbler
- name: var-search
persistentVolumeClaim:
claimName: var-search
- name: var-salt
persistentVolumeClaim:
claimName: var-salt
- name: var-cache
persistentVolumeClaim:
claimName: var-cache
- name: var-spacewalk
persistentVolumeClaim:
claimName: var-spacewalk
- name: var-log
persistentVolumeClaim:
claimName: var-log
- name: srv-salt
persistentVolumeClaim:
claimName: srv-salt
- name: srv-www
persistentVolumeClaim:
claimName: srv-www
- name: srv-tftpboot
persistentVolumeClaim:
claimName: srv-tftpboot
- name: srv-formulametadata
persistentVolumeClaim:
claimName: srv-formulametadata
- name: srv-pillar
persistentVolumeClaim:
claimName: srv-pillar
- name: srv-susemanager
persistentVolumeClaim:
claimName: srv-susemanager
- name: srv-spacewalk
persistentVolumeClaim:
claimName: srv-spacewalk
- name: ca-certs
persistentVolumeClaim:
claimName: ca-certs
- name: run-salt-master
persistentVolumeClaim:
claimName: run-salt-master
- name: etc-apache2
persistentVolumeClaim:
claimName: etc-apache2
- name: etc-systemd-multi
persistentVolumeClaim:
claimName: etc-systemd-multi
- name: etc-systemd-sockets
persistentVolumeClaim:
claimName: etc-systemd-sockets
- name: etc-salt
persistentVolumeClaim:
claimName: etc-salt
- name: etc-tomcat
persistentVolumeClaim:
claimName: etc-tomcat
- name: etc-cobbler
persistentVolumeClaim:
claimName: etc-cobbler
- name: etc-sysconfig
persistentVolumeClaim:
claimName: etc-sysconfig
- name: etc-postfix
persistentVolumeClaim:
claimName: etc-postfix
- name: etc-sssd
persistentVolumeClaim:
claimName: etc-sssd
- name: etc-rhn
persistentVolumeClaim:
claimName: etc-rhn
- configMap:
defaultMode: 420
name: uyuni-ca
name: ca-cert
- configMap:
defaultMode: 420
name: db-ca
name: db-ca-cert
- name: tls
secret:
defaultMode: 420
items:
- key: tls.crt
path: tls/certs/spacewalk.crt
- key: tls.key
mode: 256
path: tls/private/spacewalk.key
secretName: uyuni-cert
- emptyDir:
medium: Memory
sizeLimit: 256Mi
name: run
- name: sys-fs-cgroup
emptyDir: null
state: present
# Ingresses
- name: Ingress | uyuni-ingress-ssl
kubernetes.core.k8s:
api_version: networking.k8s.io/v1
kind: Ingress
name: uyuni-ingress-ssl
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: networking.k8s.io/v1
metadata:
creationTimestamp: null
name: uyuni-ingress-ssl
namespace: '{{ uyuni_namespace }}'
annotations:
traefik.ingress.kubernetes.io/router.tls: 'true'
traefik.ingress.kubernetes.io/router.tls.domains.n.main: "{{ uyuni_helm_values['global.fqdn'] }}"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.priority: '100'
traefik.ingress.kubernetes.io/router.middlewares: uyuni-server-uyuni-strip-prefixes@kubernetescrd
labels:
app.kubernetes.io/part-of: uyuni
app.kubernetes.io/component: server
spec:
ingressClassName: traefik
tls:
- hosts:
- "{{ uyuni_helm_values['global.fqdn'] }}"
secretName: uyuni-cert
rules:
- host: "{{ uyuni_helm_values['global.fqdn'] }}"
http:
paths:
- path: /postgresql-exporter
backend:
service:
name: tomcat-internal
port:
number: 9187
pathType: Prefix
- path: /node-exporter
backend:
service:
name: tomcat-internal
port:
number: 9100
pathType: Prefix
- path: /tasko-exporter
backend:
service:
name: taskomatic-internal
port:
number: 9800
pathType: Prefix
- path: /tasko-jmx
backend:
service:
name: taskomatic-internal
port:
number: 5557
pathType: Prefix
- path: /tomcat-jmx
backend:
service:
name: tomcat-internal
port:
number: 5556
pathType: Prefix
state: present
- name: Ingress | uyuni-ingress-ssl-redirect
kubernetes.core.k8s:
api_version: networking.k8s.io/v1
kind: Ingress
name: uyuni-ingress-ssl-redirect
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: networking.k8s.io/v1
metadata:
creationTimestamp: null
name: uyuni-ingress-ssl-redirect
namespace: '{{ uyuni_namespace }}'
annotations:
traefik.ingress.kubernetes.io/router.middlewares: uyuni-server-uyuni-https-redirect@kubernetescrd
traefik.ingress.kubernetes.io/router.entrypoints: web
traefik.ingress.kubernetes.io/router.priority: '1'
labels:
app.kubernetes.io/part-of: uyuni
app.kubernetes.io/component: server
spec:
ingressClassName: traefik
rules:
- host: "{{ uyuni_helm_values['global.fqdn'] }}"
http:
paths:
- backend:
service:
name: web
port:
number: 80
path: /
pathType: Prefix
state: present
- name: Ingress | uyuni-ingress-nossl
kubernetes.core.k8s:
api_version: networking.k8s.io/v1
kind: Ingress
name: uyuni-ingress-nossl
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: networking.k8s.io/v1
metadata:
creationTimestamp: null
name: uyuni-ingress-nossl
namespace: '{{ uyuni_namespace }}'
annotations:
traefik.ingress.kubernetes.io/router.tls: 'false'
traefik.ingress.kubernetes.io/router.entrypoints: web
traefik.ingress.kubernetes.io/router.priority: '100'
traefik.ingress.kubernetes.io/router.middlewares: uyuni-server-uyuni-strip-prefixes@kubernetescrd
labels:
app.kubernetes.io/part-of: uyuni
app.kubernetes.io/component: server
spec:
ingressClassName: traefik
rules:
- host: "{{ uyuni_helm_values['global.fqdn'] }}"
http:
paths:
- backend:
service:
name: web
port:
number: 80
path: /pub
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rhn/kickstart/DownloadFile
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rhn/common/DownloadFile
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rhn/rpc/api
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rpc/api
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rhn/errors
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rhn/ty/TinyUrl
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rhn/websocket
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rhn/metrics
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /cobbler_api
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /cblr
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /httpboot
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /images
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /cobbler
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /os-images
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /tftp
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /docs
pathType: Prefix
- path: /postgresql-exporter
backend:
service:
name: tomcat-internal
port:
number: 9187
pathType: Prefix
- path: /node-exporter
backend:
service:
name: tomcat-internal
port:
number: 9100
pathType: Prefix
- path: /tasko-exporter
backend:
service:
name: taskomatic-internal
port:
number: 9800
pathType: Prefix
- path: /tasko-jmx
backend:
service:
name: taskomatic-internal
port:
number: 5557
pathType: Prefix
- path: /tomcat-jmx
backend:
service:
name: tomcat-internal
port:
number: 5556
pathType: Prefix
state: present
# Traefik IngressRouteTCP
- name: IngressRouteTCP | reportdb-pgsql-route
kubernetes.core.k8s:
api_version: traefik.io/v1alpha1
kind: IngressRouteTCP
name: reportdb-pgsql-route
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: traefik.io/v1alpha1
metadata:
name: reportdb-pgsql-route
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
annotations:
kubernetes.io/ingress.class: traefik
spec:
entryPoints:
- reportdb-pgsql
routes:
- match: HostSNI(`*`)
services:
- name: reportdb
port: 5432
state: present
- name: IngressRouteTCP | salt-publish-route
kubernetes.core.k8s:
api_version: traefik.io/v1alpha1
kind: IngressRouteTCP
name: salt-publish-route
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: traefik.io/v1alpha1
metadata:
name: salt-publish-route
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
annotations:
kubernetes.io/ingress.class: traefik
spec:
entryPoints:
- salt-publish
routes:
- match: HostSNI(`*`)
services:
- name: salt
port: 4505
state: present
- name: IngressRouteTCP | salt-request-route
kubernetes.core.k8s:
api_version: traefik.io/v1alpha1
kind: IngressRouteTCP
name: salt-request-route
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: traefik.io/v1alpha1
metadata:
name: salt-request-route
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
annotations:
kubernetes.io/ingress.class: traefik
spec:
entryPoints:
- salt-request
routes:
- match: HostSNI(`*`)
services:
- name: salt
port: 4506
state: present
# Traefik Middleware
- name: Middleware | uyuni-https-redirect
kubernetes.core.k8s:
api_version: traefik.io/v1alpha1
kind: Middleware
name: uyuni-https-redirect
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: traefik.io/v1alpha1
metadata:
name: uyuni-https-redirect
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
redirectScheme:
scheme: https
permanent: true
state: present
- name: Middleware | uyuni-strip-prefixes
kubernetes.core.k8s:
api_version: traefik.io/v1alpha1
kind: Middleware
name: uyuni-strip-prefixes
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: traefik.io/v1alpha1
metadata:
name: uyuni-strip-prefixes
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
stripPrefix:
prefixes:
- /postgresql-exporter
- /node-exporter
- /tasko-exporter
- /tasko-jmx
- /tomcat-jmx
- /saline
state: present