def forwards(self): db.add_column( "sa_managedobjectselector", "filter_service_group", DocumentReferenceField("inv.ResourceGroup", null=True, blank=True)) db.add_column( "sa_managedobjectselector", "filter_client_group", DocumentReferenceField("inv.ResourceGroup", null=True, blank=True))
def forwards(self): db.add_column( "sa_managedobjectprofile", "prefix_profile_interface", DocumentReferenceField("ip.PrefixProfile", null=True, blank=True)) db.add_column( "sa_managedobjectprofile", "prefix_profile_neighbor", DocumentReferenceField("ip.PrefixProfile", null=True, blank=True))
def migrate(self): self.db.add_column( "sa_managedobjectprofile", "enable_box_discovery_address_management", models.BooleanField(default=False), ) self.db.add_column( "sa_managedobjectprofile", "enable_box_discovery_address_dhcp", models.BooleanField(default=False), ) self.db.add_column( "sa_managedobjectprofile", "address_profile_interface", DocumentReferenceField("ip.AddressProfile", null=True, blank=True), ) self.db.add_column( "sa_managedobjectprofile", "address_profile_management", DocumentReferenceField("ip.AddressProfile", null=True, blank=True), ) self.db.add_column( "sa_managedobjectprofile", "address_profile_neighbor", DocumentReferenceField("ip.AddressProfile", null=True, blank=True), ) self.db.add_column( "sa_managedobjectprofile", "address_profile_dhcp", DocumentReferenceField("ip.AddressProfile", null=True, blank=True), )
def migrate(self): # Get profile record mappings pcoll = self.mongo_db["noc.profiles"] pmap = {} # name -> id for d in pcoll.find({}, {"_id": 1, "name": 1}): pmap[d["name"]] = str(d["_id"]) # UPDATE profiles s_profiles = list( self.db.execute( "SELECT DISTINCT filter_profile FROM sa_managedobjectselector") ) for (p, ) in s_profiles: if not p: continue elif p not in pmap: # If migrations on 0150_managed_object_profile continue self.db.execute( """ UPDATE sa_managedobjectselector SET filter_profile = %s WHERE filter_profile = %s """, [pmap[p], p], ) # Alter .filter_profile column self.db.execute(""" ALTER TABLE sa_managedobjectselector ALTER filter_profile TYPE CHAR(24) USING SUBSTRING(\"filter_profile\", 1, 24) """) # Create .filter_vendor field self.db.add_column( "sa_managedobjectselector", "filter_vendor", DocumentReferenceField("inv.Vendor", null=True, blank=True), ) # Create .filter_platform field self.db.add_column( "sa_managedobjectselector", "filter_platform", DocumentReferenceField("inv.Vendor", null=True, blank=True), ) # Create .filter_version field self.db.add_column( "sa_managedobjectselector", "filter_version", DocumentReferenceField("inv.Firmware", null=True, blank=True), ) # Create .filter_tt_system field self.db.add_column( "sa_managedobjectselector", "filter_tt_system", DocumentReferenceField("inv.Firmware", null=True, blank=True), )
def migrate(self): self.db.add_column( "sa_managedobjectselector", "filter_service_group", DocumentReferenceField("inv.ResourceGroup", null=True, blank=True), ) self.db.add_column( "sa_managedobjectselector", "filter_client_group", DocumentReferenceField("inv.ResourceGroup", null=True, blank=True), )
def migrate(self): self.db.add_column( "sa_managedobjectprofile", "prefix_profile_interface", DocumentReferenceField("ip.PrefixProfile", null=True, blank=True), ) self.db.add_column( "sa_managedobjectprofile", "prefix_profile_neighbor", DocumentReferenceField("ip.PrefixProfile", null=True, blank=True), )
def forwards(self): db.execute(""" ALTER TABLE sa_managedobjectprofile RENAME enable_box_discovery_vrf TO enable_box_discovery_vpn_interface""") db.add_column("sa_managedobjectprofile", "enable_box_discovery_vpn_mpls", models.BooleanField(default=False)) db.add_column( "sa_managedobjectprofile", "vpn_profile_interface", DocumentReferenceField("vc.VPNProfile", null=True, blank=True)) db.add_column( "sa_managedobjectprofile", "vpn_profile_mpls", DocumentReferenceField("vc.VPNProfile", null=True, blank=True))
class Project(NOCModel): """ Projects are used to track investment projects expenses and profits """ class Meta(object): verbose_name = "Project" verbose_name_plural = "Projects" app_label = "project" db_table = "project_project" code = models.CharField("Code", max_length=256, unique=True) name = models.CharField("Name", max_length=256) description = models.TextField("Description", null=True, blank=True) shape_overlay_glyph = DocumentReferenceField(Glyph, null=True, blank=True) shape_overlay_position = models.CharField( "S.O. Position", max_length=2, choices=[(x.value, x.value) for x in ShapeOverlayPosition], null=True, blank=True, ) shape_overlay_form = models.CharField( "S.O. Form", max_length=1, choices=[(x.value, x.value) for x in ShapeOverlayForm], null=True, blank=True, ) # Integration with external NRI systems # Reference to remote system object has been imported from remote_system = DocumentReferenceField(RemoteSystem, null=True, blank=True) # Object id in remote system remote_id = models.CharField(max_length=64, null=True, blank=True) # Object id in BI bi_id = models.BigIntegerField(unique=True) _id_cache = cachetools.TTLCache(100, ttl=60) def __str__(self): return self.code @classmethod @cachetools.cachedmethod(operator.attrgetter("_id_cache"), lock=lambda x: id_lock) def get_by_id(cls, id): p = Project.objects.filter(id=id)[:1] if p: return p[0] return None
def migrate(self): Template = self.db.mock_model(model_name="Template", db_table="main_template") self.db.add_column( "sa_managedobjectprofile", "beef_storage", DocumentReferenceField("main.ExtStorage", null=True, blank=True), ) self.db.add_column( "sa_managedobjectprofile", "beef_path_template", models.ForeignKey( Template, verbose_name="Config Mirror Template", blank=True, null=True, on_delete=models.CASCADE, ), ) self.db.add_column( "sa_managedobjectprofile", "beef_policy", models.CharField( "Beef Policy", max_length=1, choices=[("D", "Disable"), ("A", "Always"), ("C", "Change")], default="D", ), )
def forwards(self): # ManagedObject profile db.drop_column("sa_managedobjectprofile", "sync_ipam") db.drop_column("sa_managedobjectprofile", "fqdn_template") db.add_column( "sa_managedobjectprofile", "fqdn_suffix", models.CharField("FQDN suffix", max_length=256, null=True, blank=True)) db.add_column( "sa_managedobjectprofile", "address_resolution_policy", models.CharField("Address Resolution Policy", choices=[("D", "Disabled"), ("O", "Once"), ("E", "Enabled")], max_length=1, null=False, blank=False, default="D")) db.add_column( "sa_managedobjectprofile", "resolver_handler", DocumentReferenceField("main.Handler", null=True, blank=True)) # Managed Object db.add_column( "sa_managedobject", "fqdn", models.CharField("FQDN", max_length=256, null=True, blank=True)) db.add_column( "sa_managedobject", "address_resolution_policy", models.CharField("Address Resolution Policy", choices=[("P", "Profile"), ("D", "Disabled"), ("O", "Once"), ("E", "Enabled")], max_length=1, null=False, blank=False, default="P"))
def migrate(self): # Get profile record mappings pcoll = self.mongo_db["noc.profiles"] pmap = {} # name -> id for d in pcoll.find({}, {"_id": 1, "name": 1}): pmap[d["name"]] = str(d["_id"]) # Create .profile column self.db.add_column( "peer_peeringpoint", "profile", DocumentReferenceField("sa.Profile", null=True, blank=True), ) # Update profiles for (p, ) in list( self.db.execute( "SELECT DISTINCT profile_name FROM peer_peeringpoint")): self.db.execute( """ UPDATE peer_peeringpoint SET profile = %s WHERE profile_name = %s """, [pmap[p], p], ) # Set profile as not null self.db.execute( "ALTER TABLE peer_peeringpoint ALTER profile SET NOT NULL") # Drop legacy profile_name self.db.delete_column("peer_peeringpoint", "profile_name")
def forwards(self): Template = db.mock_model(model_name='Template', db_table='main_template', db_tablespace='', pk_field_name='id', pk_field_type=models.AutoField) db.add_column( "sa_managedobjectprofile", "config_mirror_storage", DocumentReferenceField("main.ExtStorage", null=True, blank=True)) db.add_column( "sa_managedobjectprofile", "config_mirror_template", models.ForeignKey(Template, verbose_name="Config Mirror Template", blank=True, null=True)) db.add_column( "sa_managedobjectprofile", "config_mirror_policy", models.CharField("Config Mirror Policy", max_length=1, choices=[("D", "Disable"), ("A", "Always"), ("C", "Change")], default="C")) db.add_column( "sa_managedobjectprofile", "config_validation_policy", models.CharField("Config Validation Policy", max_length=1, choices=[("D", "Disable"), ("A", "Always"), ("C", "Change")], default="C"))
def migrate(self): self.db.add_column( "sa_managedobjectprofile", "object_validation_policy", DocumentReferenceField("cm.ObjectValidationPolicy", null=True, blank=True), )
def migrate(self): self.db.add_column( "sa_administrativedomain", "default_pool", DocumentReferenceField("self", null=True, blank=True), ) self.db.create_index("sa_administrativedomain", ["default_pool"], unique=False)
def migrate(self): self.db.add_column( "sa_managedobjectselector", "filter_pool", DocumentReferenceField("self", null=True, blank=True), ) self.db.create_index("sa_managedobjectselector", ["filter_pool"], unique=False)
def migrate(self): mdb = self.mongo_db # Get default prefix profile coll = mdb["prefixprofiles"] d = coll.find_one({"name": "default"}) default_prefix_profile = d["_id"] # coll = mdb["vpnprofiles"] default_id = bson.ObjectId() wf = bson.ObjectId("5a01d980b6f529000100d37a") profiles = [ { "_id": default_id, "name": "default VRF", "type": "vrf", "description": "Default VRF profile", "workflow": wf, "default_prefix_profile": default_prefix_profile, "bi_id": bson.int64.Int64(bi_hash(default_id)), } ] # Convert styles style_profiles = {None: default_id} for (style_id,) in self.db.execute("SELECT DISTINCT style_id FROM ip_vrf"): if not style_id: continue p_id = bson.ObjectId() p = { "_id": p_id, "name": "VRF Style %s" % style_id, "type": "vrf", "description": "Auto-converted for VRF style %s" % style_id, "workflow": wf, "style": style_id, "default_prefix_profile": default_prefix_profile, "bi_id": bson.int64.Int64(bi_hash(p_id)), } style_profiles[style_id] = p_id profiles += [p] # Insert profiles to database coll.insert_many(profiles) # Create Prefix.profile field self.db.add_column( "ip_vrf", "profile", DocumentReferenceField("vc.VPNProfile", null=True, blank=True) ) # Migrate profile styles for style_id in style_profiles: if style_id: cond = "style_id = %s" % style_id else: cond = "style_id IS NULL" self.db.execute( "UPDATE ip_vrf SET profile = %%s WHERE %s" % cond, [str(style_profiles[style_id])] ) # Make Prefix.profile not nullable self.db.execute("ALTER TABLE ip_vrf ALTER profile SET NOT NULL") # Drop Prefix.style self.db.delete_column("ip_vrf", "style_id")
def forwards(self): db.add_column("sa_managedobject", "service", DocumentReferenceField( "self", null=True, blank=True ) ) db.create_index( "sa_managedobject", ["service"], unique=False, db_tablespace="")
def migrate(self): self.db.add_column( "sa_managedobjectprofile", "enable_box_discovery_ifdesc", models.BooleanField(default=False), ) self.db.add_column( "sa_managedobjectprofile", "ifdesc_patterns", DocumentReferenceField("inv.IfDescPatterns", null=True, blank=True), ) self.db.add_column( "sa_managedobjectprofile", "ifdesc_handler", DocumentReferenceField("main.Handler", null=True, blank=True), ) self.db.add_column("sa_managedobjectprofile", "ifdesc_symmetric", models.BooleanField(default=False))
def migrate(self): # Project self.db.add_column( "project_project", "remote_system", DocumentReferenceField("self", null=True, blank=True), ) self.db.add_column( "project_project", "remote_id", models.CharField(max_length=64, null=True, blank=True)) self.db.add_column("project_project", "bi_id", models.BigIntegerField(null=True, blank=True))
def migrate(self): Template = self.db.mock_model(model_name="Template", db_table="main_template") self.db.add_column( "sa_administrativedomain", "bioseg_floating_name_template", models.ForeignKey(Template, null=True, blank=True, on_delete=models.CASCADE), ) self.db.add_column( "sa_administrativedomain", "bioseg_floating_parent_segment", DocumentReferenceField("inv.NetworkSegment", null=True, blank=True), )
def migrate(self): coll = self.mongo_db["addressprofiles"] default_id = bson.ObjectId() wf = bson.ObjectId("5a01d980b6f529000100d37a") profiles = [ { "_id": default_id, "name": "default", "description": "Default address profile", "workflow": wf, "bi_id": bson.int64.Int64(bi_hash(default_id)), } ] # Convert styles style_profiles = {} for (style_id,) in self.db.execute("SELECT DISTINCT style_id FROM ip_address"): if not style_id: style_profiles[None] = default_id continue p_id = bson.ObjectId() p = { "_id": p_id, "name": "Style %s" % style_id, "description": "Auto-converted for style %s" % style_id, "workflow": wf, "style": style_id, "bi_id": bson.int64.Int64(bi_hash(p_id)), } style_profiles[style_id] = p_id profiles += [p] # Insert profiles to database coll.insert_many(profiles) # Create Prefix.profile field self.db.add_column( "ip_address", "profile", DocumentReferenceField("ip.AddressProfile", null=True, blank=True), ) # Migrate profile styles for style_id in style_profiles: if style_id: cond = "style_id = %s" % style_id else: cond = "style_id IS NULL" self.db.execute( "UPDATE ip_address SET profile = %%s WHERE %s" % cond, [str(style_profiles[style_id])], ) # Make Prefix.profile not nullable self.db.execute("ALTER TABLE ip_address ALTER profile SET NOT NULL") # Drop Prefix.style self.db.delete_column("ip_address", "style_id")
def migrate(self): # ManagedObjectProfile self.db.add_column( "sa_managedobjectprofile", "shape_overlay_glyph", DocumentReferenceField("main.Glyph", null=True, blank=True), ) self.db.add_column( "sa_managedobjectprofile", "shape_overlay_position", models.CharField("S.O. Position", max_length=2, null=True, blank=True), ) self.db.add_column( "sa_managedobjectprofile", "shape_overlay_form", models.CharField("S.O. Form", max_length=1, null=True, blank=True), ) # ManagedObject self.db.add_column( "sa_managedobject", "shape_overlay_glyph", DocumentReferenceField("main.Glyph", null=True, blank=True), ) self.db.add_column( "sa_managedobject", "shape_overlay_position", models.CharField("S.O. Position", max_length=2, null=True, blank=True), ) self.db.add_column( "sa_managedobject", "shape_overlay_form", models.CharField("S.O. Form", max_length=1, null=True, blank=True), )
def migrate(self): # Select profile names profiles = set(r[0] for r in self.db.execute( "SELECT DISTINCT profile_name FROM sa_managedobject")) # Create profile records pcoll = self.mongo_db["noc.profiles"] for p in profiles: u = uuid.uuid4() pcoll.update_many({"name": p}, { "$set": { "name": p }, "$setOnInsert": { "uuid": u } }, upsert=True) # Get profile record mappings pmap = {} # name -> id for d in pcoll.find({}, {"_id": 1, "name": 1}): pmap[d["name"]] = str(d["_id"]) # Create .profile field self.db.add_column( "sa_managedobject", "profile", DocumentReferenceField("inv.Profile", null=True, blank=True), ) # Migrate profile data for p in profiles: self.db.execute( """ UPDATE sa_managedobject SET profile = %s WHERE profile_name = %s """, [pmap[p], p], ) self.db.execute( """ UPDATE sa_managedobjectselector SET filter_profile = %s WHERE filter_profile = %s """, [pmap[p], p], ) # Set profile as not null self.db.execute( "ALTER TABLE sa_managedobject ALTER profile SET NOT NULL") # Drop legacy profile_name self.db.delete_column("sa_managedobject", "profile_name")
def migrate(self): Template = self.db.mock_model(model_name="Template", db_table="main_template") self.db.add_column( "sa_managedobjectprofile", "config_download_storage", DocumentReferenceField("main.ExtStorage", null=True, blank=True), ) self.db.add_column( "sa_managedobjectprofile", "config_download_template", models.ForeignKey( Template, verbose_name="Config download Template", blank=True, null=True, on_delete=models.CASCADE, ), ) self.db.add_column( "sa_managedobjectprofile", "config_policy", models.CharField( "Config download Policy", max_length=1, choices=[ ("s", "Script"), ("S", "Script, Download"), ("D", "Download, Script"), ("d", "Download"), ], default="s", ), ) self.db.add_column( "sa_managedobject", "config_policy", models.CharField( "Config download Policy", max_length=1, choices=[ ("P", "Profile"), ("s", "Script"), ("S", "Script, Download"), ("D", "Download, Script"), ("d", "Download"), ], default="P", ), )
def forwards(self): # Administrative Domain db.add_column("sa_administrativedomain", "remote_system", DocumentReferenceField("self", null=True, blank=True)) db.add_column("sa_administrativedomain", "remote_id", models.CharField(max_length=64, null=True, blank=True)) db.add_column("sa_administrativedomain", "bi_id", models.IntegerField(null=True, blank=True)) # AuthProfile db.add_column("sa_authprofile", "remote_system", DocumentReferenceField("self", null=True, blank=True)) db.add_column("sa_authprofile", "remote_id", models.CharField(max_length=64, null=True, blank=True)) db.add_column("sa_authprofile", "bi_id", models.IntegerField(null=True, blank=True)) db.add_column("sa_authprofile", "tags", TagsField("Tags", null=True, blank=True)) # ManagedObject db.add_column("sa_managedobject", "remote_system", DocumentReferenceField("self", null=True, blank=True)) db.add_column("sa_managedobject", "remote_id", models.CharField(max_length=64, null=True, blank=True)) db.add_column("sa_managedobject", "bi_id", models.IntegerField(null=True, blank=True)) db.add_column( "sa_managedobject", "escalation_policy", models.CharField("Escalation Policy", max_length=1, choices=[("E", "Enable"), ("D", "Disable"), ("P", "From Profile")], default="P")) db.add_column("sa_managedobject", "tt_system", DocumentReferenceField("self", null=True, blank=True)) db.add_column("sa_managedobject", "tt_system_id", models.CharField(max_length=64, null=True, blank=True)) # ManagedObjectProfile db.add_column("sa_managedobjectprofile", "remote_system", DocumentReferenceField("self", null=True, blank=True)) db.add_column("sa_managedobjectprofile", "remote_id", models.CharField(max_length=64, null=True, blank=True)) db.add_column("sa_managedobjectprofile", "bi_id", models.IntegerField(null=True, blank=True)) db.add_column( "sa_managedobjectprofile", "escalation_policy", models.CharField("Escalation Policy", max_length=1, choices=[("E", "Enable"), ("D", "Disable")], default="E")) # TerminationGroup db.add_column("sa_terminationgroup", "remote_system", DocumentReferenceField("self", null=True, blank=True)) db.add_column("sa_terminationgroup", "remote_id", models.CharField(max_length=64, null=True, blank=True)) db.add_column("sa_terminationgroup", "bi_id", models.IntegerField(null=True, blank=True))
def forwards(self): # # Vendor # # Select vendors vendors = set(r[0] for r in db.execute( "SELECT DISTINCT value FROM sa_managedobjectattribute WHERE key = 'vendor'" )) # Create vendors records pcoll = get_db()["noc.vendors"] for v in vendors: u = uuid.uuid4() vc = v.upper() pcoll.update({"code": vc}, { "$set": { "code": vc }, "$setOnInsert": { "name": v, "uuid": u } }, upsert=True) # Get vendor record mappings vmap = {} # name -> id for d in pcoll.find({}, {"_id": 1, "code": 1}): vmap[d["code"]] = str(d["_id"]) # Create .vendor field db.add_column( "sa_managedobject", "vendor", DocumentReferenceField("inv.Vendor", null=True, blank=True)) # Migrate profile data for v in vendors: db.execute( """ UPDATE sa_managedobject SET vendor = %s WHERE id IN ( SELECT managed_object_id FROM sa_managedobjectattribute WHERE key = 'vendor' AND value = %s ) """, [vmap[v.upper()], v])
def migrate(self): # Create default profile P_ID = "5ae04bcb45ce8300f385edb2" pcoll = self.mongo_db["asprofiles"] pcoll.insert_one({ "_id": bson.ObjectId(P_ID), "name": "default", "description": "Default Profile" }) # Create AS.profile self.db.add_column( "peer_as", "profile", DocumentReferenceField("peer.ASProfile", null=True, blank=True)) # Update profiles self.db.execute("UPDATE peer_as SET profile = %s", [P_ID]) # Set profile not null self.db.execute("ALTER TABLE peer_as ALTER profile SET NOT NULL")
def forwards(self): coll = get_db()["prefixprofiles"] default_id = bson.ObjectId() wf = bson.ObjectId("5a01d980b6f529000100d37a") profiles = [{ "_id": default_id, "name": "default", "description": "Default prefix profile", "workflow": wf, "bi_id": bson.int64.Int64(bi_hash(default_id)) }] # Convert styles style_profiles = {} for style_id, in db.execute("SELECT DISTINCT style_id FROM ip_prefix"): if not style_id: style_profiles[None] = default_id continue p_id = bson.ObjectId() p = { "_id": p_id, "name": "Style %s" % style_id, "description": "Auto-converted for style %s" % style_id, "workflow": wf, "style": style_id, "bi_id": bson.int64.Int64(bi_hash(p_id)) } style_profiles[style_id] = p_id profiles += [p] # Insert profiles to database coll.insert(profiles) # Create Prefix.profile field db.add_column( "ip_prefix", "profile", DocumentReferenceField("ip.PrefixProfile", null=True, blank=True)) # Migrate profile styles for style_id in style_profiles: if style_id: cond = "style_id = %s" % style_id else: cond = "style_id IS NULL" db.execute("UPDATE ip_prefix SET profile = %%s WHERE %s" % cond, [str(style_profiles[style_id])]) # Make Prefix.profile not nullable db.execute("ALTER TABLE ip_prefix ALTER profile SET NOT NULL") # Drop Prefix.style db.drop_column("ip_prefix", "style_id")
def migrate(self): p_id = bson.ObjectId() self.mongo_db["capsprofiles"].insert_one({ "_id": p_id, "name": "default", "description": "Default Caps Profile", "enable_snmp": True, "enable_snmp_v1": True, "enable_snmp_v2c": True, "enable_l2": True, "bfd_policy": "E", "cdp_policy": "E", "fdp_policy": "E", "huawei_ndp_policy": "E", "lacp_policy": "E", "lldp_policy": "E", "oam_policy": "E", "rep_policy": "E", "stp_policy": "E", "udld_policy": "E", "enable_l3": True, "hsrp_policy": "E", "vrrp_policy": "E", "vrrpv3_policy": "E", "bgp_policy": "E", "ospf_policy": "E", "ospfv3_policy": "E", "isis_policy": "E", "ldp_policy": "E", "rsvp_policy": "E", }) # Create MOP.caps_profile field self.db.add_column( "sa_managedobjectprofile", "caps_profile", DocumentReferenceField("sa.CapsProfile", null=True, blank=True), ) # Set default caps profile self.db.execute("UPDATE sa_managedobjectprofile SET caps_profile = %s", [str(p_id)]) # Make field required self.db.execute( "ALTER TABLE sa_managedobjectprofile ALTER caps_profile SET NOT NULL" )
def migrate(self): self.db.add_column( "project_project", "shape_overlay_glyph", DocumentReferenceField("main.Glyph", null=True, blank=True), ) self.db.add_column( "project_project", "shape_overlay_position", models.CharField("S.O. Position", max_length=2, null=True, blank=True), ) self.db.add_column( "project_project", "shape_overlay_form", models.CharField("S.O. Form", max_length=1, null=True, blank=True), )