diff --git a/files/create_fedora_repos b/files/create_fedora_repos
new file mode 100644
index 0000000000000000000000000000000000000000..3ad51d0b173725f7e5a0f86e8bfb9774bc3cb80a
--- /dev/null
+++ b/files/create_fedora_repos
@@ -0,0 +1,14 @@
+#!/bin/bash
+mapfile -t versions < <(curl https://fedoraproject.org/releases.json | jq -r '[ .[] | select(.arch == "x86_64" and .variant == "Workstation") | .version ] | unique | .[]')
+arches=(x86_64)
+
+for v in "${versions[@]}"; do
+  for arch in "${arches[@]}"; do
+    d="/srv/repos/fedora/${v}/${arch}"
+    if ! [ -d "$d" ]; then
+      mkdir -p "$d"
+    fi
+  done
+done
+
+/usr/local/bin/lysator_update_yum_repos_cron
diff --git a/manifests/yum_repository.pp b/manifests/yum_repository.pp
index 3bdbd4661459154f28ccf9c2f06a3891cb6fda9f..0e785326ff70043848f3d00527ebeed32053c93e 100644
--- a/manifests/yum_repository.pp
+++ b/manifests/yum_repository.pp
@@ -34,6 +34,23 @@ class repomaster::yum_repository
   # contains chronic, required by lysator_update_yum_repos_cron
   ensure_packages(['moreutils'])
 
+  # automatically create repos for new fedora versions as they are released
+  ensure_packages(['jq'])
+  file { '/usr/local/bin/create_fedora_repos':
+    ensure => file,
+    source => "puppet:///modules/repomaster/create_fedora_repos",
+    owner  => root,
+    group  => root,
+    mode   => '0555',
+  }
+  cron { 'create_fedora_repos':
+    command => '/usr/local/bin/create_fedora_repos',
+    user    => root,
+    weekday => 6,
+    hour    => 6,
+    minute  => 15,
+  }
+
   file { '/usr/local/bin/lysator_update_yum_repos_cron':
     ensure => file,
     source => "puppet:///modules/repomaster/lysator_update_yum_repos_cron",