{% from "blender/map.jinja" import blender with context %} # 1. Install prerequisites self-contained inside the formula blender_prereqs: pkg.installed: - pkgs: {{ blender.pkgs | json }} # 2. Download tarball via system curl (preserves User-Agent across CDN redirects) blender_download_tarball: cmd.run: - name: | curl -sSL -A "Mozilla/5.0 (X11; Linux x86_64; rv:120.0) Gecko/20100101 Firefox/120.0" \ -o /var/tmp/blender-{{ blender.version }}-linux-x64.tar.xz \ {{ blender.download_url }} - creates: /var/tmp/blender-{{ blender.version }}-linux-x64.tar.xz - unless: - test -d {{ blender.archive_dir }} - require: - pkg: blender_prereqs # 3. Extract tarball blender_extract_tarball: archive.extracted: - name: {{ blender.archive_dir }} - source: /var/tmp/blender-{{ blender.version }}-linux-x64.tar.xz - enforce_ownership_on: {{ blender.archive_dir }} - options: '--strip-components=1' - if_missing: {{ blender.archive_dir }}/blender - require: - cmd: blender_download_tarball - pkg: blender_prereqs # 4. Maintain generic symlink pointing to active version blender_opt_symlink: file.symlink: - name: {{ blender.symlink_dir }} - target: {{ blender.archive_dir }} - force: True - require: - archive: blender_extract_tarball # 5. Create CLI launcher symlink blender_bin_symlink: file.symlink: - name: {{ blender.bin_dir }}/blender - target: {{ blender.symlink_dir }}/blender - force: True - require: - file: blender_opt_symlink # 6. Deploy desktop menu shortcut blender_desktop_entry: file.managed: - name: {{ blender.desktop_dir }}/blender.desktop - source: salt://blender/templates/blender.desktop.jinja - template: jinja - mode: '0644' - user: root - group: root - context: version: "{{ blender.version }}" exec_path: "{{ blender.symlink_dir }}/blender %f" icon_path: "{{ blender.symlink_dir }}/blender.svg" - require: - file: blender_opt_symlink # 7. Clean up downloaded archive blender_cleanup_tarball: file.absent: - name: /var/tmp/blender-{{ blender.version }}-linux-x64.tar.xz - require: - archive: blender_extract_tarball