diff --git a/ansible/playbooks/paas/main.yml b/ansible/playbooks/paas/main.yml index b1c0b2e4..37711b31 100644 --- a/ansible/playbooks/paas/main.yml +++ b/ansible/playbooks/paas/main.yml @@ -27,6 +27,7 @@ - unzip - make - jq + - dnsutils state: present install_recommends: false diff --git a/ansible/playbooks/paas/roles/nomad/defaults/main.yml b/ansible/playbooks/paas/roles/nomad/defaults/main.yml index 86c61ac5..2c06958d 100644 --- a/ansible/playbooks/paas/roles/nomad/defaults/main.yml +++ b/ansible/playbooks/paas/roles/nomad/defaults/main.yml @@ -146,10 +146,10 @@ nomad_client_host_network_cluster: name: cluster interface: "{{ nomad_cluster_bridge }}" -nomad_client_meta_list: >- - {"arch": "{{ architecture_map[ansible_facts.architecture] }}", - "location": "{{ fact_instance.location }}", - "instance": "{{ inventory_hostname }}"} +nomad_client_meta_list: + arch: "{{ architecture_map[ansible_facts.architecture] }}" + location: "{{ fact_instance.location }}" + instance: "{{ inventory_hostname }}" nomad_server_join: >- "{% if nomad_mode == 'single' %}127.0.0.1{% else %}{{ (groups[nomad_deploy_cluster_name] | @@ -195,8 +195,7 @@ nomad_tls_ca_provider: ownca nomad_tls_host_certificate_dir: /etc/ssl/simplestack nomad_tls_common_name: nomad -# IP range for 192.168.0.0/24 (all 256 addresses) -nomad_tls_ip_range: "{{ range(0,256) | map('regex_replace', '^', 'IP:192.168.0.') | list | join(',') }}" +nomad_tls_ip_range: "{{ ((range(0,256) | map('regex_replace', '^', 'IP:192.168.0.')) + (range(0,256) | map('regex_replace', '^', 'IP:10.0.0.')) ) | list | join(',') }}" nomad_tls_check_delay: "+2w" # TLS Server diff --git a/ansible/playbooks/paas/roles/nomad/tasks/04_tls_certs.yml b/ansible/playbooks/paas/roles/nomad/tasks/04_tls_certs.yml index 692a20e2..d09a3da5 100644 --- a/ansible/playbooks/paas/roles/nomad/tasks/04_tls_certs.yml +++ b/ansible/playbooks/paas/roles/nomad/tasks/04_tls_certs.yml @@ -60,7 +60,7 @@ notify: Nomad_restart - name: Nomad | Copy certificate on client nodes - when: nomad_node_role in ['client'] + when: nomad_node_role in ['client', 'both'] block: - name: "Nomad | Check if TLS cert exists for Client" ansible.builtin.stat: diff --git a/ansible/playbooks/paas/roles/nomad/templates/client.hcl.j2 b/ansible/playbooks/paas/roles/nomad/templates/client.hcl.j2 index a7db1122..7732ea2d 100644 --- a/ansible/playbooks/paas/roles/nomad/templates/client.hcl.j2 +++ b/ansible/playbooks/paas/roles/nomad/templates/client.hcl.j2 @@ -40,7 +40,7 @@ client { } {% endif %} -{% if nomad_client_meta_list%} +{% if nomad_client_meta_list %} meta = { {% for key, value in nomad_client_meta_list.items() %} "{{ key }}" = "{{ value }}" diff --git a/ansible/playbooks/paas/roles/nomad/templates/nomad.hcl.j2 b/ansible/playbooks/paas/roles/nomad/templates/nomad.hcl.j2 index c67aa932..a222679b 100644 --- a/ansible/playbooks/paas/roles/nomad/templates/nomad.hcl.j2 +++ b/ansible/playbooks/paas/roles/nomad/templates/nomad.hcl.j2 @@ -30,6 +30,8 @@ log_rotate_max_files = {{ nomad_log_rotate_max_files }} leave_on_terminate = {{ nomad_leave_on_terminate | lower }} leave_on_interrupt = {{ nomad_leave_on_interrupt | lower }} +consul {} + tls { http = true rpc = true diff --git a/ansible/playbooks/paas/roles/prometheus/templates/config.j2 b/ansible/playbooks/paas/roles/prometheus/templates/config.j2 index a4530264..1800f2ab 100644 --- a/ansible/playbooks/paas/roles/prometheus/templates/config.j2 +++ b/ansible/playbooks/paas/roles/prometheus/templates/config.j2 @@ -223,7 +223,7 @@ scrape_configs: - job_name: 'mimir_exporter' nomad_sd_configs: - - server: "https://{{ nomad_primary_master_address | default(inventory_hostname) }}:4646" + - server: "https://{{ nomad_primary_master_address | default(hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname].nomad_iface]['ipv4']['address']) }}:4646" region: "{{ fact_instance.region }}" tls_config: insecure_skip_verify: true @@ -262,7 +262,7 @@ scrape_configs: - job_name: 'traefik' nomad_sd_configs: - - server: "https://{{ nomad_primary_master_address | default(inventory_hostname) }}:4646" + - server: "https://{{ nomad_primary_master_address | default(hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname].nomad_iface]['ipv4']['address']) }}:4646" region: "{{ fact_instance.region }}" tls_config: insecure_skip_verify: true @@ -297,7 +297,7 @@ scrape_configs: metrics_path: /minio/v2/metrics/cluster scheme: http nomad_sd_configs: - - server: "https://{{ nomad_primary_master_address | default(inventory_hostname) }}:4646" + - server: "https://{{ nomad_primary_master_address | default(hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname].nomad_iface]['ipv4']['address']) }}:4646" region: "{{ fact_instance.region }}" tls_config: insecure_skip_verify: true @@ -324,7 +324,7 @@ scrape_configs: - job_name: 'caddy' nomad_sd_configs: - - server: "https://{{ nomad_primary_master_address | default(inventory_hostname) }}:4646" + - server: "https://{{ nomad_primary_master_address | default(hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname].nomad_iface]['ipv4']['address']) }}:4646" region: "{{ fact_instance.region }}" tls_config: insecure_skip_verify: true @@ -356,7 +356,7 @@ scrape_configs: - job_name: 'vllm' nomad_sd_configs: - - server: "https://{{ nomad_primary_master_address | default(inventory_hostname) }}:4646" + - server: "https://{{ nomad_primary_master_address | default(hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname].nomad_iface]['ipv4']['address']) }}:4646" region: "{{ fact_instance.region }}" tls_config: insecure_skip_verify: true @@ -388,7 +388,7 @@ scrape_configs: - job_name: 'mysql_exporter' nomad_sd_configs: - - server: "https://{{ nomad_primary_master_address | default(inventory_hostname) }}:4646" + - server: "https://{{ nomad_primary_master_address | default(hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname].nomad_iface]['ipv4']['address']) }}:4646" region: "{{ fact_instance.region }}" tls_config: insecure_skip_verify: true @@ -419,7 +419,7 @@ scrape_configs: - job_name: 'nginx_exporter' nomad_sd_configs: - - server: "https://{{ nomad_primary_master_address | default(inventory_hostname) }}:4646" + - server: "https://{{ nomad_primary_master_address | default(hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname].nomad_iface]['ipv4']['address']) }}:4646" region: "{{ fact_instance.region }}" tls_config: insecure_skip_verify: true @@ -450,7 +450,7 @@ scrape_configs: - job_name: 'phpfpm_exporter' nomad_sd_configs: - - server: "https://{{ nomad_primary_master_address | default(inventory_hostname) }}:4646" + - server: "https://{{ nomad_primary_master_address | default(hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname].nomad_iface]['ipv4']['address']) }}:4646" region: "{{ fact_instance.region }}" tls_config: insecure_skip_verify: true @@ -484,7 +484,7 @@ scrape_configs: metrics_path: /api/prometheus scheme: http nomad_sd_configs: - - server: "https://{{ nomad_primary_master_address | default(inventory_hostname) }}:4646" + - server: "https://{{ nomad_primary_master_address | default(hostvars[inventory_hostname]['ansible_' + hostvars[inventory_hostname].nomad_iface]['ipv4']['address']) }}:4646" region: "{{ fact_instance.region }}" tls_config: insecure_skip_verify: true diff --git a/ansible/playbooks/paas/roles/script_exporter/vars/main.yml b/ansible/playbooks/paas/roles/script_exporter/vars/main.yml index 37966851..bf894c1f 100644 --- a/ansible/playbooks/paas/roles/script_exporter/vars/main.yml +++ b/ansible/playbooks/paas/roles/script_exporter/vars/main.yml @@ -22,3 +22,4 @@ script_exporter_scripts: armv7: armhf amd64: amd64 x86_64: x86_64 + aarch64: aarch64 diff --git a/ansible/playbooks/saas/image-forkable.yml b/ansible/playbooks/saas/image-forkable.yml new file mode 100644 index 00000000..9cbdd56b --- /dev/null +++ b/ansible/playbooks/saas/image-forkable.yml @@ -0,0 +1,107 @@ +--- +- name: Build a Docker image from a catalog id + hosts: "{{ hosts_limit | default('infrastructure') }}" + become: true + gather_facts: true + vars_prompt: + - name: catalog_id + prompt: "Catalog item ID" + private: false + vars: + architecture_map: + amd64: amd64 + x86_64: amd64 + armv7l: arm + aarch64: arm64 + arm64: arm64 + catalog: "{{ catalog_response.json.origin | default(catalog_response.json.name) }}" + build_work_dir: "/tmp/{{ catalog }}" + download_dir: "{{ build_work_dir }}/download" + arch_dir: "{{ build_work_dir }}/{{ upstream_default_arch }}" + upstream_default_arch: "{{ architecture_map[ansible_facts.architecture] }}" + ui_url: "{{ lookup('ansible.builtin.env', 'SIMPLE_STACK_UI_URL') }}" + ui_user: "{{ lookup('ansible.builtin.env', 'SIMPLE_STACK_UI_USER') }}" + ui_password: "{{ lookup('ansible.builtin.env', 'SIMPLE_STACK_UI_PASSWORD') }}" + + pre_tasks: + - name: Retrieve catalog item from UI + ansible.builtin.uri: + url: "{{ ui_url }}/api" + user: "{{ ui_user }}" + password: "{{ ui_password }}" + method: POST + body_format: json + body: + schema: "catalogs_read/{{ catalog_id }}" + force_basic_auth: true + status_code: 200 + delegate_to: localhost + register: catalog_response + become: false + + - name: Ensure temporary build directories exist + ansible.builtin.file: + path: "{{ item }}" + state: directory + mode: "0755" + loop: + - "{{ download_dir }}" + - "{{ arch_dir }}" + + tasks: + - name: Build assets + ansible.builtin.include_role: + name: "{{ catalog }}" + tasks_from: build + vars: + catalog_image_name: "{{ catalog_response.json.name }}" + dockerfile_root: "{{ catalog_response.json.dockerfile_root | default('') }}" + dockerfile_nonroot: "{{ catalog_response.json.dockerfile_nonroot | default('') }}" + + - name: Build and push Docker image + community.docker.docker_image_build: + name: "{{ docker_private_registry.url }}/{% if docker_private_registry.project is defined %}{{ docker_private_registry.project }}/{% endif %}{{ catalog_response.json.name }}:{{ image_version }}" + tag: latest + path: "{{ build_work_dir }}" + dockerfile: Dockerfile + labels: "{{ image_definition.labels | default({}) }}" + rebuild: always + outputs: + - type: image + push: true + register: docker_build + when: image_definition.build + notify: Cleanup build directory + + - name: Update catalog item version on UI + ansible.builtin.uri: + url: "{{ ui_url }}/api" + user: "{{ ui_user }}" + password: "{{ ui_password }}" + method: POST + body_format: json + body: + schema: catalogs_create + data: + name: "{{ catalog_response.json.name }}" + version: "{{ image_version }}" + forkable: "{{ image_forkable | default(false) }}" + force_basic_auth: true + status_code: 200 + delegate_to: localhost + register: ui_update + failed_when: ui_update.status != 200 + become: false + + handlers: + - name: Cleanup build directory + ansible.builtin.file: + path: "{{ build_work_dir }}" + state: absent + listen: cleanup_build + + post_tasks: + - name: Trigger cleanup on failure + ansible.builtin.meta: clear_host_errors + when: ansible_failed_result is defined + notify: Cleanup build directory diff --git a/ansible/playbooks/saas/image.yml b/ansible/playbooks/saas/image.yml index 7b8fc85a..8cbd717a 100644 --- a/ansible/playbooks/saas/image.yml +++ b/ansible/playbooks/saas/image.yml @@ -16,7 +16,6 @@ aarch64: arm64 arm64: arm64 upstream_default_arch: "{{ architecture_map[ansible_facts.architecture] }}" - path: "/tmp/{{ catalog }}" pre_tasks: - name: Create temporary build directory @@ -34,32 +33,31 @@ ansible.builtin.include_role: name: "{{ catalog }}" tasks_from: build + vars: + catalog_image_name: "{{ catalog }}" + dockerfile_root: "" + dockerfile_nonroot: "" - name: Debug latest version ansible.builtin.debug: msg: "{{ image_version }}" - name: Build - when: image_build + when: image_definition.build block: - name: Build and publish image community.docker.docker_image_build: - name: "{{ docker_private_registry.url }}/{% if docker_private_registry.project is defined %}{{ docker_private_registry.project }}/{% endif %}{{ image_name }}:{{ image_version }}" + name: "{{ docker_private_registry.url }}/{% if docker_private_registry.project is defined %}{{ docker_private_registry.project }}/{% endif %}{{ image_definition.name }}:{{ image_version }}" tag: latest - path: "/tmp/{{ catalog }}" + path: "{{ build_work_dir }}" dockerfile: Dockerfile - labels: "{{ image_labels }}" + labels: "{{ image_definition.labels }}" rebuild: always outputs: - type: image push: true register: docker_image_build - - name: Debug - ansible.builtin.debug: - msg: "{{ docker_image_build }}" - verbosity: 1 - - name: Update catalog item version on UI ansible.builtin.uri: url: "{{ lookup('ansible.builtin.env', 'SIMPLE_STACK_UI_URL') }}/api" @@ -70,7 +68,7 @@ body: schema: catalogs_create data: - name: "{{ image_name }}" + name: "{{ image_definition.name }}" version: "{{ image_version }}" force_basic_auth: true status_code: 200 diff --git a/ansible/playbooks/saas/roles/adguard/tasks/build.yml b/ansible/playbooks/saas/roles/adguard/tasks/build.yml index 59dbe217..f48c8f22 100644 --- a/ansible/playbooks/saas/roles/adguard/tasks/build.yml +++ b/ansible/playbooks/saas/roles/adguard/tasks/build.yml @@ -5,39 +5,17 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ latest_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" - + image_definition: "{{ image }}" + image_forkable: "{{ image.forkable }}" + upstream_file_url: "{{ upstream_file_url }}" + upstream_file_name: "{{ upstream_file_name }}" + - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version - -- name: Download Github release - ansible.builtin.get_url: - url: "{{ upstream_file_url }}" - dest: "{{ build_work_dir }}/download/" - mode: '0644' - force: no - register: download_result - -- name: Unarchive GitHub release - ansible.builtin.unarchive: - src: "{{ build_work_dir }}/download/{{ upstream_file_name }}" - dest: "{{ build_work_dir }}/download" - remote_src: true - when: download_result.changed - -- name: Copy binary in build directory - ansible.builtin.copy: - src: "{{ path }}/download/AdGuardHome/{{ image.upstream.binary }}" - dest: "{{ path }}/{{ image.upstream.binary }}" - mode: '0755' - remote_src: true - when: download_result.changed + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version - name: Copy dockerfile ansible.builtin.template: src: Dockerfile.j2 - dest: "{{ path }}/Dockerfile" + dest: "{{ build_work_dir }}/Dockerfile" mode: '0644' diff --git a/ansible/playbooks/saas/roles/adguard/templates/Dockerfile.j2 b/ansible/playbooks/saas/roles/adguard/templates/Dockerfile.j2 index 0db222df..38a548f7 100644 --- a/ansible/playbooks/saas/roles/adguard/templates/Dockerfile.j2 +++ b/ansible/playbooks/saas/roles/adguard/templates/Dockerfile.j2 @@ -4,7 +4,13 @@ FROM {{ image.origin }} ARG TARGETARCH -COPY {{ image.upstream.binary }} /usr/local/bin/{{ image.upstream.binary }} +RUN apk add wget + +RUN wget -O {{ upstream_file_name }} {{ upstream_file_url }} && \ + tar xzf {{ upstream_file_name }} && \ + mv AdGuardHome/AdGuardHome /usr/local/bin/AdGuardHome + +{{ dockerfile_root | default('') }} USER root diff --git a/ansible/playbooks/saas/roles/adguard/vars/main.yml b/ansible/playbooks/saas/roles/adguard/vars/main.yml index a3e74749..d339c322 100644 --- a/ansible/playbooks/saas/roles/adguard/vars/main.yml +++ b/ansible/playbooks/saas/roles/adguard/vars/main.yml @@ -1,6 +1,7 @@ --- image: build: true + forkable: false upstream: source: github user: AdguardTeam diff --git a/ansible/playbooks/saas/roles/arangodb/tasks/build.yml b/ansible/playbooks/saas/roles/arangodb/tasks/build.yml index d87dbb34..bcf1b930 100644 --- a/ansible/playbooks/saas/roles/arangodb/tasks/build.yml +++ b/ansible/playbooks/saas/roles/arangodb/tasks/build.yml @@ -5,10 +5,8 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ latest_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" + image_definition: "{{ image }}" - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version \ No newline at end of file + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version \ No newline at end of file diff --git a/ansible/playbooks/saas/roles/caddy/tasks/build.yml b/ansible/playbooks/saas/roles/caddy/tasks/build.yml index 10ddbe37..28013d4a 100644 --- a/ansible/playbooks/saas/roles/caddy/tasks/build.yml +++ b/ansible/playbooks/saas/roles/caddy/tasks/build.yml @@ -5,34 +5,19 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ latest_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" - -- debug: - msg: - - "{{ softwares }}" - - "{{ softwares[image.name] }}" - - "{{ image_version }}" + image_definition: "{{ image }}" + image_forkable: "{{ image.forkable }}" - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version - -- name: Download Github release - ansible.builtin.get_url: - url: "{{ upstream_file_url }}" - dest: "{{ build_work_dir }}/download/" - mode: '0644' - force: no - register: download_result + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version - name: Unarchive GitHub release ansible.builtin.unarchive: - src: "{{ build_work_dir }}/download/{{ upstream_file_name }}" + src: "{{ upstream_file_url }}" dest: "{{ build_work_dir }}/download" remote_src: true - when: download_result.changed + register: download_result - name: Find binary ansible.builtin.include_role: @@ -44,5 +29,5 @@ - name: Copy dockerfile ansible.builtin.template: src: Dockerfile.j2 - dest: "{{ path }}/Dockerfile" + dest: "{{ build_work_dir }}/Dockerfile" mode: '0644' diff --git a/ansible/playbooks/saas/roles/caddy/templates/Dockerfile.j2 b/ansible/playbooks/saas/roles/caddy/templates/Dockerfile.j2 index a423587b..f21f7848 100644 --- a/ansible/playbooks/saas/roles/caddy/templates/Dockerfile.j2 +++ b/ansible/playbooks/saas/roles/caddy/templates/Dockerfile.j2 @@ -4,6 +4,8 @@ FROM {{ image.origin }} ARG TARGETARCH +{{ dockerfile_root | default('') }} + COPY ./${TARGETARCH}/caddy /usr/local/bin/caddy RUN addgroup caddy \ @@ -15,4 +17,6 @@ RUN mkdir -p /var/log/caddy /var/lib/caddy /etc/caddy \ USER caddy +{{ dockerfile_nonroot | default('') }} + CMD ["caddy", "run"] diff --git a/ansible/playbooks/saas/roles/caddy/vars/main.yml b/ansible/playbooks/saas/roles/caddy/vars/main.yml index e7f16afc..7eec9b26 100644 --- a/ansible/playbooks/saas/roles/caddy/vars/main.yml +++ b/ansible/playbooks/saas/roles/caddy/vars/main.yml @@ -1,6 +1,7 @@ --- image: build: true + forkable: false upstream: source: github user: caddyserver diff --git a/ansible/playbooks/saas/roles/code_server/tasks/build.yml b/ansible/playbooks/saas/roles/code_server/tasks/build.yml index 68406697..de163a2c 100644 --- a/ansible/playbooks/saas/roles/code_server/tasks/build.yml +++ b/ansible/playbooks/saas/roles/code_server/tasks/build.yml @@ -5,10 +5,9 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ latest_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" + image_definition: "{{ image }}" + image_forkable: "{{ image.forkable }}" - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version diff --git a/ansible/playbooks/saas/roles/code_server/tasks/main.yml b/ansible/playbooks/saas/roles/code_server/tasks/main.yml index 6759f4e1..04059eae 100644 --- a/ansible/playbooks/saas/roles/code_server/tasks/main.yml +++ b/ansible/playbooks/saas/roles/code_server/tasks/main.yml @@ -15,9 +15,6 @@ - "{{ software_path }}/home/coder/.ssh" - "{{ software_path }}/projects" -- debug: - msg: "{{ size}}" - - name: Copy nomad job ansible.builtin.template: src: nomad.hcl diff --git a/ansible/playbooks/saas/roles/code_server/vars/main.yml b/ansible/playbooks/saas/roles/code_server/vars/main.yml index d7c45e2b..0aeaed2b 100644 --- a/ansible/playbooks/saas/roles/code_server/vars/main.yml +++ b/ansible/playbooks/saas/roles/code_server/vars/main.yml @@ -1,6 +1,7 @@ --- image: build: false + forkable: true upstream: source: github user: codercom diff --git a/ansible/playbooks/saas/roles/dolibarr/tasks/build.yml b/ansible/playbooks/saas/roles/dolibarr/tasks/build.yml index 68406697..f1029407 100644 --- a/ansible/playbooks/saas/roles/dolibarr/tasks/build.yml +++ b/ansible/playbooks/saas/roles/dolibarr/tasks/build.yml @@ -5,10 +5,8 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ latest_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" + image_definition: "{{ image }}" - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version diff --git a/ansible/playbooks/saas/roles/forgejo/tasks/build.yml b/ansible/playbooks/saas/roles/forgejo/tasks/build.yml index 9ea08ee8..796ce846 100644 --- a/ansible/playbooks/saas/roles/forgejo/tasks/build.yml +++ b/ansible/playbooks/saas/roles/forgejo/tasks/build.yml @@ -5,13 +5,11 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ latest_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" + image_definition: "{{ image }}" - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version - name: Download Github release ansible.builtin.get_url: @@ -31,5 +29,5 @@ - name: Copy dockerfile ansible.builtin.template: src: Dockerfile.j2 - dest: "{{ path }}/Dockerfile" + dest: "{{ build_work_dir }}/Dockerfile" mode: '0644' diff --git a/ansible/playbooks/saas/roles/forgejo/vars/main.yml b/ansible/playbooks/saas/roles/forgejo/vars/main.yml index 7a7189ba..6dbb8af9 100644 --- a/ansible/playbooks/saas/roles/forgejo/vars/main.yml +++ b/ansible/playbooks/saas/roles/forgejo/vars/main.yml @@ -1,6 +1,7 @@ --- image: build: true + forkable: false upstream: source: codeberg user: forgejo diff --git a/ansible/playbooks/saas/roles/freshrss/tasks/build.yml b/ansible/playbooks/saas/roles/freshrss/tasks/build.yml index 68406697..f1029407 100644 --- a/ansible/playbooks/saas/roles/freshrss/tasks/build.yml +++ b/ansible/playbooks/saas/roles/freshrss/tasks/build.yml @@ -5,10 +5,8 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ latest_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" + image_definition: "{{ image }}" - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version diff --git a/ansible/playbooks/saas/roles/grafana/tasks/build.yml b/ansible/playbooks/saas/roles/grafana/tasks/build.yml index 68406697..f1029407 100644 --- a/ansible/playbooks/saas/roles/grafana/tasks/build.yml +++ b/ansible/playbooks/saas/roles/grafana/tasks/build.yml @@ -5,10 +5,8 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ latest_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" + image_definition: "{{ image }}" - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version diff --git a/ansible/playbooks/saas/roles/grafana/tasks/main.yml b/ansible/playbooks/saas/roles/grafana/tasks/main.yml index 32f26abd..68f46d70 100644 --- a/ansible/playbooks/saas/roles/grafana/tasks/main.yml +++ b/ansible/playbooks/saas/roles/grafana/tasks/main.yml @@ -10,7 +10,7 @@ - "{{ software_path }}" delegate_to: "{{ software.instance }}" -- name: Copy Grafana content files +- name: Copy files ansible.builtin.copy: src: "{{ item }}" dest: "{{ software_path }}/" @@ -22,7 +22,7 @@ - provisioning delegate_to: "{{ software.instance }}" -- name: Copy Grafana content templates +- name: Copy templates ansible.builtin.template: src: "provisioning/{{ item.path }}/{{ item.file }}.j2" dest: "{{ software_path }}/provisioning/{{ item.path }}/{{ item.file }}" diff --git a/ansible/playbooks/saas/roles/homeassistant/tasks/build.yml b/ansible/playbooks/saas/roles/homeassistant/tasks/build.yml index 68406697..f1029407 100644 --- a/ansible/playbooks/saas/roles/homeassistant/tasks/build.yml +++ b/ansible/playbooks/saas/roles/homeassistant/tasks/build.yml @@ -5,10 +5,8 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ latest_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" + image_definition: "{{ image }}" - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version diff --git a/ansible/playbooks/saas/roles/kresus/tasks/build.yml b/ansible/playbooks/saas/roles/kresus/tasks/build.yml index 8fd0f814..2208cecf 100644 --- a/ansible/playbooks/saas/roles/kresus/tasks/build.yml +++ b/ansible/playbooks/saas/roles/kresus/tasks/build.yml @@ -5,22 +5,20 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ latest_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" + image_definition: "{{ image }}" - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version - name: Copy config file ansible.builtin.copy: src: config.ini - dest: "{{ path }}/config.ini" + dest: "{{ build_work_dir }}/config.ini" mode: '0644' - name: Copy dockerfile ansible.builtin.template: src: Dockerfile.j2 - dest: "{{ path }}/Dockerfile" + dest: "{{ build_work_dir }}/Dockerfile" mode: '0644' diff --git a/ansible/playbooks/saas/roles/kresus/vars/main.yml b/ansible/playbooks/saas/roles/kresus/vars/main.yml index f4cc962b..8ae91103 100644 --- a/ansible/playbooks/saas/roles/kresus/vars/main.yml +++ b/ansible/playbooks/saas/roles/kresus/vars/main.yml @@ -1,6 +1,7 @@ --- image: build: true + forkable: false upstream: source: framagit user: kresusapp diff --git a/ansible/playbooks/saas/roles/litellm/tasks/build.yml b/ansible/playbooks/saas/roles/litellm/tasks/build.yml index 68406697..f1029407 100644 --- a/ansible/playbooks/saas/roles/litellm/tasks/build.yml +++ b/ansible/playbooks/saas/roles/litellm/tasks/build.yml @@ -5,10 +5,8 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ latest_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" + image_definition: "{{ image }}" - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version diff --git a/ansible/playbooks/saas/roles/loki/tasks/build.yml b/ansible/playbooks/saas/roles/loki/tasks/build.yml index 68406697..f1029407 100644 --- a/ansible/playbooks/saas/roles/loki/tasks/build.yml +++ b/ansible/playbooks/saas/roles/loki/tasks/build.yml @@ -5,10 +5,8 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ latest_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" + image_definition: "{{ image }}" - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version diff --git a/ansible/playbooks/saas/roles/mariadb/tasks/build.yml b/ansible/playbooks/saas/roles/mariadb/tasks/build.yml index 9ed68d21..a2675eb6 100644 --- a/ansible/playbooks/saas/roles/mariadb/tasks/build.yml +++ b/ansible/playbooks/saas/roles/mariadb/tasks/build.yml @@ -2,10 +2,8 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ mariadb_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" + image_definition: "{{ image }}" - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version diff --git a/ansible/playbooks/saas/roles/milvus/tasks/build.yml b/ansible/playbooks/saas/roles/milvus/tasks/build.yml index 68406697..f1029407 100644 --- a/ansible/playbooks/saas/roles/milvus/tasks/build.yml +++ b/ansible/playbooks/saas/roles/milvus/tasks/build.yml @@ -5,10 +5,8 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ latest_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" + image_definition: "{{ image }}" - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version diff --git a/ansible/playbooks/saas/roles/mimir/defaults/main.yml b/ansible/playbooks/saas/roles/mimir/defaults/main.yml index ed97d539..38eab856 100644 --- a/ansible/playbooks/saas/roles/mimir/defaults/main.yml +++ b/ansible/playbooks/saas/roles/mimir/defaults/main.yml @@ -1 +1,2 @@ --- +mimir_install_node: "{{ software.install_node |default('singlenode') }}" \ No newline at end of file diff --git a/ansible/playbooks/saas/roles/mimir/tasks/build.yml b/ansible/playbooks/saas/roles/mimir/tasks/build.yml index 68406697..f1029407 100644 --- a/ansible/playbooks/saas/roles/mimir/tasks/build.yml +++ b/ansible/playbooks/saas/roles/mimir/tasks/build.yml @@ -5,10 +5,8 @@ - name: Set custom variables ansible.builtin.set_fact: image_version: "{{ latest_version }}" - image_name: "{{ image.name }}" - image_labels: "{{ image.labels }}" - image_build: "{{ image.build }}" + image_definition: "{{ image }}" - name: End playbook if no new version ansible.builtin.meta: end_host - when: softwares[image.name] is defined and softwares[image.name].version == image_version + when: softwares[catalog_image_name] is defined and softwares[catalog_image_name].version == image_version diff --git a/ansible/playbooks/saas/roles/mimir/templates/mimir.yaml.j2 b/ansible/playbooks/saas/roles/mimir/templates/mimir.yaml-multinodes.j2 similarity index 100% rename from ansible/playbooks/saas/roles/mimir/templates/mimir.yaml.j2 rename to ansible/playbooks/saas/roles/mimir/templates/mimir.yaml-multinodes.j2 diff --git a/ansible/playbooks/saas/roles/mimir/templates/mimir.yaml-singlenode.j2 b/ansible/playbooks/saas/roles/mimir/templates/mimir.yaml-singlenode.j2 new file mode 100644 index 00000000..d4af5d24 --- /dev/null +++ b/ansible/playbooks/saas/roles/mimir/templates/mimir.yaml-singlenode.j2 @@ -0,0 +1,61 @@ +--- +target: all,alertmanager,overrides-exporter + +limits: + compactor_blocks_retention_period: 90d + # ingestion_rate: 20000 + ingestion_burst_size: 40000 + max_label_names_per_series: 100 + max_label_value_length: 2048 + +common: + storage: + backend: s3 + s3: + endpoint: minio-{{ service_name }}.default.service.nomad:9000 + access_key_id: "{{ lookup('simple-stack-ui', type='secret', key=domain, subkey='access_key_id', missing='error') }}" + secret_access_key: "{{ lookup('simple-stack-ui', type='secret', key=domain, subkey='secret_access_key', missing='error') }}" + insecure: true + +memberlist: + join_members: [] + +blocks_storage: + s3: + bucket_name: mimir-blocks + +ruler: + alertmanager_url: http://127.0.0.1:8080/alertmanager + ring: + heartbeat_period: 2s + heartbeat_timeout: 10s + instance_addr: {% raw %}{{env "attr.unique.network.ip-address"}}{% endraw %} + +ruler_storage: + s3: + bucket_name: ruler + +alertmanager_storage: + s3: + bucket_name: mimir + +alertmanager: + fallback_config_file: /local/alertmanager-fallback-config.yaml + external_url: http://127.0.0.1:8080/alertmanager + + +compactor: + +distributor: + ring: + instance_addr: {% raw %}{{env "attr.unique.network.ip-address"}}{% endraw %} + +server: + log_level: warn + +ingester: + ring: + replication_factor: 1 + +usage_stats: + enabled: false diff --git a/ansible/playbooks/saas/roles/mimir/templates/nomad.hcl b/ansible/playbooks/saas/roles/mimir/templates/nomad.hcl index cfd71437..8c759b4f 100644 --- a/ansible/playbooks/saas/roles/mimir/templates/nomad.hcl +++ b/ansible/playbooks/saas/roles/mimir/templates/nomad.hcl @@ -50,7 +50,7 @@ job "{{ domain }}" { } config { - image = "minio/minio:{{ softwares.minio.version }}" + image = "{{ docker_private_registry.url_project | default(docker_private_registry.url) }}/minio:{{ softwares.minio.version }}" volumes = [ "{{ software_path }}/data/minio:/data:rw" ] @@ -68,7 +68,7 @@ job "{{ domain }}" { } group "{{ domain }}-mimir" { - count = 3 + count = "{{ (mimir_install_node == 'singlenode') | ternary(1, 3) }}" {% if software.constraints is defined and software.constraints.distinct_hosts is defined %} constraint { @@ -88,7 +88,6 @@ job "{{ domain }}" { } port "mimir_8080" { to = 8080 - static = 8080 } } @@ -123,13 +122,13 @@ job "{{ domain }}" { config { image = "grafana/mimir:{{ softwares.mimir.version }}" - network_mode = "host" + # network_mode = "host" volumes = [ "{{ software_path }}/mimir-${NOMAD_ALLOC_INDEX}:/data", ] args = [ "-config.file=/local/mimir.yaml", - "-memberlist.join=dnssrv+mimir.default.service.nomad" + # "-memberlist.join=dnssrv+mimir.default.service.nomad" ] ports = ["mimir_7946", "mimir_9095", "mimir_8080"] } @@ -138,7 +137,7 @@ job "{{ domain }}" { change_mode = "restart" destination = "local/mimir.yaml" data = < Catalogs/read'); ROUTE('+API /api/ +catalogs_create --> Catalogs/create'); ROUTE('+API /api/ +catalogs_update/{id} --> Catalogs/update'); + ROUTE('+API /api/ +catalogs_fork_create --> Catalogs/fork_create'); + ROUTE('+API /api/ +catalogs_fork_update/{id} --> Catalogs/fork_update'); + ROUTE('+API /api/ +catalogs_fork_remove --> Catalogs/fork_remove'); ROUTE('+API /api/ +catalogs_remove/{id} --> Catalogs/remove'); ROUTE('+API /api/ +catalogs_execute/{id} --> Catalogs/execute'); diff --git a/ui/index.js.map b/ui/index.js.map index aa87a415..41feaf24 100644 --- a/ui/index.js.map +++ b/ui/index.js.map @@ -106,7 +106,7 @@ "url": "/api/", "auth": 1, "id": "catalogs", - "name": " of catalog items" + "name": "List of catalog items" }, { "method": "API", @@ -121,7 +121,7 @@ "url": "/api/", "auth": 1, "id": "catalogs_create", - "input": "*name:String, *version:String", + "input": "*name:String, *version:String, *forkable:Boolean", "name": "Create catalog item" }, { @@ -133,6 +133,30 @@ "input": "*alias:String, *description:String, documentation:String, *cron:Boolean, *crontab:String", "name": "Update catalog item" }, + { + "method": "API", + "url": "/api/", + "auth": 1, + "id": "catalogs_fork_create", + "input": "*origin:String, *version:String, *suffix:String, *alias:String, *description:String, *cron:Boolean, *crontab:String, *dockerfile_root:String, *dockerfile_nonroot:String", + "name": "Fork catalog item" + }, + { + "method": "API", + "url": "/api/", + "auth": 1, + "params": "id:string", + "id": "catalogs_fork_update", + "input": "*origin:String, *suffix:String, *alias:String, *description:String, *cron:Boolean, *crontab:String, *dockerfile_root:String, *dockerfile_nonroot:String", + "name": "Fork catalog item" + }, + { + "method": "API", + "url": "/api/", + "auth": 1, + "id": "catalogs_fork_remove", + "error": "Action not found" + }, { "method": "API", "url": "/api/", @@ -356,7 +380,18 @@ }, { "name": "Catalogs/create", - "input": "*name:String, *version:String", + "input": "*name:String, *version:String, *forkable:Boolean", + "permissions": "catalogs" + }, + { + "name": "Catalogs/fork_create", + "input": "*origin:String, *version:String, *suffix:String, *alias:String, *description:String, *cron:Boolean, *crontab:String, *dockerfile_root:String, *dockerfile_nonroot:String", + "permissions": "catalogs" + }, + { + "name": "Catalogs/fork_update", + "params": "*id:UID", + "input": "*origin:String, *suffix:String, *alias:String, *description:String, *cron:Boolean, *crontab:String, *dockerfile_root:String, *dockerfile_nonroot:String", "permissions": "catalogs" }, { diff --git a/ui/public/forms/catalog.html b/ui/public/forms/catalog.html index 4cc89db6..9cb50129 100644 --- a/ui/public/forms/catalog.html +++ b/ui/public/forms/catalog.html @@ -1,4 +1,4 @@ -