summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrano Zarnovican <zarnovican@gmail.com>2016-11-13 09:13:12 +0100
committerToshio Kuratomi <a.badger@gmail.com>2016-11-17 15:02:06 -0800
commit96ddd29c7ee79c42476989f2051f741564aca135 (patch)
treeb8cdbd6f55e077d0c9534f73cd904bfe1df8188f
parented00741a01ed4eb935797afc74cabf6ce0a0e7fa (diff)
downloadansible-96ddd29c7ee79c42476989f2051f741564aca135.tar.gz
random filter: added optional 'seed' parameter
implements #15621
-rw-r--r--docsite/rst/playbooks_filters.rst5
-rw-r--r--lib/ansible/plugins/filter/core.py9
2 files changed, 11 insertions, 3 deletions
diff --git a/docsite/rst/playbooks_filters.rst b/docsite/rst/playbooks_filters.rst
index 0e5769c50e..a43cc087f9 100644
--- a/docsite/rst/playbooks_filters.rst
+++ b/docsite/rst/playbooks_filters.rst
@@ -168,6 +168,11 @@ Get a random number from 1 to 100 but in steps of 10::
{{ 100 |random(1, 10) }} => 31
{{ 100 |random(start=1, step=10) }} => 51
+It's also possible to initialize random number generator from seed. This way, you can create random-but-idempotent
+numbers (new in version 2.3)::
+
+ {{ 59 |random(seed=inventory_hostname) }} * * * * root /script/from/cron
+
Shuffle Filter
--------------
diff --git a/lib/ansible/plugins/filter/core.py b/lib/ansible/plugins/filter/core.py
index 39b92a28f8..804de360c9 100644
--- a/lib/ansible/plugins/filter/core.py
+++ b/lib/ansible/plugins/filter/core.py
@@ -31,7 +31,7 @@ import crypt
import hashlib
import string
from functools import partial
-from random import SystemRandom, shuffle
+from random import Random, SystemRandom, shuffle
from datetime import datetime
import uuid
@@ -199,8 +199,11 @@ def from_yaml(data):
return data
@environmentfilter
-def rand(environment, end, start=None, step=None):
- r = SystemRandom()
+def rand(environment, end, start=None, step=None, seed=None):
+ if seed is None:
+ r = SystemRandom()
+ else:
+ r = Random(seed)
if isinstance(end, (int, long)):
if not start:
start = 0