def ui_command_create(self, wwn, add_mapped_luns=None): ''' Creates a Node ACL for the initiator node with the specified I{wwn}. The node's I{wwn} must match the expected WWN Type of the target's fabric module. If I{add_mapped_luns} is omitted, the global parameter B{auto_add_mapped_luns} will be used, else B{true} or B{false} are accepted. If B{true}, then after creating the ACL, mapped LUNs will be automatically created for all existing LUNs. SEE ALSO ======== B{delete} ''' self.assert_root() spec = self.tpg.parent_target.fabric_module.spec if not utils.is_valid_wwn(spec['wwn_type'], wwn): self.shell.log.error("'%s' is not a valid %s WWN." % (wwn, spec['wwn_type'])) return add_mapped_luns = \ self.ui_eval_param(add_mapped_luns, 'bool', self.shell.prefs['auto_add_mapped_luns']) try: node_acl = NodeACL(self.tpg, wwn, mode="create") except RTSLibError, msg: self.shell.log.error(str(msg)) return
def validate_val(self, value, val_type, parent=None): valid_value = None log.debug("validate_val(%s, %s)" % (value, val_type)) if value == NO_VALUE: return None if val_type == "bool": if value.lower() in ["yes", "true", "1", "enable"]: valid_value = "yes" elif value.lower() in ["no", "false", "0", "disable"]: valid_value = "no" elif val_type == "bytes": match = re.match(r"(\d+(\.\d*)?)([kKMGT]?B?$)", value) if match: qty = str(float(match.group(1))) unit = match.group(3).upper() if not unit.endswith("B"): unit += "B" valid_value = "%s%s" % (qty, unit) elif val_type == "int": try: valid_value = str(int(value)) except: pass elif val_type == "ipport": (addr, _, port) = value.rpartition(":") try: str(int(port)) except: pass else: try: listen_all = int(addr.replace(".", "")) == 0 except: listen_all = False if listen_all: valid_value = "0.0.0.0:%s" % port elif addr in list_eth_ips(): valid_value = value elif val_type == "posint": try: val = int(value) except: pass else: if val > 0: valid_value = value elif val_type == "str": valid_value = str(value) forbidden = "*?[]" for char in forbidden: if char in valid_value: valid_value = None break elif val_type == "erl": if value in ["0", "1", "2"]: valid_value = value elif val_type == "iqn": if is_valid_wwn("iqn", value): valid_value = value elif val_type == "naa": if is_valid_wwn("naa", value): valid_value = value elif val_type == "backend": if is_valid_backend(value, parent): valid_value = value else: raise ConfigError("Unknown value type '%s' when validating %s" % (val_type, value)) log.debug("validate_val(%s) is a valid %s: %s" % (value, val_type, valid_value)) return valid_value
def validate_val(self, value, val_type, parent=None): valid_value = None log.debug("validate_val(%s, %s)" % (value, val_type)) if value == NO_VALUE: return None if val_type == 'bool': if value.lower() in ['yes', 'true', '1', 'enable']: valid_value = 'yes' elif value.lower() in ['no', 'false', '0', 'disable']: valid_value = 'no' elif val_type == 'bytes': match = re.match(r'(\d+(\.\d*)?)([kKMGT]?B?$)', value) if match: qty = str(float(match.group(1))) unit = match.group(3).upper() if not unit.endswith('B'): unit += 'B' valid_value = "%s%s" % (qty, unit) elif val_type == 'int': try: valid_value = str(int(value)) except: pass elif val_type == 'ipport': (addr, _, port) = value.rpartition(":") try: str(int(port)) except: pass else: try: listen_all = int(addr.replace(".", "")) == 0 except: listen_all = False if listen_all: valid_value = "0.0.0.0:%s" % port elif addr in list_eth_ips(): valid_value = value elif val_type == 'posint': try: val = int(value) except: pass else: if val > 0: valid_value = value elif val_type == 'str': valid_value = str(value) forbidden = "*?[]" for char in forbidden: if char in valid_value: valid_value = None break elif val_type == 'erl': if value in ["0", "1", "2"]: valid_value = value elif val_type == 'iqn': if is_valid_wwn('iqn', value): valid_value = value elif val_type == 'naa': if is_valid_wwn('naa', value): valid_value = value elif val_type == 'backend': if is_valid_backend(value, parent): valid_value = value else: raise ConfigError("Unknown value type '%s' when validating %s" % (val_type, value)) log.debug("validate_val(%s) is a valid %s: %s" % (value, val_type, valid_value)) return valid_value