Source code for infoblox_client.utils
# Copyright 2015 OpenStack LLC.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import netaddr
import random
import six
from oslo_log import log as logging
from oslo_serialization import jsonutils
LOG = logging.getLogger(__name__)
[docs]def is_valid_ip(ip):
try:
netaddr.IPAddress(ip)
except netaddr.core.AddrFormatError:
return False
return True
[docs]def generate_duid(mac):
"""DUID is consisted of 10 hex numbers.
0x00 + 3 random hex + mac with 6 hex
"""
valid = mac and isinstance(mac, six.string_types)
if not valid:
ValueError("Invalid argument was passed")
duid = [0x00,
random.randint(0x00, 0x7f),
random.randint(0x00, 0xff),
random.randint(0x00, 0xff)]
return ':'.join(map(lambda x: "%02x" % x, duid)) + ':' + mac
[docs]def determine_ip_version(ip_in):
ip_ver = 4
if isinstance(ip_in, (list, tuple)):
ip_in = ip_in[0]
if ip_in:
if isinstance(ip_in, int):
if ip_in == 6:
ip_ver = 6
else:
ip_ver = 4
elif hasattr(ip_in, 'ip_version'):
return ip_in.ip_version
else:
if type(ip_in) is dict:
addr = ip_in['ip_address']
else:
addr = ip_in
try:
ip = netaddr.IPAddress(addr)
except ValueError:
ip = netaddr.IPNetwork(addr)
ip_ver = ip.version
return ip_ver
[docs]def safe_json_load(data):
try:
return jsonutils.loads(data)
except ValueError:
LOG.warn("Could not decode reply into json: %s", data)
[docs]def try_value_to_bool(value, strict_mode=True):
"""Tries to convert value into boolean.
strict_mode is True:
- Only string representation of str(True) and str(False)
are converted into booleans;
- Otherwise unchanged incoming value is returned;
strict_mode is False:
- Anything that looks like True or False is converted into booleans.
Values accepted as True:
- 'true', 'on', 'yes' (case independent)
Values accepted as False:
- 'false', 'off', 'no' (case independent)
- all other values are returned unchanged
"""
if strict_mode:
true_list = ('True',)
false_list = ('False',)
val = value
else:
true_list = ('true', 'on', 'yes')
false_list = ('false', 'off', 'no')
val = str(value).lower()
if val in true_list:
return True
elif val in false_list:
return False
return value