diff --git a/k8t/cli.py b/k8t/cli.py
index f60d58e..b4429f3 100644
--- a/k8t/cli.py
+++ b/k8t/cli.py
@@ -180,7 +180,7 @@ def new_environment(cname, name, directory):
 @click.option("--environment", "-e", "ename", help="Deployment environment to use.")
 @click.option("--name", "-n", help="Template filename.")
 @click.option("--prefix", "-p", help="Prefix for filename.")
-@click.argument("kind", type=click.Choice(list(scaffolding.list_available_templates())))
+@click.argument("kind", type=click.Choice(sorted(list(scaffolding.list_available_templates()))))
 @click.argument("directory", type=click.Path(exists=True, file_okay=False), default=os.getcwd())
 def new_template(cname, ename, name, prefix, kind, directory):
     if not project.check_directory(directory):
diff --git a/k8t/secret_providers.py b/k8t/secret_providers.py
index 5ce3012..ca07b08 100644
--- a/k8t/secret_providers.py
+++ b/k8t/secret_providers.py
@@ -8,9 +8,19 @@
 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 import logging
+import string
 
 import boto3
 
+try:
+    from secrets import choice
+except ImportError:
+    from random import SystemRandom
+
+    choice = SystemRandom().choice
+
+
+
 LOGGER = logging.getLogger(__name__)
 
 
@@ -25,3 +35,16 @@ def ssm(key: str) -> str:
         ]
     except client.exceptions.ParameterNotFound:
         raise RuntimeError("Could not find secret: {}".format(key))
+
+
+RANDOM_STORE = {}
+
+def random(key: str) -> str:
+    LOGGER.debug("Requesting secret from %s", key)
+
+    if key not in RANDOM_STORE:
+        RANDOM_STORE[key] = "".join(
+            choice(string.ascii_lowercase + string.digits) for _ in range(24)
+        )
+
+    return RANDOM_STORE[key]
diff --git a/k8t/secrets.py b/k8t/secrets.py
index 33cf931..241f066 100644
--- a/k8t/secrets.py
+++ b/k8t/secrets.py
@@ -18,7 +18,10 @@ def get_secret(key: str, path: str, cluster: str, environment: str) -> str:
         raise RuntimeError(
             "No configuration for secrets found: {}".format(config))
 
-    provider = getattr(secret_providers, config["secrets"]["provider"].lower())
+    try:
+        provider = getattr(secret_providers, config["secrets"]["provider"].lower())
+    except AttributeError:
+        raise NotImplementedError("secret provider {} does not exist.".format(config["secrets"]["provider"].lower()))
 
     return provider(
         "{0}/{1}".format(config['secrets']['prefix'],

diff --git a/tests/secret_providers.py b/tests/secret_providers.py
new file mode 100644
index 0000000..6e2f75c
--- /dev/null
+++ b/tests/secret_providers.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# ISC License
+#
+# Copyright 2019 FL Fintech E GmbH
+#
+# Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+from k8t.secret_providers import random
+
+
+def test_random():
+    assert random('/foobar') == random('/foobar') != random('/foobaz')
+
+    result = random('/foobam')
+
+    assert result == random('/foobam')
+
+# vim: fenc=utf-8:ts=4:sw=4:expandtab

get_secret should offer a random provider
to allow using the same templates for different environments we should add a random provider to the secrets function.
tests/secret_providers.py::test_random