docs: def check(self, radl):
          """Check the features in this system."""
  
          def positive(f, _):
              return f.value >= 0
  
          def check_ansible_host(f, radl0):
              if radl0.get_ansible_by_id(f.value) is None:
                  return False
              return True
  
          mem_units = ["", "B", "K", "M", "G", "KB", "MB", "GB"]
          SIMPLE_FEATURES = {
              "spot": (str, ["YES", "NO"]),
              "image_type": (str, ["VMDK", "QCOW", "QCOW2", "RAW"]),
              "virtual_system_type": (str, system._check_virtual_system_type),
              "price": ((int, float), positive, None),
              "cpu.count": ((int, float), positive, None),
              "cpu.arch": (str, ['I386', 'X86_64']),
              "cpu.performance": ((int, float), positive, ["ECU", "GCEU", "HRZ"]),
              "memory.size": (int, positive, mem_units),
              "disk.0.os.credentials.new.password": (str, check_password),
              "ansible_host": (str, check_ansible_host),
              SoftFeatures.SOFT: (SoftFeatures, lambda x, r: x.check(r))
          }
          self.check_simple(SIMPLE_FEATURES, radl)
  
          net_connections = set()
  
          def check_net_interface_connection(f, radl0):
              if radl0.get_network_by_id(f.value) is None:
                  return False
              net_connections.add(f.prop)
              return True
  
          def check_app(f, x):
              FeaturesApp(f.value.features).check(x)
              return True
  
          NUM_FEATURES = {
              "net_interface": {
                  "connection": (str, check_net_interface_connection),
                  "ip": (str, None),
                  "dns_name": (str, None)},
              "disk": {
                  "image.url": ((str, unicode, list), system._check_disk_image_url),
                  "image.name": (str, None),
                  "type": (str, None),
                  "device": (str, None),
                  "mount_path": (str, None),
                  "fstype": (str, None),
                  "size": (float, positive, mem_units),
                  "free_size": (float, positive, mem_units),
                  "os.name": (str, ["LINUX", "WINDOWS", "MAC OS X"]),
                  "os.flavour": (str, None),
                  "os.version": (str, is_version),
                  "os.credentials.username": (str, None),
                  "os.credentials.password": (str, None),
                  "os.credentials.private_key": (str, None),
                  "os.credentials.public_key": (str, None),
                  "applications": (Features, check_app)
              }
          }
          prefixes = self.check_num(NUM_FEATURES, radl)
  
          # Check all interfaces
          if len(net_connections) != len(prefixes.get("net_interface", set())):
              raise RADLParseException("Some net_interface does not have a connection")
  
          return True