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)
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
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))
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()
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)