[stable-2.7] fix issue in random_mac filter with short prefixes (#53928)

(cherry picked from commit 1e3428a766)

Co-authored-by: Anton Roman <antonroman@gmail.com>
This commit is contained in:
Anton Roman 2019-03-26 18:49:23 +01:00 committed by Toshio Kuratomi
parent 13ab3a4f3d
commit 68c5555cc5
3 changed files with 9 additions and 3 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- random_mac - generate a proper MAC address when the provided vendor prefix is two or four characters (https://github.com/ansible/ansible/issues/50838)

View file

@ -37,7 +37,7 @@ import yaml
from collections import Mapping, MutableMapping
import datetime
from functools import partial
from random import Random, SystemRandom, shuffle, random
from random import Random, SystemRandom, shuffle, randint
from jinja2.filters import environmentfilter, do_groupby as _do_groupby
@ -543,8 +543,8 @@ def random_mac(value):
if len(err):
raise AnsibleFilterError('Invalid value (%s) for random_mac: %s' % (value, err))
# Generate random float and make it int
v = int(random() * 10.0**10)
# Generate random int between x1000000000 and xFFFFFFFFFF
v = randint(68719476736, 1099511627775)
# Select first n chars to complement input prefix
remain = 2 * (6 - len(mac_items))
rnd = ('%x' % v)[:remain]

View file

@ -235,7 +235,11 @@
- name: Verify random_mac filter
assert:
that:
- "'00' | random_mac is match('^00:[a-f0-9][a-f0-9]:[a-f0-9][a-f0-9]:[a-f0-9][a-f0-9]:[a-f0-9][a-f0-9]:[a-f0-9][a-f0-9]$')"
- "'00:00' | random_mac is match('^00:00:[a-f0-9][a-f0-9]:[a-f0-9][a-f0-9]:[a-f0-9][a-f0-9]:[a-f0-9][a-f0-9]$')"
- "'00:00:00' | random_mac is match('^00:00:00:[a-f0-9][a-f0-9]:[a-f0-9][a-f0-9]:[a-f0-9][a-f0-9]$')"
- "'00:00:00:00' | random_mac is match('^00:00:00:[a-f0-9][a-f0-9]:[a-f0-9][a-f0-9]:[a-f0-9][a-f0-9]$')"
- "'00:00:00:00:00' | random_mac is match('^00:00:00:00:00:[a-f0-9][a-f0-9]$')"
- "'00:00:00' | random_mac != '00:00:00' | random_mac"
- name: Ensure dict2items works with hostvars