Source engine Archive
diff --git a/reclass/storage/data.sls b/reclass/storage/data.sls
index 1574e97..cc977c3 100644
--- a/reclass/storage/data.sls
+++ b/reclass/storage/data.sls
@@ -14,6 +14,22 @@
   {%- endif %}
   - force_reset: {{ storage.data_source.force_reset|default(False) }}
 
+{%- elif storage.data_source.engine == "archive" %}
+
+reclass_archive_data_dir:
+  archive.extracted:
+    - name: {{ storage.base_dir }}
+    - source: {{ storage.data_source.address }}
+    {%- if storage.data_source.hash is string %}
+    - source_hash: {{ storage.data_source.hash }}
+    {%- endif %}
+    {%- if storage.data_source.options is string %}
+    - options: {{ storage.data_source.options }}
+    {%- endif %}
+    - user: root
+    - group: root
+    - if_missing: {{ storage.base_dir }}/classes
+
 {%- endif %}
 
 reclass_data_dir:
@@ -23,6 +39,9 @@
 {%- if storage.data_source.engine == "git" %}
   - require:
     - git: reclass_git_data_dir
+{%- elif storage.data_source.engine == "archive" %}
+  - require:
+    - archive: reclass_archive_data_dir
 {%- endif %}
 
 {%- endif %}
diff --git a/tests/pillar/storage_archive.sls b/tests/pillar/storage_archive.sls
new file mode 100644
index 0000000..32197ce
--- /dev/null
+++ b/tests/pillar/storage_archive.sls
@@ -0,0 +1,7 @@
+reclass:
+  storage:
+    enabled: true
+    base_dir: /srv/reclass
+    data_source:
+      engine: archive
+      address: salt://path/reclass-project.tar
diff --git a/tests/pillar/storage_archive_public.sls b/tests/pillar/storage_archive_public.sls
new file mode 100644
index 0000000..8ec56ba
--- /dev/null
+++ b/tests/pillar/storage_archive_public.sls
@@ -0,0 +1,8 @@
+reclass:
+  storage:
+    enabled: true
+    base_dir: /srv/reclass
+    data_source:
+      engine: archive
+      address: https://mydomain.tld/bar.tar.gz
+      hash: sha1=5edb7d584b82ddcbf76e311601f5d4442974aaa5