diff --git a/lib/backend.py b/lib/backend.py index ccb6a17843d287c5a51d26a45373ca4f601e2a6e..c3279a73d393f0861810a3ae10d59f6354162fab 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -68,7 +68,7 @@ from ganeti import ht _BOOT_ID_PATH = "/proc/sys/kernel/random/boot_id" -_ALLOWED_CLEAN_DIRS = frozenset([ +_ALLOWED_CLEAN_DIRS = compat.UniqueFrozenset([ pathutils.DATA_DIR, pathutils.JOB_QUEUE_ARCHIVE_DIR, pathutils.QUEUE_DIR, diff --git a/lib/bdev.py b/lib/bdev.py index 9221d0c53000b6132501d1217366e49032259a61..915112b12895d793660c5db58cd785c364743659 100644 --- a/lib/bdev.py +++ b/lib/bdev.py @@ -120,7 +120,7 @@ def _GetForbiddenFileStoragePaths(): paths.update(map(lambda s: "%s/%s" % (prefix, s), ["bin", "lib", "lib32", "lib64", "sbin"])) - return frozenset(map(os.path.normpath, paths)) + return compat.UniqueFrozenset(map(os.path.normpath, paths)) def _ComputeWrongFileStoragePaths(paths, @@ -503,8 +503,8 @@ class LogicalVolume(BlockDev): """ _VALID_NAME_RE = re.compile("^[a-zA-Z0-9+_.-]*$") - _INVALID_NAMES = frozenset([".", "..", "snapshot", "pvmove"]) - _INVALID_SUBSTRINGS = frozenset(["_mlog", "_mimage"]) + _INVALID_NAMES = compat.UniqueFrozenset([".", "..", "snapshot", "pvmove"]) + _INVALID_SUBSTRINGS = compat.UniqueFrozenset(["_mlog", "_mimage"]) def __init__(self, unique_id, children, size, params): """Attaches to a LV device. @@ -958,7 +958,7 @@ class DRBD8Status(object): CS_SYNCTARGET = "SyncTarget" CS_PAUSEDSYNCS = "PausedSyncS" CS_PAUSEDSYNCT = "PausedSyncT" - CSET_SYNC = frozenset([ + CSET_SYNC = compat.UniqueFrozenset([ CS_WFREPORTPARAMS, CS_STARTINGSYNCS, CS_STARTINGSYNCT, diff --git a/lib/cli.py b/lib/cli.py index 603cdc4746593d1c898083aea22850505d06429b..0162bddd18fbc5e18120bbfa50858c94f5270c25 100644 --- a/lib/cli.py +++ b/lib/cli.py @@ -666,7 +666,7 @@ def check_maybefloat(option, opt, value): # pylint: disable=W0613 OPT_COMPL_INST_ADD_NODES, OPT_COMPL_ONE_NODEGROUP) = range(100, 108) -OPT_COMPL_ALL = frozenset([ +OPT_COMPL_ALL = compat.UniqueFrozenset([ OPT_COMPL_MANY_NODES, OPT_COMPL_ONE_NODE, OPT_COMPL_ONE_INSTANCE, diff --git a/lib/client/gnt_debug.py b/lib/client/gnt_debug.py index ffbd569c9eafc16fbdb1c98d42a2e50756d7dbc5..829ed05ed55a7cbcc7579e99702c15067c90535f 100644 --- a/lib/client/gnt_debug.py +++ b/lib/client/gnt_debug.py @@ -432,7 +432,12 @@ def TestJobqueue(opts, _): TM_MULTISUCCESS, TM_FAIL, TM_PARTFAIL) = range(4) - TM_ALL = frozenset([TM_SUCCESS, TM_MULTISUCCESS, TM_FAIL, TM_PARTFAIL]) + TM_ALL = compat.UniqueFrozenset([ + TM_SUCCESS, + TM_MULTISUCCESS, + TM_FAIL, + TM_PARTFAIL, + ]) for mode in TM_ALL: test_messages = [ diff --git a/lib/client/gnt_group.py b/lib/client/gnt_group.py index 8e73da972b3682703a3d58a4297cc845aa919c05..e05f9821f15030b7f1599a5eb6e7cfd1a5da247d 100644 --- a/lib/client/gnt_group.py +++ b/lib/client/gnt_group.py @@ -28,14 +28,14 @@ from ganeti.cli import * from ganeti import constants from ganeti import opcodes from ganeti import utils +from ganeti import compat from cStringIO import StringIO #: default list of fields for L{ListGroups} _LIST_DEF_FIELDS = ["name", "node_cnt", "pinst_cnt", "alloc_policy", "ndparams"] - -_ENV_OVERRIDE = frozenset(["list"]) +_ENV_OVERRIDE = compat.UniqueFrozenset(["list"]) def AddGroup(opts, args): diff --git a/lib/client/gnt_instance.py b/lib/client/gnt_instance.py index c48839516b53387bcd0037e8a59918536e93d61a..ee9bf44f0d67e092a511efb7f58805cc53035e38 100644 --- a/lib/client/gnt_instance.py +++ b/lib/client/gnt_instance.py @@ -53,21 +53,19 @@ _EXPAND_NODES_SEC_BY_TAGS = "nodes-sec-by-tags" _EXPAND_INSTANCES = "instances" _EXPAND_INSTANCES_BY_TAGS = "instances-by-tags" -_EXPAND_NODES_TAGS_MODES = frozenset([ +_EXPAND_NODES_TAGS_MODES = compat.UniqueFrozenset([ _EXPAND_NODES_BOTH_BY_TAGS, _EXPAND_NODES_PRI_BY_TAGS, _EXPAND_NODES_SEC_BY_TAGS, ]) - #: default list of options for L{ListInstances} _LIST_DEF_FIELDS = [ "name", "hypervisor", "os", "pnode", "status", "oper_ram", ] - _MISSING = object() -_ENV_OVERRIDE = frozenset(["list"]) +_ENV_OVERRIDE = compat.UniqueFrozenset(["list"]) _INST_DATA_VAL = ht.TListOf(ht.TDict) diff --git a/lib/client/gnt_node.py b/lib/client/gnt_node.py index 6bf6bf683c1ecd7f4682e53d4136d5b592f2edbf..e893b5e61e024363758cb583fb90d295ebe7738e 100644 --- a/lib/client/gnt_node.py +++ b/lib/client/gnt_node.py @@ -39,6 +39,7 @@ from ganeti import errors from ganeti import netutils from ganeti import pathutils from ganeti import ssh +from ganeti import compat from cStringIO import StringIO from ganeti import confd @@ -106,13 +107,12 @@ _REPAIRABLE_STORAGE_TYPES = \ _MODIFIABLE_STORAGE_TYPES = constants.MODIFIABLE_STORAGE_FIELDS.keys() +_OOB_COMMAND_ASK = compat.UniqueFrozenset([ + constants.OOB_POWER_OFF, + constants.OOB_POWER_CYCLE, + ]) -_OOB_COMMAND_ASK = frozenset([constants.OOB_POWER_OFF, - constants.OOB_POWER_CYCLE]) - - -_ENV_OVERRIDE = frozenset(["list"]) - +_ENV_OVERRIDE = compat.UniqueFrozenset(["list"]) NONODE_SETUP_OPT = cli_option("--no-node-setup", default=True, action="store_false", dest="node_setup", diff --git a/lib/cmdlib.py b/lib/cmdlib.py index c09e1d881a0930b9d89447f6513f0a230d302733..0b1d5ce65c18f4ab5b736b2ec2972b38acb9afe3 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -7288,7 +7288,7 @@ class LUInstanceRecreateDisks(LogicalUnit): HTYPE = constants.HTYPE_INSTANCE REQ_BGL = False - _MODIFYABLE = frozenset([ + _MODIFYABLE = compat.UniqueFrozenset([ constants.IDISK_SIZE, constants.IDISK_MODE, ]) diff --git a/lib/confd/client.py b/lib/confd/client.py index 9b3f16088540b0748ec4496c432cb52a4c47f4fc..e37a3cd0a583364ab584a99dc7f59002197b2be5 100644 --- a/lib/confd/client.py +++ b/lib/confd/client.py @@ -406,7 +406,7 @@ UPCALL_REPLY = 1 # UPCALL_EXPIRE: internal library request expire # has only salt, type, orig_request and extra_args UPCALL_EXPIRE = 2 -CONFD_UPCALL_TYPES = frozenset([ +CONFD_UPCALL_TYPES = compat.UniqueFrozenset([ UPCALL_REPLY, UPCALL_EXPIRE, ]) diff --git a/lib/constants.py b/lib/constants.py index e96bcba2cf3a3dc408b617bf44b95ad8c314a3fd..6f277dcff53ebec65ecd16f68e27dd7635b2a9e6 100644 --- a/lib/constants.py +++ b/lib/constants.py @@ -26,6 +26,7 @@ import socket from ganeti import _autoconf from ganeti import _vcsversion +from ganeti import compat from ganeti import pathutils @@ -34,7 +35,11 @@ RELEASE_VERSION = _autoconf.PACKAGE_VERSION OS_API_V10 = 10 OS_API_V15 = 15 OS_API_V20 = 20 -OS_API_VERSIONS = frozenset([OS_API_V10, OS_API_V15, OS_API_V20]) +OS_API_VERSIONS = compat.UniqueFrozenset([ + OS_API_V10, + OS_API_V15, + OS_API_V20, + ]) VCS_VERSION = _vcsversion.VCS_VERSION EXPORT_VERSION = 0 RAPI_VERSION = 2 @@ -223,7 +228,12 @@ CONS_SPICE = "spice" CONS_MESSAGE = "msg" #: All console types -CONS_ALL = frozenset([CONS_SSH, CONS_VNC, CONS_SPICE, CONS_MESSAGE]) +CONS_ALL = compat.UniqueFrozenset([ + CONS_SSH, + CONS_VNC, + CONS_SPICE, + CONS_MESSAGE, + ]) # For RSA keys more bits are better, but they also make operations more # expensive. NIST SP 800-131 recommends a minimum of 2048 bits from the year @@ -256,7 +266,7 @@ IEM_EXPORT = "export" # Import/export transport compression IEC_NONE = "none" IEC_GZIP = "gzip" -IEC_ALL = frozenset([ +IEC_ALL = compat.UniqueFrozenset([ IEC_NONE, IEC_GZIP, ]) @@ -322,7 +332,7 @@ SF_ALLOCATABLE = "allocatable" SO_FIX_CONSISTENCY = "fix-consistency" # Available fields per storage type -VALID_STORAGE_FIELDS = frozenset([ +VALID_STORAGE_FIELDS = compat.UniqueFrozenset([ SF_NAME, SF_TYPE, SF_SIZE, @@ -331,7 +341,11 @@ VALID_STORAGE_FIELDS = frozenset([ SF_ALLOCATABLE, ]) -VALID_STORAGE_TYPES = frozenset([ST_FILE, ST_LVM_PV, ST_LVM_VG]) +VALID_STORAGE_TYPES = compat.UniqueFrozenset([ + ST_FILE, + ST_LVM_PV, + ST_LVM_VG, + ]) MODIFIABLE_STORAGE_FIELDS = { ST_LVM_PV: frozenset([SF_ALLOCATABLE]), @@ -357,29 +371,50 @@ DT_BLOCK = "blockdev" DT_RBD = "rbd" # the set of network-mirrored disk templates -DTS_INT_MIRROR = frozenset([DT_DRBD8]) +DTS_INT_MIRROR = compat.UniqueFrozenset([DT_DRBD8]) # the set of externally-mirrored disk templates (e.g. SAN, NAS) -DTS_EXT_MIRROR = frozenset([DT_SHARED_FILE, DT_BLOCK, DT_RBD]) +DTS_EXT_MIRROR = compat.UniqueFrozenset([ + DT_SHARED_FILE, + DT_BLOCK, + DT_RBD, + ]) # the set of non-lvm-based disk templates -DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE, DT_SHARED_FILE, - DT_BLOCK, DT_RBD]) +DTS_NOT_LVM = compat.UniqueFrozenset([ + DT_DISKLESS, + DT_FILE, + DT_SHARED_FILE, + DT_BLOCK, + DT_RBD, + ]) # the set of disk templates which can be grown -DTS_GROWABLE = frozenset([DT_PLAIN, DT_DRBD8, DT_FILE, DT_SHARED_FILE, DT_RBD]) +DTS_GROWABLE = compat.UniqueFrozenset([ + DT_PLAIN, + DT_DRBD8, + DT_FILE, + DT_SHARED_FILE, + DT_RBD, + ]) # the set of disk templates that allow adoption -DTS_MAY_ADOPT = frozenset([DT_PLAIN, DT_BLOCK]) +DTS_MAY_ADOPT = compat.UniqueFrozenset([ + DT_PLAIN, + DT_BLOCK, + ]) # the set of disk templates that *must* use adoption -DTS_MUST_ADOPT = frozenset([DT_BLOCK]) +DTS_MUST_ADOPT = compat.UniqueFrozenset([DT_BLOCK]) # the set of disk templates that allow migrations DTS_MIRRORED = frozenset.union(DTS_INT_MIRROR, DTS_EXT_MIRROR) # the set of file based disk templates -DTS_FILEBASED = frozenset([DT_FILE, DT_SHARED_FILE]) +DTS_FILEBASED = compat.UniqueFrozenset([ + DT_FILE, + DT_SHARED_FILE, + ]) # logical disk types LD_LV = "lvm" @@ -387,7 +422,7 @@ LD_DRBD8 = "drbd8" LD_FILE = "file" LD_BLOCKDEV = "blockdev" LD_RBD = "rbd" -LOGICAL_DISK_TYPES = frozenset([ +LOGICAL_DISK_TYPES = compat.UniqueFrozenset([ LD_LV, LD_DRBD8, LD_FILE, @@ -395,7 +430,12 @@ LOGICAL_DISK_TYPES = frozenset([ LD_RBD, ]) -LDS_BLOCK = frozenset([LD_LV, LD_DRBD8, LD_BLOCKDEV, LD_RBD]) +LDS_BLOCK = compat.UniqueFrozenset([ + LD_LV, + LD_DRBD8, + LD_BLOCKDEV, + LD_RBD, + ]) # drbd constants DRBD_HMAC_ALG = "md5" @@ -412,7 +452,7 @@ DRBD_B_DISK_DRAIN = "d" DRBD_B_DISK_FLUSH = "f" # Valid barrier combinations: "n" or any non-null subset of "bfd" -DRBD_VALID_BARRIER_OPT = frozenset([ +DRBD_VALID_BARRIER_OPT = compat.UniqueFrozenset([ frozenset([DRBD_B_NONE]), frozenset([DRBD_B_DISK_BARRIERS]), frozenset([DRBD_B_DISK_DRAIN]), @@ -431,19 +471,19 @@ FD_LOOP = "loop" FD_BLKTAP = "blktap" # the set of drbd-like disk types -LDS_DRBD = frozenset([LD_DRBD8]) +LDS_DRBD = compat.UniqueFrozenset([LD_DRBD8]) # disk access mode DISK_RDONLY = "ro" DISK_RDWR = "rw" -DISK_ACCESS_SET = frozenset([DISK_RDONLY, DISK_RDWR]) +DISK_ACCESS_SET = compat.UniqueFrozenset([DISK_RDONLY, DISK_RDWR]) # disk replacement mode REPLACE_DISK_PRI = "replace_on_primary" # replace disks on primary REPLACE_DISK_SEC = "replace_on_secondary" # replace disks on secondary REPLACE_DISK_CHG = "replace_new_secondary" # change secondary node REPLACE_DISK_AUTO = "replace_auto" -REPLACE_MODES = frozenset([ +REPLACE_MODES = compat.UniqueFrozenset([ REPLACE_DISK_PRI, REPLACE_DISK_SEC, REPLACE_DISK_CHG, @@ -453,7 +493,7 @@ REPLACE_MODES = frozenset([ # Instance export mode EXPORT_MODE_LOCAL = "local" EXPORT_MODE_REMOTE = "remote" -EXPORT_MODES = frozenset([ +EXPORT_MODES = compat.UniqueFrozenset([ EXPORT_MODE_LOCAL, EXPORT_MODE_REMOTE, ]) @@ -462,7 +502,7 @@ EXPORT_MODES = frozenset([ INSTANCE_CREATE = "create" INSTANCE_IMPORT = "import" INSTANCE_REMOTE_IMPORT = "remote-import" -INSTANCE_CREATE_MODES = frozenset([ +INSTANCE_CREATE_MODES = compat.UniqueFrozenset([ INSTANCE_CREATE, INSTANCE_IMPORT, INSTANCE_REMOTE_IMPORT, @@ -487,7 +527,7 @@ RIE_CONNECT_RETRIES = 10 #: Give child process up to 5 seconds to exit after sending a signal CHILD_LINGER_TIMEOUT = 5.0 -DISK_TEMPLATES = frozenset([ +DISK_TEMPLATES = compat.UniqueFrozenset([ DT_DISKLESS, DT_PLAIN, DT_DRBD8, @@ -497,7 +537,7 @@ DISK_TEMPLATES = frozenset([ DT_RBD, ]) -FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP]) +FILE_DRIVER = compat.UniqueFrozenset([FD_LOOP, FD_BLKTAP]) # import/export config options INISECT_EXP = "export" @@ -510,7 +550,7 @@ INISECT_OSP = "os" DDM_ADD = "add" DDM_MODIFY = "modify" DDM_REMOVE = "remove" -DDMS_VALUES = frozenset([DDM_ADD, DDM_REMOVE]) +DDMS_VALUES = compat.UniqueFrozenset([DDM_ADD, DDM_REMOVE]) DDMS_VALUES_WITH_MODIFY = (DDMS_VALUES | frozenset([ DDM_MODIFY, ])) @@ -533,7 +573,7 @@ TAG_NODEGROUP = "nodegroup" TAG_NODE = "node" TAG_INSTANCE = "instance" TAG_NETWORK = "network" -VALID_TAG_TYPES = frozenset([ +VALID_TAG_TYPES = compat.UniqueFrozenset([ TAG_CLUSTER, TAG_NODEGROUP, TAG_NODE, @@ -552,7 +592,7 @@ IP6_ADDRESS_LOCALHOST = "::1" IP6_ADDRESS_ANY = "::" IP4_VERSION = 4 IP6_VERSION = 6 -VALID_IP_VERSIONS = frozenset([IP4_VERSION, IP6_VERSION]) +VALID_IP_VERSIONS = compat.UniqueFrozenset([IP4_VERSION, IP6_VERSION]) # for export to htools IP4_FAMILY = socket.AF_INET IP6_FAMILY = socket.AF_INET6 @@ -579,7 +619,11 @@ JOB_IDS_KEY = "jobs" RUNPARTS_RUN, RUNPARTS_ERR) = range(3) -RUNPARTS_STATUS = frozenset([RUNPARTS_SKIP, RUNPARTS_RUN, RUNPARTS_ERR]) +RUNPARTS_STATUS = compat.UniqueFrozenset([ + RUNPARTS_SKIP, + RUNPARTS_RUN, + RUNPARTS_ERR, + ]) # RPC constants (RPC_ENCODING_NONE, @@ -602,7 +646,7 @@ OS_SCRIPT_IMPORT = "import" OS_SCRIPT_EXPORT = "export" OS_SCRIPT_RENAME = "rename" OS_SCRIPT_VERIFY = "verify" -OS_SCRIPTS = frozenset([ +OS_SCRIPTS = compat.UniqueFrozenset([ OS_SCRIPT_CREATE, OS_SCRIPT_IMPORT, OS_SCRIPT_EXPORT, @@ -615,7 +659,7 @@ OS_VARIANTS_FILE = "variants.list" OS_PARAMETERS_FILE = "parameters.list" OS_VALIDATE_PARAMETERS = "parameters" -OS_VALIDATE_CALLS = frozenset([OS_VALIDATE_PARAMETERS]) +OS_VALIDATE_CALLS = compat.UniqueFrozenset([OS_VALIDATE_PARAMETERS]) # ssh constants SSH = "ssh" @@ -626,7 +670,7 @@ INSTANCE_REBOOT_SOFT = "soft" INSTANCE_REBOOT_HARD = "hard" INSTANCE_REBOOT_FULL = "full" -REBOOT_TYPES = frozenset([ +REBOOT_TYPES = compat.UniqueFrozenset([ INSTANCE_REBOOT_SOFT, INSTANCE_REBOOT_HARD, INSTANCE_REBOOT_FULL, @@ -636,7 +680,7 @@ REBOOT_TYPES = frozenset([ INSTANCE_REBOOT_ALLOWED = "reboot" INSTANCE_REBOOT_EXIT = "exit" -REBOOT_BEHAVIORS = frozenset([ +REBOOT_BEHAVIORS = compat.UniqueFrozenset([ INSTANCE_REBOOT_ALLOWED, INSTANCE_REBOOT_EXIT, ]) @@ -646,7 +690,7 @@ VTYPE_MAYBE_STRING = "maybe-string" VTYPE_BOOL = "bool" VTYPE_SIZE = "size" # size, in MiBs VTYPE_INT = "int" -ENFORCEABLE_TYPES = frozenset([ +ENFORCEABLE_TYPES = compat.UniqueFrozenset([ VTYPE_STRING, VTYPE_MAYBE_STRING, VTYPE_BOOL, @@ -797,14 +841,14 @@ HV_MIGRATION_ACTIVE = "active" HV_MIGRATION_FAILED = "failed" HV_MIGRATION_CANCELLED = "cancelled" -HV_MIGRATION_VALID_STATUSES = frozenset([ +HV_MIGRATION_VALID_STATUSES = compat.UniqueFrozenset([ HV_MIGRATION_COMPLETED, HV_MIGRATION_ACTIVE, HV_MIGRATION_FAILED, HV_MIGRATION_CANCELLED, ]) -HV_MIGRATION_FAILED_STATUSES = frozenset([ +HV_MIGRATION_FAILED_STATUSES = compat.UniqueFrozenset([ HV_MIGRATION_FAILED, HV_MIGRATION_CANCELLED, ]) @@ -858,7 +902,7 @@ DSS_PARAMETER_TYPES = { } DSS_PARAMETERS = frozenset(DSS_PARAMETER_TYPES.keys()) -DS_VALID_TYPES = frozenset([LD_LV]) +DS_VALID_TYPES = compat.UniqueFrozenset([LD_LV]) # Backend parameter names BE_MEMORY = "memory" # deprecated and replaced by max and min mem @@ -918,13 +962,13 @@ IPOLICY_DTS = "disk-templates" IPOLICY_VCPU_RATIO = "vcpu-ratio" IPOLICY_SPINDLE_RATIO = "spindle-ratio" -IPOLICY_ISPECS = frozenset([ +IPOLICY_ISPECS = compat.UniqueFrozenset([ ISPECS_MIN, ISPECS_MAX, ISPECS_STD, ]) -IPOLICY_PARAMETERS = frozenset([ +IPOLICY_PARAMETERS = compat.UniqueFrozenset([ IPOLICY_VCPU_RATIO, IPOLICY_SPINDLE_RATIO, ]) @@ -1031,7 +1075,7 @@ OOB_POWER_CYCLE = "power-cycle" OOB_POWER_STATUS = "power-status" OOB_HEALTH = "health" -OOB_COMMANDS = frozenset([ +OOB_COMMANDS = compat.UniqueFrozenset([ OOB_POWER_ON, OOB_POWER_OFF, OOB_POWER_CYCLE, @@ -1049,7 +1093,7 @@ OOB_STATUS_WARNING = "WARNING" OOB_STATUS_CRITICAL = "CRITICAL" OOB_STATUS_UNKNOWN = "UNKNOWN" -OOB_STATUSES = frozenset([ +OOB_STATUSES = compat.UniqueFrozenset([ OOB_STATUS_OK, OOB_STATUS_WARNING, OOB_STATUS_CRITICAL, @@ -1068,7 +1112,11 @@ NIC_MODE_ROUTED = "routed" NIC_MODE_OVS = "openvswitch" NIC_IP_POOL = "pool" -NIC_VALID_MODES = frozenset([NIC_MODE_BRIDGED, NIC_MODE_ROUTED, NIC_MODE_OVS]) +NIC_VALID_MODES = compat.UniqueFrozenset([ + NIC_MODE_BRIDGED, + NIC_MODE_ROUTED, + NIC_MODE_OVS, + ]) RESERVE_ACTION = "reserve" RELEASE_ACTION = "release" @@ -1078,7 +1126,10 @@ RELEASE_ACTION = "release" NETWORK_TYPE_PRIVATE = "private" NETWORK_TYPE_PUBLIC = "public" -NETWORK_VALID_TYPES = frozenset([NETWORK_TYPE_PRIVATE, NETWORK_TYPE_PUBLIC]) +NETWORK_VALID_TYPES = compat.UniqueFrozenset([ + NETWORK_TYPE_PRIVATE, + NETWORK_TYPE_PUBLIC, + ]) NICS_PARAMETER_TYPES = { NIC_MODE: VTYPE_STRING, @@ -1124,7 +1175,7 @@ HT_XEN_HVM = "xen-hvm" HT_KVM = "kvm" HT_CHROOT = "chroot" HT_LXC = "lxc" -HYPER_TYPES = frozenset([ +HYPER_TYPES = compat.UniqueFrozenset([ HT_XEN_PVM, HT_FAKE, HT_XEN_HVM, @@ -1132,7 +1183,7 @@ HYPER_TYPES = frozenset([ HT_CHROOT, HT_LXC, ]) -HTS_REQ_PORT = frozenset([HT_XEN_HVM, HT_KVM]) +HTS_REQ_PORT = compat.UniqueFrozenset([HT_XEN_HVM, HT_KVM]) VNC_BASE_PORT = 5900 VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY @@ -1148,14 +1199,14 @@ HT_NIC_PCNET = "pcnet" HT_NIC_E1000 = "e1000" HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual" -HT_HVM_VALID_NIC_TYPES = frozenset([ +HT_HVM_VALID_NIC_TYPES = compat.UniqueFrozenset([ HT_NIC_RTL8139, HT_NIC_NE2K_PCI, HT_NIC_E1000, HT_NIC_NE2K_ISA, HT_NIC_PARAVIRTUAL, ]) -HT_KVM_VALID_NIC_TYPES = frozenset([ +HT_KVM_VALID_NIC_TYPES = compat.UniqueFrozenset([ HT_NIC_RTL8139, HT_NIC_NE2K_PCI, HT_NIC_NE2K_ISA, @@ -1179,15 +1230,18 @@ HT_CACHE_DEFAULT = "default" HT_CACHE_NONE = "none" HT_CACHE_WTHROUGH = "writethrough" HT_CACHE_WBACK = "writeback" -HT_VALID_CACHE_TYPES = frozenset([ +HT_VALID_CACHE_TYPES = compat.UniqueFrozenset([ HT_CACHE_DEFAULT, HT_CACHE_NONE, HT_CACHE_WTHROUGH, HT_CACHE_WBACK, ]) -HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU]) -HT_KVM_VALID_DISK_TYPES = frozenset([ +HT_HVM_VALID_DISK_TYPES = compat.UniqueFrozenset([ + HT_DISK_PARAVIRTUAL, + HT_DISK_IOEMU, + ]) +HT_KVM_VALID_DISK_TYPES = compat.UniqueFrozenset([ HT_DISK_PARAVIRTUAL, HT_DISK_IDE, HT_DISK_SCSI, @@ -1200,7 +1254,10 @@ HT_KVM_VALID_DISK_TYPES = frozenset([ HT_MOUSE_MOUSE = "mouse" HT_MOUSE_TABLET = "tablet" -HT_KVM_VALID_MOUSE_TYPES = frozenset([HT_MOUSE_MOUSE, HT_MOUSE_TABLET]) +HT_KVM_VALID_MOUSE_TYPES = compat.UniqueFrozenset([ + HT_MOUSE_MOUSE, + HT_MOUSE_TABLET, + ]) # Boot order HT_BO_FLOPPY = "floppy" @@ -1208,7 +1265,7 @@ HT_BO_CDROM = "cdrom" HT_BO_DISK = "disk" HT_BO_NETWORK = "network" -HT_KVM_VALID_BO_TYPES = frozenset([ +HT_KVM_VALID_BO_TYPES = compat.UniqueFrozenset([ HT_BO_FLOPPY, HT_BO_CDROM, HT_BO_DISK, @@ -1223,7 +1280,7 @@ HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ = "glz" HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ = "lz" HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF = "off" -HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS = frozenset([ +HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([ HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ, HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ, HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC, @@ -1237,7 +1294,7 @@ HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO = "auto" HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER = "never" HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS = "always" -HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS = frozenset([ +HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([ HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO, HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER, HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS, @@ -1248,7 +1305,7 @@ HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF = "off" HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL = "all" HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER = "filter" -HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS = frozenset([ +HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS = compat.UniqueFrozenset([ HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF, HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL, HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER, @@ -1259,22 +1316,29 @@ HT_SM_NONE = "none" HT_SM_USER = "user" HT_SM_POOL = "pool" -HT_KVM_VALID_SM_TYPES = frozenset([HT_SM_NONE, HT_SM_USER, HT_SM_POOL]) +HT_KVM_VALID_SM_TYPES = compat.UniqueFrozenset([ + HT_SM_NONE, + HT_SM_USER, + HT_SM_POOL, + ]) # Kvm flag values HT_KVM_ENABLED = "enabled" HT_KVM_DISABLED = "disabled" -HT_KVM_FLAG_VALUES = frozenset([HT_KVM_ENABLED, HT_KVM_DISABLED]) +HT_KVM_FLAG_VALUES = compat.UniqueFrozenset([HT_KVM_ENABLED, HT_KVM_DISABLED]) # Migration type HT_MIGRATION_LIVE = "live" HT_MIGRATION_NONLIVE = "non-live" -HT_MIGRATION_MODES = frozenset([HT_MIGRATION_LIVE, HT_MIGRATION_NONLIVE]) +HT_MIGRATION_MODES = compat.UniqueFrozenset([ + HT_MIGRATION_LIVE, + HT_MIGRATION_NONLIVE, + ]) # Cluster Verify steps VERIFY_NPLUSONE_MEM = "nplusone_mem" -VERIFY_OPTIONAL_CHECKS = frozenset([VERIFY_NPLUSONE_MEM]) +VERIFY_OPTIONAL_CHECKS = compat.UniqueFrozenset([VERIFY_NPLUSONE_MEM]) # Cluster Verify error classes CV_TCLUSTER = "cluster" @@ -1358,7 +1422,7 @@ CV_ENODEUSERSCRIPTS = \ CV_ENODEFILESTORAGEPATHS = \ (CV_TNODE, "ENODEFILESTORAGEPATHS", "Detected bad file storage paths") -CV_ALL_ECODES = frozenset([ +CV_ALL_ECODES = compat.UniqueFrozenset([ CV_ECLUSTERCFG, CV_ECLUSTERCERT, CV_ECLUSTERFILECHECK, @@ -1393,7 +1457,8 @@ CV_ALL_ECODES = frozenset([ CV_ENODEFILESTORAGEPATHS, ]) -CV_ALL_ECODES_STRINGS = frozenset(estr for (_, estr, _) in CV_ALL_ECODES) +CV_ALL_ECODES_STRINGS = \ + compat.UniqueFrozenset(estr for (_, estr, _) in CV_ALL_ECODES) # Node verify constants NV_DRBDHELPER = "drbd-helper" @@ -1428,7 +1493,7 @@ INSTST_NODEDOWN = "ERROR_nodedown" INSTST_WRONGNODE = "ERROR_wrongnode" INSTST_ERRORUP = "ERROR_up" INSTST_ERRORDOWN = "ERROR_down" -INSTST_ALL = frozenset([ +INSTST_ALL = compat.UniqueFrozenset([ INSTST_RUNNING, INSTST_ADMINDOWN, INSTST_ADMINOFFLINE, @@ -1443,7 +1508,7 @@ INSTST_ALL = frozenset([ ADMINST_UP = "up" ADMINST_DOWN = "down" ADMINST_OFFLINE = "offline" -ADMINST_ALL = frozenset([ +ADMINST_ALL = compat.UniqueFrozenset([ ADMINST_UP, ADMINST_DOWN, ADMINST_OFFLINE, @@ -1455,7 +1520,7 @@ NR_MASTER = "M" NR_MCANDIDATE = "C" NR_DRAINED = "D" NR_OFFLINE = "O" -NR_ALL = frozenset([ +NR_ALL = compat.UniqueFrozenset([ NR_REGULAR, NR_MASTER, NR_MCANDIDATE, @@ -1471,7 +1536,7 @@ SSL_CERT_EXPIRATION_ERROR = 7 IALLOCATOR_VERSION = 2 IALLOCATOR_DIR_IN = "in" IALLOCATOR_DIR_OUT = "out" -VALID_IALLOCATOR_DIRECTIONS = frozenset([ +VALID_IALLOCATOR_DIRECTIONS = compat.UniqueFrozenset([ IALLOCATOR_DIR_IN, IALLOCATOR_DIR_OUT, ]) @@ -1480,7 +1545,7 @@ IALLOCATOR_MODE_RELOC = "relocate" IALLOCATOR_MODE_CHG_GROUP = "change-group" IALLOCATOR_MODE_NODE_EVAC = "node-evacuate" IALLOCATOR_MODE_MULTI_ALLOC = "multi-allocate" -VALID_IALLOCATOR_MODES = frozenset([ +VALID_IALLOCATOR_MODES = compat.UniqueFrozenset([ IALLOCATOR_MODE_ALLOC, IALLOCATOR_MODE_RELOC, IALLOCATOR_MODE_CHG_GROUP, @@ -1493,7 +1558,7 @@ DEFAULT_IALLOCATOR_SHORTCUT = "." IALLOCATOR_NEVAC_PRI = "primary-only" IALLOCATOR_NEVAC_SEC = "secondary-only" IALLOCATOR_NEVAC_ALL = "all" -IALLOCATOR_NEVAC_MODES = frozenset([ +IALLOCATOR_NEVAC_MODES = compat.UniqueFrozenset([ IALLOCATOR_NEVAC_PRI, IALLOCATOR_NEVAC_SEC, IALLOCATOR_NEVAC_ALL, @@ -1503,7 +1568,7 @@ IALLOCATOR_NEVAC_MODES = frozenset([ NODE_EVAC_PRI = "primary-only" NODE_EVAC_SEC = "secondary-only" NODE_EVAC_ALL = "all" -NODE_EVAC_MODES = frozenset([ +NODE_EVAC_MODES = compat.UniqueFrozenset([ NODE_EVAC_PRI, NODE_EVAC_SEC, NODE_EVAC_ALL, @@ -1527,17 +1592,17 @@ JOB_STATUS_RUNNING = "running" JOB_STATUS_CANCELED = "canceled" JOB_STATUS_SUCCESS = "success" JOB_STATUS_ERROR = "error" -JOBS_PENDING = frozenset([ +JOBS_PENDING = compat.UniqueFrozenset([ JOB_STATUS_QUEUED, JOB_STATUS_WAITING, JOB_STATUS_CANCELING, ]) -JOBS_FINALIZED = frozenset([ +JOBS_FINALIZED = compat.UniqueFrozenset([ JOB_STATUS_CANCELED, JOB_STATUS_SUCCESS, JOB_STATUS_ERROR, ]) -JOB_STATUS_ALL = frozenset([ +JOB_STATUS_ALL = compat.UniqueFrozenset([ JOB_STATUS_RUNNING, ]) | JOBS_PENDING | JOBS_FINALIZED @@ -1551,7 +1616,7 @@ OP_STATUS_RUNNING = "running" OP_STATUS_CANCELED = "canceled" OP_STATUS_SUCCESS = "success" OP_STATUS_ERROR = "error" -OPS_FINALIZED = frozenset([ +OPS_FINALIZED = compat.UniqueFrozenset([ OP_STATUS_CANCELED, OP_STATUS_SUCCESS, OP_STATUS_ERROR, @@ -1565,7 +1630,7 @@ OP_PRIO_LOW = +10 OP_PRIO_NORMAL = 0 OP_PRIO_HIGH = -10 -OP_PRIO_SUBMIT_VALID = frozenset([ +OP_PRIO_SUBMIT_VALID = compat.UniqueFrozenset([ OP_PRIO_LOW, OP_PRIO_NORMAL, OP_PRIO_HIGH, @@ -1601,7 +1666,7 @@ JQT_EXPANDNAMES = "expandnames" JQT_EXEC = "exec" JQT_LOGMSG = "logmsg" JQT_STARTMSG = "startmsg" -JQT_ALL = frozenset([ +JQT_ALL = compat.UniqueFrozenset([ JQT_EXPANDNAMES, JQT_EXEC, JQT_LOGMSG, @@ -1620,7 +1685,7 @@ QR_EXPORT = "export" QR_NETWORK = "network" #: List of resources which can be queried using L{opcodes.OpQuery} -QR_VIA_OP = frozenset([ +QR_VIA_OP = compat.UniqueFrozenset([ QR_CLUSTER, QR_INSTANCE, QR_NODE, @@ -1649,7 +1714,7 @@ QFT_TIMESTAMP = "timestamp" QFT_OTHER = "other" #: All query field types -QFT_ALL = frozenset([ +QFT_ALL = compat.UniqueFrozenset([ QFT_UNKNOWN, QFT_TEXT, QFT_BOOL, @@ -1674,7 +1739,7 @@ RS_UNAVAIL = 3 #: Resource marked offline RS_OFFLINE = 4 -RS_ALL = frozenset([ +RS_ALL = compat.UniqueFrozenset([ RS_NORMAL, RS_UNKNOWN, RS_NODATA, @@ -1821,7 +1886,7 @@ HVC_DEFAULTS = { }, } -HVC_GLOBALS = frozenset([ +HVC_GLOBALS = compat.UniqueFrozenset([ HV_MIGRATION_PORT, HV_MIGRATION_BANDWIDTH, HV_MIGRATION_MODE, @@ -1971,7 +2036,7 @@ CONFD_REQFIELD_NAME = "0" CONFD_REQFIELD_IP = "1" CONFD_REQFIELD_MNODE_PIP = "2" -CONFD_REQS = frozenset([ +CONFD_REQS = compat.UniqueFrozenset([ CONFD_REQ_PING, CONFD_REQ_NODE_ROLE_BYNAME, CONFD_REQ_NODE_PIP_BY_INSTANCE_IP, @@ -1986,7 +2051,7 @@ CONFD_REPL_STATUS_OK = 0 CONFD_REPL_STATUS_ERROR = 1 CONFD_REPL_STATUS_NOTIMPLEMENTED = 2 -CONFD_REPL_STATUSES = frozenset([ +CONFD_REPL_STATUSES = compat.UniqueFrozenset([ CONFD_REPL_STATUS_OK, CONFD_REPL_STATUS_ERROR, CONFD_REPL_STATUS_NOTIMPLEMENTED, @@ -2080,12 +2145,12 @@ FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN" # SSH key types SSHK_RSA = "rsa" SSHK_DSA = "dsa" -SSHK_ALL = frozenset([SSHK_RSA, SSHK_DSA]) +SSHK_ALL = compat.UniqueFrozenset([SSHK_RSA, SSHK_DSA]) # SSH authorized key types SSHAK_RSA = "ssh-rsa" SSHAK_DSS = "ssh-dss" -SSHAK_ALL = frozenset([SSHAK_RSA, SSHAK_DSS]) +SSHAK_ALL = compat.UniqueFrozenset([SSHAK_RSA, SSHAK_DSS]) # SSH setup SSHS_CLUSTER_NAME = "cluster_name" @@ -2106,4 +2171,4 @@ NDS_SSCONF = "ssconf" NDS_START_NODE_DAEMON = "start_node_daemon" # Do not re-export imported modules -del re, _vcsversion, _autoconf, socket, pathutils +del re, _vcsversion, _autoconf, socket, pathutils, compat diff --git a/lib/errors.py b/lib/errors.py index 486c638ddac62750af9163c8db2d1db621c727e9..3a264c3a27efa222258ecca0d797dbefe713ea3e 100644 --- a/lib/errors.py +++ b/lib/errors.py @@ -19,7 +19,11 @@ # 02110-1301, USA. -"""Ganeti exception handling""" +"""Ganeti exception handling. + +""" + +from ganeti import compat # OpPrereqError failure types @@ -55,7 +59,7 @@ ECODE_FAULT = "internal_error" ECODE_ENVIRON = "environment_error" #: List of all failure types -ECODE_ALL = frozenset([ +ECODE_ALL = compat.UniqueFrozenset([ ECODE_RESOLVER, ECODE_NORES, ECODE_TEMP_NORES, diff --git a/lib/impexpd/__init__.py b/lib/impexpd/__init__.py index 0131cb00f1e8840192be8d56de01ce57076cfb84..dd6e9812a04f16173fbad5435ea88e00c229fd05 100644 --- a/lib/impexpd/__init__.py +++ b/lib/impexpd/__init__.py @@ -36,6 +36,7 @@ from ganeti import constants from ganeti import errors from ganeti import utils from ganeti import netutils +from ganeti import compat #: Used to recognize point at which socat(1) starts to listen on its socket. @@ -56,7 +57,7 @@ SOCAT_LOG_WARNING = "W" SOCAT_LOG_ERROR = "E" SOCAT_LOG_FATAL = "F" -SOCAT_LOG_IGNORE = frozenset([ +SOCAT_LOG_IGNORE = compat.UniqueFrozenset([ SOCAT_LOG_DEBUG, SOCAT_LOG_INFO, SOCAT_LOG_NOTICE, @@ -93,7 +94,8 @@ SOCAT_OPTION_MAXLEN = 400 PROG_DD, PROG_DD_PID, PROG_EXP_SIZE) = range(1, 6) -PROG_ALL = frozenset([ + +PROG_ALL = compat.UniqueFrozenset([ PROG_OTHER, PROG_SOCAT, PROG_DD, diff --git a/lib/locking.py b/lib/locking.py index eb96a709e3c02bcc2b9da3a9e314870bfd57903c..abcf22b2dbe4528180aa520f2d895ea3a99c3343 100644 --- a/lib/locking.py +++ b/lib/locking.py @@ -56,7 +56,7 @@ _LOCK_ACQUIRE_MIN_TIMEOUT = (1.0 / 1000) _LS_ACQUIRE_ALL, _LS_ACQUIRE_OPPORTUNISTIC) = range(1, 4) -_LS_ACQUIRE_MODES = frozenset([ +_LS_ACQUIRE_MODES = compat.UniqueFrozenset([ _LS_ACQUIRE_EXACT, _LS_ACQUIRE_ALL, _LS_ACQUIRE_OPPORTUNISTIC, @@ -1599,7 +1599,7 @@ LEVELS = [ ] # Lock levels which are modifiable -LEVELS_MOD = frozenset([ +LEVELS_MOD = compat.UniqueFrozenset([ LEVEL_NODE_RES, LEVEL_NODE, LEVEL_NODEGROUP, diff --git a/lib/luxi.py b/lib/luxi.py index 2009749f01e18adbe0641be405a2ebfea3d0d0f2..a84085da81b0a587128ad44111e83269b5b528e0 100644 --- a/lib/luxi.py +++ b/lib/luxi.py @@ -35,6 +35,7 @@ import time import errno import logging +from ganeti import compat from ganeti import serializer from ganeti import constants from ganeti import errors @@ -71,7 +72,7 @@ REQ_SET_DRAIN_FLAG = "SetDrainFlag" REQ_SET_WATCHER_PAUSE = "SetWatcherPause" #: List of all LUXI requests -REQ_ALL = frozenset([ +REQ_ALL = compat.UniqueFrozenset([ REQ_ARCHIVE_JOB, REQ_AUTO_ARCHIVE_JOBS, REQ_CANCEL_JOB, diff --git a/lib/mcpu.py b/lib/mcpu.py index 2851f2977047af724eb1842b4cb73ae591753115..a7e705a349e0cf0c481abf5516a8ad78861a3c04 100644 --- a/lib/mcpu.py +++ b/lib/mcpu.py @@ -50,12 +50,12 @@ _LU_PREFIX = "LU" #: LU classes which don't need to acquire the node allocation lock #: (L{locking.NAL}) when they acquire all node or node resource locks -_NODE_ALLOC_WHITELIST = frozenset() +_NODE_ALLOC_WHITELIST = frozenset([]) #: LU classes which don't need to acquire the node allocation lock #: (L{locking.NAL}) in the same mode (shared/exclusive) as the node #: or node resource locks -_NODE_ALLOC_MODE_WHITELIST = frozenset([ +_NODE_ALLOC_MODE_WHITELIST = compat.UniqueFrozenset([ cmdlib.LUBackupExport, cmdlib.LUBackupRemove, cmdlib.LUOobCommand, diff --git a/lib/pathutils.py b/lib/pathutils.py index 8bea0a6e72fc487af25fb2b2fb484ab3076ea971..0334c3de8a1a77dc4924cee0a5985f564b0fb1ce 100644 --- a/lib/pathutils.py +++ b/lib/pathutils.py @@ -24,6 +24,7 @@ """ from ganeti import _autoconf +from ganeti import compat from ganeti import vcluster @@ -130,7 +131,7 @@ JOB_QUEUE_SERIAL_FILE = QUEUE_DIR + "/serial" JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive" JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain" -ALL_CERT_FILES = frozenset([ +ALL_CERT_FILES = compat.UniqueFrozenset([ NODED_CERT_FILE, RAPI_CERT_FILE, SPICE_CERT_FILE, diff --git a/lib/query.py b/lib/query.py index 7efdaa4ec2e4038451198b43a079a01bc61d44e0..3ccc6c2889fb8533cc13f6421f656686e4b6b60d 100644 --- a/lib/query.py +++ b/lib/query.py @@ -137,7 +137,12 @@ _FS_UNAVAIL = object() _FS_OFFLINE = object() #: List of all special status -_FS_ALL = frozenset([_FS_UNKNOWN, _FS_NODATA, _FS_UNAVAIL, _FS_OFFLINE]) +_FS_ALL = compat.UniqueFrozenset([ + _FS_UNKNOWN, + _FS_NODATA, + _FS_UNAVAIL, + _FS_OFFLINE, + ]) #: VType to QFT mapping _VTToQFT = { diff --git a/lib/rapi/__init__.py b/lib/rapi/__init__.py index be08b2a24214c99164076f9e9088faec5fd8d151..18c933c4bfa0c48ff1c5db051618086c36fdc6c3 100644 --- a/lib/rapi/__init__.py +++ b/lib/rapi/__init__.py @@ -1,7 +1,7 @@ # # -# Copyright (C) 2007, 2008 Google Inc. +# Copyright (C) 2007, 2008, 2012 Google Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,10 +20,13 @@ """Ganeti RAPI module""" +from ganeti import compat + + RAPI_ACCESS_WRITE = "write" RAPI_ACCESS_READ = "read" -RAPI_ACCESS_ALL = frozenset([ +RAPI_ACCESS_ALL = compat.UniqueFrozenset([ RAPI_ACCESS_WRITE, RAPI_ACCESS_READ, ]) diff --git a/lib/rapi/baserlib.py b/lib/rapi/baserlib.py index 99a71a00d67e2f308169ee5161575328e6840a5c..15d1e3286097f320c66a42dfc3a9a2df325a46ee 100644 --- a/lib/rapi/baserlib.py +++ b/lib/rapi/baserlib.py @@ -42,7 +42,7 @@ from ganeti import pathutils _DEFAULT = object() #: Supported HTTP methods -_SUPPORTED_METHODS = frozenset([ +_SUPPORTED_METHODS = compat.UniqueFrozenset([ http.HTTP_DELETE, http.HTTP_GET, http.HTTP_POST, diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index c7596c932ed2109da25b2e6168e5a56ea1a82bf1..bfd541563f2daec2dfb3708f6127ecf616b76804 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -155,7 +155,7 @@ _NODE_MIGRATE_REQV1 = "node-migrate-reqv1" # Feature string for node evacuation with LU-generated jobs _NODE_EVAC_RES1 = "node-evac-res1" -ALL_FEATURES = frozenset([ +ALL_FEATURES = compat.UniqueFrozenset([ _INST_CREATE_REQV1, _INST_REINSTALL_REQV1, _NODE_MIGRATE_REQV1, diff --git a/lib/ssconf.py b/lib/ssconf.py index c1f5ce17c970eccdb33d6f49680433a583f824b9..fc794223a41a3487fc986a7578c15a04859884bf 100644 --- a/lib/ssconf.py +++ b/lib/ssconf.py @@ -30,6 +30,7 @@ import sys import errno import logging +from ganeti import compat from ganeti import errors from ganeti import constants from ganeti import utils @@ -40,7 +41,7 @@ from ganeti import pathutils SSCONF_LOCK_TIMEOUT = 10 #: Valid ssconf keys -_VALID_KEYS = frozenset([ +_VALID_KEYS = compat.UniqueFrozenset([ constants.SS_CLUSTER_NAME, constants.SS_CLUSTER_TAGS, constants.SS_FILE_STORAGE_DIR, diff --git a/lib/tools/ensure_dirs.py b/lib/tools/ensure_dirs.py index 11dece3c24a521d7a763f56a00222f774449afe0..95d2fcec6fd8acc111cbe511ec98445689ce620c 100644 --- a/lib/tools/ensure_dirs.py +++ b/lib/tools/ensure_dirs.py @@ -35,13 +35,14 @@ from ganeti import ssconf from ganeti import utils from ganeti import cli from ganeti import pathutils +from ganeti import compat (DIR, FILE, QUEUE_DIR) = range(1, 4) -ALL_TYPES = frozenset([ +ALL_TYPES = compat.UniqueFrozenset([ DIR, FILE, QUEUE_DIR, diff --git a/lib/vcluster.py b/lib/vcluster.py index 0443d113a2ca80757e61e56032b9276cce8d1cbf..ed28cab1772fae4da1a37c4c590ba9005fe831ec 100644 --- a/lib/vcluster.py +++ b/lib/vcluster.py @@ -39,7 +39,7 @@ _ROOTDIR_ENVNAME = "GANETI_ROOTDIR" _HOSTNAME_ENVNAME = "GANETI_HOSTNAME" #: List of paths which shouldn't be virtualized -_VPATH_WHITELIST = frozenset([ +_VPATH_WHITELIST = compat.UniqueFrozenset([ ETC_HOSTS, ]) diff --git a/lib/watcher/__init__.py b/lib/watcher/__init__.py index c60f4a1431c103a53c4de3cf5e9d6b3f9fcd6aca..a4fb16ed31a92ea0a299e01ab0223d244c87a2e1 100644 --- a/lib/watcher/__init__.py +++ b/lib/watcher/__init__.py @@ -59,10 +59,10 @@ from ganeti.watcher import state MAXTRIES = 5 -BAD_STATES = frozenset([ +BAD_STATES = compat.UniqueFrozenset([ constants.INSTST_ERRORDOWN, ]) -HELPLESS_STATES = frozenset([ +HELPLESS_STATES = compat.UniqueFrozenset([ constants.INSTST_NODEDOWN, constants.INSTST_NODEOFFLINE, ]) diff --git a/qa/qa_rapi.py b/qa/qa_rapi.py index dfea6cb36d35de54fa4b2bedc691e5a7984836e0..0401107b77ed226594004b47a405cab34efde512 100644 --- a/qa/qa_rapi.py +++ b/qa/qa_rapi.py @@ -104,13 +104,13 @@ NODE_FIELDS = ("name", "dtotal", "dfree", "mtotal", "mnode", "mfree", "pinst_cnt", "sinst_cnt", "tags") -GROUP_FIELDS = frozenset([ +GROUP_FIELDS = compat.UniqueFrozenset([ "name", "uuid", "alloc_policy", "node_cnt", "node_list", ]) -JOB_FIELDS = frozenset([ +JOB_FIELDS = compat.UniqueFrozenset([ "id", "ops", "status", "summary", "opstatus", "opresult", "oplog", "received_ts", "start_ts", "end_ts", diff --git a/test/docs_unittest.py b/test/docs_unittest.py index 1fa24f5514d6119b1b5ea5e2b201367067a2bfe6..f66b66b1ef61e12fe5d927006c51db7ba208f75c 100755 --- a/test/docs_unittest.py +++ b/test/docs_unittest.py @@ -43,7 +43,7 @@ import testutils VALID_URI_RE = re.compile(r"^[-/a-z0-9]*$") -RAPI_OPCODE_EXCLUDE = frozenset([ +RAPI_OPCODE_EXCLUDE = compat.UniqueFrozenset([ # Not yet implemented opcodes.OpBackupQuery, opcodes.OpBackupRemove, @@ -89,7 +89,7 @@ def _ReadDocFile(filename): class TestHooksDocs(unittest.TestCase): - HOOK_PATH_OK = frozenset([ + HOOK_PATH_OK = compat.UniqueFrozenset([ "master-ip-turnup", "master-ip-turndown", ]) @@ -223,7 +223,7 @@ class TestRapiDocs(unittest.TestCase): prevline = line - prefix_exception = frozenset(["/", "/version", "/2"]) + prefix_exception = compat.UniqueFrozenset(["/", "/version", "/2"]) undocumented = [] used_uris = [] diff --git a/test/ganeti.mcpu_unittest.py b/test/ganeti.mcpu_unittest.py index 33d2d670a119096ee89c30b9fa47ca943de66872..8a997a0311e289955e29463dc5d42c3ddea1dcae 100755 --- a/test/ganeti.mcpu_unittest.py +++ b/test/ganeti.mcpu_unittest.py @@ -25,6 +25,7 @@ import unittest import itertools +from ganeti import compat from ganeti import mcpu from ganeti import opcodes from ganeti import cmdlib @@ -38,7 +39,7 @@ from ganeti.constants import \ import testutils -REQ_BGL_WHITELIST = frozenset([ +REQ_BGL_WHITELIST = compat.UniqueFrozenset([ opcodes.OpClusterActivateMasterIp, opcodes.OpClusterDeactivateMasterIp, opcodes.OpClusterDestroy, diff --git a/test/ganeti.opcodes_unittest.py b/test/ganeti.opcodes_unittest.py index 9cc80ffea08e26365db2da0672d2f49bbcc26137..98ec7694211aa556c7271b65fd591998b9b7436d 100755 --- a/test/ganeti.opcodes_unittest.py +++ b/test/ganeti.opcodes_unittest.py @@ -37,7 +37,7 @@ import testutils #: Unless an opcode is included in the following list it must have a result #: check of some sort -MISSING_RESULT_CHECK = frozenset([ +MISSING_RESULT_CHECK = compat.UniqueFrozenset([ opcodes.OpTestAllocator, opcodes.OpTestDelay, opcodes.OpTestDummy, diff --git a/test/ganeti.rapi.testutils_unittest.py b/test/ganeti.rapi.testutils_unittest.py index 91ba27d66a3615da2c162d7d4e80f272b30927da..a2f3fca15330e3baf1c296814624bae65e244054 100755 --- a/test/ganeti.rapi.testutils_unittest.py +++ b/test/ganeti.rapi.testutils_unittest.py @@ -37,7 +37,7 @@ import ganeti.rapi.client import testutils -KNOWN_UNUSED_LUXI = frozenset([ +KNOWN_UNUSED_LUXI = compat.UniqueFrozenset([ luxi.REQ_SUBMIT_MANY_JOBS, luxi.REQ_ARCHIVE_JOB, luxi.REQ_AUTO_ARCHIVE_JOBS, diff --git a/tools/cluster-merge b/tools/cluster-merge index a066335f408dc98f984df274b82f4ac35b12f875..a4787d4472a6f63819488b0761f3cad22fb6595e 100755 --- a/tools/cluster-merge +++ b/tools/cluster-merge @@ -41,6 +41,7 @@ from ganeti import errors from ganeti import ssh from ganeti import utils from ganeti import pathutils +from ganeti import compat _GROUPS_MERGE = "merge" @@ -134,7 +135,7 @@ class Merger(object): """Handling the merge. """ - RUNNING_STATUSES = frozenset([ + RUNNING_STATUSES = compat.UniqueFrozenset([ constants.INSTST_RUNNING, constants.INSTST_ERRORUP, ]) diff --git a/tools/lvmstrap b/tools/lvmstrap index 2049bcff10584f39e4a7ed088d84b3f00bbbb074..b79dc11492baa8818afa48c92c9b598bd656e427 100755 --- a/tools/lvmstrap +++ b/tools/lvmstrap @@ -68,7 +68,7 @@ SUPPORTED_TYPES = [ ] #: Excluded filesystem types -EXCLUDED_FS = frozenset([ +EXCLUDED_FS = compat.UniqueFrozenset([ "nfs", "nfs4", "autofs",