diff --git a/.gitmodules b/.gitmodules index 22d62f7..6a578b6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -46,3 +46,12 @@ [submodule "roles/ericomeehan.minio"] path = roles/ericomeehan.minio url = git@gitea.eom.dev:DevOps/ansible-role-minio.git +[submodule "roles/ericomeehan.jamulus"] + path = roles/ericomeehan.jamulus + url = git@gitea.eom.dev:DevOps/ansible-role-jamulus.git +[submodule "roles/cleary.tidalcycles"] + path = roles/cleary.tidalcycles + url = https://github.com/cleary/ansible-tidalcycles.git +[submodule "roles/ericomeehan.tes3mp"] + path = roles/ericomeehan.tes3mp + url = git@gitea.eom.dev:Gaming/ansible-role-tes3mp.git diff --git a/.localai.yaml.swp b/.localai.yaml.swp new file mode 100644 index 0000000..87040d8 Binary files /dev/null and b/.localai.yaml.swp differ diff --git a/discourse_deploy.yaml b/discourse_deploy.yaml new file mode 100644 index 0000000..21ef236 --- /dev/null +++ b/discourse_deploy.yaml @@ -0,0 +1,341 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + deployment.kubernetes.io/revision: "1" + meta.helm.sh/release-name: discourse + meta.helm.sh/release-namespace: discourse + creationTimestamp: "2025-11-11T21:42:30Z" + generation: 1 + labels: + app.kubernetes.io/instance: discourse + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: discourse + app.kubernetes.io/version: 3.5.0 + helm.sh/chart: discourse-17.0.1 + name: discourse + namespace: discourse + resourceVersion: "126024847" + uid: 3ab876dd-fba3-4b05-b5b7-4d98e455fc77 +spec: + progressDeadlineSeconds: 600 + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app.kubernetes.io/instance: discourse + app.kubernetes.io/name: discourse + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + annotations: + checksum/config: e5461cf0a1e43f8902c5301b3406945d6a42bf2817fd69f91864bd1690a64b6b + checksum/secrets-database: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b + checksum/secrets-discourse: 400095440da345a753f05bd9af8e09a98b4aba5b2c80294e9d2b4956a080ef86 + checksum/secrets-redis: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b + creationTimestamp: null + labels: + app.kubernetes.io/instance: discourse + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: discourse + app.kubernetes.io/version: 3.5.0 + helm.sh/chart: discourse-17.0.1 + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/instance: discourse + app.kubernetes.io/name: discourse + topologyKey: kubernetes.io/hostname + weight: 1 + automountServiceAccountToken: false + containers: + - args: + - -c + - | + rm -r /opt/bitnami/discourse/plugins/chat + chown -R discourse:root /opt/bitnami/discourse/plugins + /opt/bitnami/scripts/discourse/entrypoint.sh /opt/bitnami/scripts/discourse/run.sh + command: + - /bin/bash + env: + - name: BITNAMI_DEBUG + value: "false" + - name: DISCOURSE_PASSWORD + valueFrom: + secretKeyRef: + key: discourse-password + name: discourse-discourse + - name: DISCOURSE_PORT_NUMBER + value: "8080" + - name: DISCOURSE_EXTERNAL_HTTP_PORT_NUMBER + value: "80" + - name: DISCOURSE_DATABASE_PASSWORD + valueFrom: + secretKeyRef: + key: password + name: discourse-postgresql + - name: POSTGRESQL_CLIENT_CREATE_DATABASE_PASSWORD + valueFrom: + secretKeyRef: + key: password + name: discourse-postgresql + - name: POSTGRESQL_CLIENT_POSTGRES_PASSWORD + valueFrom: + secretKeyRef: + key: postgres-password + name: discourse-postgresql + - name: DISCOURSE_REDIS_PASSWORD + valueFrom: + secretKeyRef: + key: redis-password + name: discourse-redis + - name: DISCOURSE_SMTP_PASSWORD + valueFrom: + secretKeyRef: + key: smtp-password + name: discourse-discourse + - name: DISCOURSE_DATA_TO_PERSIST + value: public/backups public/uploads + envFrom: + - configMapRef: + name: discourse + image: docker.io/bitnamilegacy/discourse:3.4.7-debian-12-r0 + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 6 + initialDelaySeconds: 500 + periodSeconds: 10 + successThreshold: 1 + tcpSocket: + port: http + timeoutSeconds: 5 + name: discourse + ports: + - containerPort: 8080 + name: http + protocol: TCP + readinessProbe: + failureThreshold: 6 + httpGet: + path: /srv/status + port: http + scheme: HTTP + initialDelaySeconds: 180 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + resources: {} + securityContext: + allowPrivilegeEscalation: false + capabilities: + add: + - CHOWN + - SYS_CHROOT + - FOWNER + - SETGID + - SETUID + - DAC_OVERRIDE + drop: + - ALL + privileged: false + readOnlyRootFilesystem: false + runAsGroup: 0 + runAsNonRoot: false + runAsUser: 0 + seLinuxOptions: {} + seccompProfile: + type: RuntimeDefault + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /bitnami/discourse + name: discourse-data + subPath: discourse + - mountPath: /opt/bitnami/discourse/plugins + name: empty-dir + subPath: app-plugins-dir + - args: + - /opt/bitnami/scripts/discourse-sidekiq/run.sh + command: + - /opt/bitnami/scripts/discourse/entrypoint.sh + env: + - name: BITNAMI_DEBUG + value: "false" + - name: DISCOURSE_PASSWORD + valueFrom: + secretKeyRef: + key: discourse-password + name: discourse-discourse + - name: DISCOURSE_POSTGRESQL_PASSWORD + valueFrom: + secretKeyRef: + key: password + name: discourse-postgresql + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + key: redis-password + name: discourse-redis + - name: DISCOURSE_SMTP_PASSWORD + valueFrom: + secretKeyRef: + key: smtp-password + name: discourse-discourse + - name: DISCOURSE_DATA_TO_PERSIST + value: public/backups public/uploads + envFrom: + - configMapRef: + name: discourse + image: docker.io/bitnamilegacy/discourse:3.4.7-debian-12-r0 + imagePullPolicy: IfNotPresent + livenessProbe: + exec: + command: + - /bin/sh + - -c + - pgrep -f ^sidekiq + failureThreshold: 6 + initialDelaySeconds: 500 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + name: sidekiq + readinessProbe: + exec: + command: + - /bin/sh + - -c + - pgrep -f ^sidekiq + failureThreshold: 6 + initialDelaySeconds: 30 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + resources: + limits: + cpu: 750m + ephemeral-storage: 2Gi + memory: 768Mi + requests: + cpu: 500m + ephemeral-storage: 50Mi + memory: 512Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + add: + - CHOWN + - SYS_CHROOT + - FOWNER + - SETGID + - SETUID + - DAC_OVERRIDE + drop: + - ALL + privileged: false + readOnlyRootFilesystem: false + runAsGroup: 0 + runAsNonRoot: false + runAsUser: 0 + seLinuxOptions: {} + seccompProfile: + type: RuntimeDefault + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /bitnami/discourse + name: discourse-data + subPath: discourse + - mountPath: /opt/bitnami/discourse/plugins + name: empty-dir + subPath: app-plugins-dir + dnsPolicy: ClusterFirst + initContainers: + - args: + - -c + - | + pushd "/opt/bitnami/discourse" >/dev/null || exit 1 + RAILS_ENV=production bundle exec rake plugin:install repo=https://github.com/discourse/discourse-adplugin + RAILS_ENV=production bundle exec rake plugin:install repo=https://github.com/discourse/discourse-subscriptions + RAILS_ENV=production bundle exec rake plugin:install repo=https://github.com/discourse/discourse-activity-pub + RAILS_ENV=production bundle exec rake plugin:install repo=https://github.com/discourse/discourse-openid-connect + RAILS_ENV=production bundle exec rake plugin:install repo=https://github.com/jonmbake/discourse-ldap-auth + RAILS_ENV=production bundle exec rake plugin:install repo=https://github.com/discourse/discourse-math + RAILS_ENV=production bundle exec rake plugin:install repo=https://github.com/discourse/discourse-post-voting + RAILS_ENV=production bundle exec rake plugin:install repo=https://github.com/discourse/discourse-prometheus + RAILS_ENV=production bundle exec rake plugin:install repo=https://github.com/discourse/discourse-reactions + RAILS_ENV=production LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all + popd >/dev/null || exit 1 + cp -nr --preserve=mode /opt/bitnami/discourse/plugins/* /plugins + command: + - /bin/bash + image: docker.io/bitnamilegacy/discourse:3.4.7-debian-12-r0 + imagePullPolicy: IfNotPresent + name: install-plugins + resources: {} + securityContext: + allowPrivilegeEscalation: false + capabilities: + add: + - CHOWN + - SYS_CHROOT + - FOWNER + - SETGID + - SETUID + - DAC_OVERRIDE + drop: + - ALL + privileged: false + readOnlyRootFilesystem: false + runAsGroup: 0 + runAsNonRoot: false + runAsUser: 0 + seLinuxOptions: {} + seccompProfile: + type: RuntimeDefault + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /plugins + name: empty-dir + subPath: app-plugins-dir + restartPolicy: Always + schedulerName: default-scheduler + securityContext: + fsGroup: 0 + fsGroupChangePolicy: Always + serviceAccount: discourse + serviceAccountName: discourse + terminationGracePeriodSeconds: 30 + volumes: + - emptyDir: {} + name: empty-dir + - name: discourse-data + persistentVolumeClaim: + claimName: discourse +status: + conditions: + - lastTransitionTime: "2025-11-11T21:42:30Z" + lastUpdateTime: "2025-11-11T21:42:30Z" + message: Deployment does not have minimum availability. + reason: MinimumReplicasUnavailable + status: "False" + type: Available + - lastTransitionTime: "2025-11-11T21:42:30Z" + lastUpdateTime: "2025-11-11T21:42:30Z" + message: ReplicaSet "discourse-75db4ff77d" is progressing. + reason: ReplicaSetUpdated + status: "True" + type: Progressing + observedGeneration: 1 + replicas: 1 + unavailableReplicas: 1 + updatedReplicas: 1 diff --git a/jamulus.yaml b/jamulus.yaml new file mode 100644 index 0000000..ee92d08 --- /dev/null +++ b/jamulus.yaml @@ -0,0 +1,10 @@ +- name: Execute test + hosts: alpha-control-plane + become: true + vars_files: + - ../secrets.yaml + roles: + - role: ericomeehan.jamulus + vars: + directoryAddress: "anygenre2.jamulus.io:22124" + serverInfo: "jamulus.eom.dev;Raleigh;US" diff --git a/k8s_cp.yaml b/k8s_cp.yaml new file mode 100644 index 0000000..28ae7a2 --- /dev/null +++ b/k8s_cp.yaml @@ -0,0 +1,7 @@ +--- +# Playbook for eom.dev +- name: Alpha Cluster + hosts: alpha-control-plane + become: true + roles: + - role: geerlingguy.kubernetes diff --git a/localagi.yaml b/localagi.yaml new file mode 100644 index 0000000..46da33c --- /dev/null +++ b/localagi.yaml @@ -0,0 +1,16 @@ +- name: Execute test + hosts: alpha-control-plane + become: true + vars_files: + - ../secrets.yaml + roles: + - role: ericomeehan.localagi + vars: + localagi_pvc_storage: 2Ti + localagi_model: llama3-8b-instruct + localagi_multimodal_model: minicpm-v-2_6 + localagi_image_model: sd-1.5-ggml + localagi_localrag_url: https://localrecall.eom.dev/ + localagi_llm_api_url: https://localai.eom.dev/ + localagi_llm_api_key: "{{ localai_api_keys[0] }}" + localagi_timeout: "300s" diff --git a/localai.yaml b/localai.yaml index 747589f..8fdcdea 100644 --- a/localai.yaml +++ b/localai.yaml @@ -5,3 +5,8 @@ - ../secrets.yaml roles: - role: ericomeehan.localai + vars: + localai_disable_webui: "true" + localai_watchdog_idle: "true" + localai_watchdog_idle_timeout: "1m" + localai_watchdog_busy: "true" diff --git a/localrecall.yaml b/localrecall.yaml new file mode 100644 index 0000000..d9fc7f9 --- /dev/null +++ b/localrecall.yaml @@ -0,0 +1,13 @@ +- name: Execute test + hosts: alpha-control-plane + become: true + vars_files: + - ../secrets.yaml + roles: + - role: ericomeehan.localrecall + vars: + localrecall_collection_db_pvc_size: 2Ti + localrecall_file_assets_pvc_size: 2Ti + localrecall_openai_api_key: "{{ localai_api_keys[1] }}" + localrecall_openai_base_url: https://localai.eom.dev/v1 + localrecall_embedding_model: bert-embeddings diff --git a/roles/cleary.tidalcycles b/roles/cleary.tidalcycles new file mode 160000 index 0000000..59d79f2 --- /dev/null +++ b/roles/cleary.tidalcycles @@ -0,0 +1 @@ +Subproject commit 59d79f2d5ffb112eff40d4972dc0929bd1b21764 diff --git a/roles/ericomeehan.jamulus b/roles/ericomeehan.jamulus new file mode 160000 index 0000000..bec6319 --- /dev/null +++ b/roles/ericomeehan.jamulus @@ -0,0 +1 @@ +Subproject commit bec6319b668fde790e7d41cff427608af94b6560 diff --git a/roles/ericomeehan.localagi b/roles/ericomeehan.localagi index 33875aa..c7a794f 160000 --- a/roles/ericomeehan.localagi +++ b/roles/ericomeehan.localagi @@ -1 +1 @@ -Subproject commit 33875aa8996665cd8b75204e76ec7c0f1e20b7bc +Subproject commit c7a794f85ac5c5aa4315df67cb1abd68c2522074 diff --git a/roles/ericomeehan.localai b/roles/ericomeehan.localai index b533423..a5a6e20 160000 --- a/roles/ericomeehan.localai +++ b/roles/ericomeehan.localai @@ -1 +1 @@ -Subproject commit b533423c05535d41e25214b191a0389c8c7a78d4 +Subproject commit a5a6e208445375bc19041926429c93f5c5507e24 diff --git a/roles/ericomeehan.minio b/roles/ericomeehan.minio index d4ca4d7..cafe3ce 160000 --- a/roles/ericomeehan.minio +++ b/roles/ericomeehan.minio @@ -1 +1 @@ -Subproject commit d4ca4d79a80a46cff04ace7dbf190edf711fe230 +Subproject commit cafe3ce60d48c5faa12c70d22bacc7600c377e5d diff --git a/roles/ericomeehan.tes3mp b/roles/ericomeehan.tes3mp new file mode 160000 index 0000000..4f664e4 --- /dev/null +++ b/roles/ericomeehan.tes3mp @@ -0,0 +1 @@ +Subproject commit 4f664e4987e6ba37b2960f2ef267b44770c58525 diff --git a/tes3mp.yaml b/tes3mp.yaml new file mode 100644 index 0000000..b83002e --- /dev/null +++ b/tes3mp.yaml @@ -0,0 +1,10 @@ +- name: Execute test + hosts: alpha-control-plane + become: true + vars_files: + - ../secrets.yaml + roles: + - role: ericomeehan.tes3mp + vars: + TES3MP_SERVER_GENERAL_HOSTNAME: "TES3MP on eom.dev" + TES3MP_SERVER_GENERAL_PASSWORD: "{{ tes3mp_server_general_password }}" diff --git a/tower-plus.yaml b/tower-plus.yaml new file mode 100644 index 0000000..9bf6f30 --- /dev/null +++ b/tower-plus.yaml @@ -0,0 +1,8 @@ +--- +# Playbook for workstations +- name: Initialize workstations + hosts: localhost + connection: local + become: true + roles: + - role: ericomeehan.nvidia_driver