- name: Build and Push Payphone hosts: localhost gather_facts: false tasks: - name: Get Cargo Project Metadata ansible.builtin.command: cargo metadata --no-deps --format-version 1 register: cargo_metadata changed_when: false - name: Parse version ansible.builtin.set_fact: app_version: "v{{ (cargo_metadata.stdout | from_json).packages[0].version }}" - name: Build and Push the Docker image community.docker.docker_image: source: build build: path: "{{ playbook_dir }}/../" name: registry.nyeki.dev/payphone/payphone tag: "{{ app_version }}" push: true - name: Deploy Payphone hosts: init become: true gather_facts: false vars_files: - 00-vault.yml tasks: - name: Create Payphone Namespace kubernetes.core.k8s: state: present definition: apiVersion: v1 kind: Namespace metadata: name: payphone kubeconfig: /etc/rancher/k3s/k3s.yaml - name: Create Bot Token Secret kubernetes.core.k8s: state: present namespace: payphone definition: apiVersion: v1 kind: Secret metadata: name: payphone-secrets type: Opaque stringData: PAYPHONE_TOKEN: "{{ bot_token }}" kubeconfig: /etc/rancher/k3s/k3s.yaml - name: Set Git credentials ansible.builtin.command: | kubectl create secret docker-registry payphone-git-credentials \ --docker-server=registry.nyeki.dev \ --docker-username={{ gitlab_username }} \ --docker-password={{ gitlab_pat }} \ --docker-email={{ gitlab_email }} \ -n payphone - name: Apply Payphone Deployment kubernetes.core.k8s: state: present namespace: payphone definition: apiVersion: apps/v1 kind: StatefulSet metadata: name: payphone labels: app: payphone spec: serviceName: payphone replicas: "{{ bot_shards }}" selector: matchLabels: app: payphone template: metadata: labels: app: payphone spec: containers: - name: payphone image: registry.nyeki.dev/payphone/payphone:latest imagePullPolicy: "Always" args: ["start", "--shard", "$(SHARD_ID):$(SHARD_COUNT)", "--database-addr", "scylla-client"] envFrom: - secretRef: name: payphone-secrets env: - name: SHARD_ID valueFrom: fieldRef: fieldPath: metadata.labels['apps.kubernetes.io/pod-index'] - name: SHARD_COUNT value: "{{ bot_shards | string }}" resources: limits: cpu: "1000m" memory: "1Gi" requests: cpu: "250m" memory: "100Mi" imagePullSecrets: - name: payphone-git-credentials