示例#1
0
 def OP_ATTR_MAP(self):
     return {
         "2": {"1": False, "2": True},
         "7": {
             "1": str(Profile.get_generic_profile_id()),
             "2": str(Profile.get_generic_profile_id()),
             "ne": ["2"],
         },
         "13020": {"1": False, "2": True, "model": ManagedObjectProfile},
         "1403": {"5": "S", "model": AuthProfile},
     }
示例#2
0
 def handler(self):
     self.logger.info("Checking CPEs")
     now = datetime.datetime.now()
     result = self.object.scripts.get_cpe()
     for cpe in result:
         if cpe["status"] != "active":
             self.logger.debug(
                 "[%s|%s] CPE status is '%s'. Skipping",
                 cpe["id"],
                 cpe["global_id"],
                 cpe["status"],
             )
             continue
         mo = self.find_cpe(cpe["global_id"])
         if mo:
             changes = self.update_if_changed(
                 mo,
                 {
                     "controller": self.object,
                     "local_cpe_id": cpe["id"],
                     "global_cpe_id": cpe["global_id"],
                     "address": cpe["ip"],
                     "last_seen": now,
                 },
             )
             if changes:
                 self.logger.info(
                     "[%s|%s] Changed: %s",
                     cpe["id"],
                     cpe["global_id"],
                     ", ".join("%s='%s'" % c for c in changes),
                 )
         else:
             name = cpe.get("name") or "cpe-%s" % cpe["global_id"]
             if ManagedObject.objects.filter(name=name).exists():
                 name = "cpe-%s" % cpe["global_id"]
             self.logger.info("[%s|%s] Created CPE %s", cpe["id"],
                              cpe["global_id"], name)
             mo = ManagedObject(
                 name=name,
                 pool=self.object.pool,
                 profile=Profile.get_by_id(
                     Profile.get_generic_profile_id()),
                 object_profile=self.object.object_profile.cpe_profile
                 or self.object.object_profile,
                 administrative_domain=self.object.administrative_domain,
                 scheme=self.object.scheme,
                 segment=self.object.segment,
                 auth_profile=self.object.object_profile.cpe_auth_profile
                 or self.object.auth_profile,
                 address=cpe.get("ip") or "0.0.0.0",
                 controller=self.object,
                 last_seen=now,
                 local_cpe_id=cpe["id"],
                 global_cpe_id=cpe["global_id"],
             )
             mo.save()
示例#3
0
 def get_profile(self):
     """
     Returns profile for object, or None when not known
     """
     # Get SNMP version and community
     if hasattr(self.object, "_suggest_snmp") and self.object._suggest_snmp:
         # Use guessed community
         # as defined one may be invalid
         snmp_community = self.object._suggest_snmp[0]
         snmp_version = [{
             "snmp_v1_get": SNMP_v1,
             "snmp_v2c_get": SNMP_v2c
         }[self.object._suggest_snmp[2]]]
     else:
         snmp_community = self.object.credentials.snmp_ro
         caps = self.object.get_caps()
         if caps.get("SNMP | v2c") is False or caps.get(
                 "SNMP | v2c") is None:
             snmp_version = [SNMP_v1, SNMP_v2c]
         else:
             snmp_version = [SNMP_v2c, SNMP_v1]
     #
     checker = ProfileChecker(
         self.object.address,
         self.object.pool.name,
         logger=self.logger,
         calling_service="discovery",
         snmp_community=snmp_community,
         snmp_version=snmp_version,
     )
     profile = checker.get_profile()
     if profile:
         return profile
     # Report problem
     self.set_problem(
         alarm_class="Discovery | Guess | Profile",
         message=checker.get_error(),
         fatal=self.object.profile.id == Profile.get_generic_profile_id(),
     )
     self.logger.debug("Result %s" % self.job.problems)
     return None
示例#4
0
def test_generic_profile_id():
    p = Profile.get_generic_profile_id()
    assert p
    assert isinstance(p, bson.ObjectId)