def _parse_options(self, options):
        """Copy needed options to self"""
        attributes = ('host', 'wapi_version', 'username', 'password',
                      'ssl_verify', 'http_request_timeout', 'max_retries',
                      'http_pool_connections', 'http_pool_maxsize',
                      'silent_ssl_warnings', 'log_api_calls_as_info',
                      'max_results', 'paging')
        for attr in attributes:
            if isinstance(options, dict) and attr in options:
                setattr(self, attr, options[attr])
            elif hasattr(options, attr):
                value = getattr(options, attr)
                setattr(self, attr, value)
            elif attr in self.DEFAULT_OPTIONS:
                setattr(self, attr, self.DEFAULT_OPTIONS[attr])
            else:
                msg = "WAPI config error. Option %s is not defined" % attr
                raise ib_ex.InfobloxConfigException(msg=msg)

        for attr in ('host', 'username', 'password'):
            if not getattr(self, attr):
                msg = "WAPI config error. Option %s can not be blank" % attr
                raise ib_ex.InfobloxConfigException(msg=msg)

        self.wapi_url = "https://%s/wapi/v%s/" % (self.host, self.wapi_version)
        self.cloud_api_enabled = self.is_cloud_wapi(self.wapi_version)
Example #2
0
    def _build(self,
               pattern,
               ip_address=None,
               instance_name=None,
               port_id=None,
               device_id=None,
               subnet_name=None,
               port_name=None):
        self._validate_pattern(pattern)

        subnet = self.ib_cxt.subnet
        network = self.ib_cxt.network
        if not subnet_name:
            subnet_name = (subnet['name']
                           if subnet.get('name') else subnet['id'])
        network_name = (network['name']
                        if network.get('name') else network['id'])

        pattern_dict = {
            'network_id': subnet['network_id'],
            'network_name': network_name,
            'tenant_id': self.ib_cxt.tenant_id,
            'tenant_name': self.ib_cxt.tenant_name,
            'subnet_name': subnet_name,
            'subnet_id': subnet['id']
        }

        if port_id:
            pattern_dict['port_id'] = port_id

        if device_id:
            pattern_dict['instance_id'] = device_id
            if instance_name:
                pattern_dict['instance_name'] = re.sub("[^A-Za-z0-9-]", "-",
                                                       instance_name.strip())
            else:
                # During port_creation for instance_name is not available,
                # so set it to instance_id
                pattern_dict['instance_name'] = pattern_dict['instance_id']

        if ip_address:
            octets = ip_address.split('.')
            ip_addr = ip_address.replace('.', '-').replace(':', '-')
            pattern_dict['ip_address'] = ip_addr
            for i in range(len(octets)):
                octet_key = 'ip_address_octet{i}'.format(i=(i + 1))
                pattern_dict[octet_key] = octets[i]

        if port_name:
            pattern_dict['port_name'] = port_name
        elif 'ip_address' in pattern_dict:
            pattern_dict['port_name'] = pattern_dict['ip_address']
        else:
            pattern_dict['port_name'] = port_id

        try:
            fqdn = pattern.format(**pattern_dict)
        except (KeyError, IndexError) as e:
            raise ibc_exc.InfobloxConfigException(msg="Invalid pattern %s" % e)
        return fqdn
Example #3
0
    def __init__(self, version, feature_versions=None):
        self._wapi_version = None

        if feature_versions is None:
            feature_versions = FEATURE_VERSIONS

        if isinstance(version, six.string_types):
            wapi_version = version
        elif hasattr(version, 'wapi_version'):
            wapi_version = getattr(version, 'wapi_version')
        else:
            msg = "WAPI version cannot be determined from '%s'" % version
            raise ib_ex.InfobloxConfigException(msg=msg)

        wapi_util = WapiVersionUtil(wapi_version)
        for f, v in feature_versions.items():
            setattr(self, f, wapi_util.is_version_supported(v))
Example #4
0
    def _build(self, pattern, ip_address=None, instance_name=None,
               port_id=None, device_id=None, subnet_name=None,
               port_name=None, port_tenant_id=None, tenant_name=None):
        self._validate_pattern(pattern)

        subnet = self.ib_cxt.subnet
        network = self.ib_cxt.network
        if not subnet_name:
            subnet_name = (subnet['name'] if subnet.get('name')
                           else subnet['id'])
        network_name = (network['name'] if network.get('name')
                        else network['id'])

        pattern_dict = {
            'network_id': subnet['network_id'],
            'network_name': network_name,
            'tenant_id': port_tenant_id or self.ib_cxt.tenant_id,
            'tenant_name': tenant_name or self.ib_cxt.tenant_name,
            'subnet_name': subnet_name,
            'subnet_id': subnet['id']
        }

        if port_id:
            pattern_dict['port_id'] = port_id

        if device_id:
            pattern_dict['instance_id'] = device_id
            if instance_name:
                pattern_dict['instance_name'] = re.sub("[^A-Za-z0-9-]", "-",
                                                       instance_name.strip())
            else:
                # During port_creation for instance_name is not available,
                # so set it to instance_id
                pattern_dict['instance_name'] = pattern_dict['instance_id']

        if ip_address:
            octets = ip_address.split('.')
            ip_addr = ip_address.replace('.', '-').replace(':', '-')
            pattern_dict['ip_address'] = ip_addr
            for i in range(len(octets)):
                octet_key = 'ip_address_octet{i}'.format(i=(i + 1))
                pattern_dict[octet_key] = octets[i]

        if port_name:
            pattern_dict['port_name'] = port_name
        elif 'ip_address' in pattern_dict:
            pattern_dict['port_name'] = pattern_dict['ip_address']
        else:
            pattern_dict['port_name'] = port_id

        try:
            # Validate grid config pattern with pattern_dict to
            # restrict user to use only those pattern variable in
            # grid config pattern which is available in pattern_dict
            self._validate_pattern_struct(pattern, pattern_dict)
            fqdn = pattern.format(**pattern_dict)
        except (KeyError, IndexError) as e:
            raise ibc_exc.InfobloxConfigException(
                msg="Invalid pattern %s" % e)
        # Return fqdn as lowercase string as NIOS creates all resources
        # in lowercases.
        return fqdn.lower()
Example #5
0
 def _validate_pattern(pattern):
     invalid_values = ['..']
     for val in invalid_values:
         if val in pattern:
             error_message = "Invalid pattern value {0}".format(val)
             raise ibc_exc.InfobloxConfigException(msg=error_message)