{% from "blender/map.jinja" import blender with context %} # 1. Download tarball via system curl to preserve User-Agent across 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 }} # 2. Extract from local file system 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 # 3. 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 # 4. 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 # 5. 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 # 6. Clean up cached tarball after extraction blender_cleanup_tarball: file.absent: - name: /var/tmp/blender-{{ blender.version }}-linux-x64.tar.xz - require: - archive: blender_extract_tarball