mirror of
https://github.com/bb-Ricardo/netbox-sync.git
synced 2026-01-19 23:40:26 -06:00
adds host/vm tag_relation config option to assign tags via config
refs: #98
This commit is contained in:
@@ -97,6 +97,8 @@ class VMWareHandler(SourceBase):
|
||||
"vm_platform_relation": None,
|
||||
"host_role_relation": None,
|
||||
"vm_role_relation": None,
|
||||
"host_tag_relation": None,
|
||||
"vm_tag_relation": None,
|
||||
"dns_name_lookup": False,
|
||||
"custom_dns_servers": None,
|
||||
"set_primary_ip": "when-undefined",
|
||||
@@ -217,9 +219,7 @@ class VMWareHandler(SourceBase):
|
||||
|
||||
config_settings[setting] = re_compiled
|
||||
|
||||
for relation_option in ["cluster_site_relation", "host_site_relation", "host_tenant_relation",
|
||||
"vm_tenant_relation", "vm_platform_relation",
|
||||
"host_role_relation", "vm_role_relation"]:
|
||||
for relation_option in [x for x in self.settings.keys() if "relation" in x]:
|
||||
|
||||
if config_settings.get(relation_option) is None:
|
||||
continue
|
||||
@@ -1261,6 +1261,15 @@ class VMWareHandler(SourceBase):
|
||||
log.debug2(f"Found a match ({object_regex.pattern}) for {name}, using tenant '{tenant_name}'")
|
||||
break
|
||||
|
||||
# assign host_tag_relation
|
||||
host_tags = list()
|
||||
for tag_relation in grab(self, "host_tag_relation", fallback=list()):
|
||||
object_regex = tag_relation.get("object_regex")
|
||||
if object_regex.match(name):
|
||||
tag_name = tag_relation.get("tag_name")
|
||||
log.debug2(f"Found a match ({object_regex.pattern}) for {name}, using tag '{tag_name}'")
|
||||
host_tags.append(tag_name)
|
||||
|
||||
# prepare host data model
|
||||
host_data = {
|
||||
"name": name,
|
||||
@@ -1284,6 +1293,8 @@ class VMWareHandler(SourceBase):
|
||||
host_data["platform"] = {"name": platform}
|
||||
if tenant_name is not None:
|
||||
host_data["tenant"] = {"name": tenant_name}
|
||||
if len(host_tags) > 0:
|
||||
host_data["tags"] = host_tags
|
||||
|
||||
# iterate over hosts virtual switches, needed to enrich data on physical interfaces
|
||||
self.network_data["vswitch"][name] = dict()
|
||||
@@ -1734,6 +1745,15 @@ class VMWareHandler(SourceBase):
|
||||
log.debug2(f"Found a match ({object_regex.pattern}) for {name}, using tenant '{tenant_name}'")
|
||||
break
|
||||
|
||||
# assign vm_tag_relation
|
||||
vm_tags = list()
|
||||
for tag_relation in grab(self, "vm_tag_relation", fallback=list()):
|
||||
object_regex = tag_relation.get("object_regex")
|
||||
if object_regex.match(name):
|
||||
tag_name = tag_relation.get("tag_name")
|
||||
log.debug2(f"Found a match ({object_regex.pattern}) for {name}, using tag '{tag_name}'")
|
||||
vm_tags.append(tag_name)
|
||||
|
||||
vm_data = {
|
||||
"name": name,
|
||||
"cluster": {"name": cluster_name},
|
||||
@@ -1749,6 +1769,8 @@ class VMWareHandler(SourceBase):
|
||||
vm_data["comments"] = annotation
|
||||
if tenant_name is not None:
|
||||
vm_data["tenant"] = {"name": tenant_name}
|
||||
if len(vm_tags) > 0:
|
||||
vm_data["tags"] = vm_tags
|
||||
|
||||
vm_primary_ip4 = None
|
||||
vm_primary_ip6 = None
|
||||
|
||||
@@ -176,6 +176,13 @@ permitted_subnets = 172.16.0.0/12, 10.0.0.0/8, 192.168.0.0/16, fd00::/8
|
||||
#host_role_relation = .* = Server
|
||||
#vm_role_relation = .* = Server
|
||||
|
||||
# Define NetBox tags which are assigned to a host or VM. This is done
|
||||
# with a comma separated key = value list.
|
||||
# key: defines a hosts/VM name as regex
|
||||
# value: defines the NetBox tag (use quotes if name contains commas)
|
||||
#host_tag_relation = esxi300.* = Infrastructure
|
||||
#vm_tag_relation = grafana.* = Infrastructure
|
||||
|
||||
# Try to find existing host based on serial number. This can cause issues with blade centers if VMWare does not
|
||||
# report the blades serial number properly.
|
||||
#match_host_by_serial = True
|
||||
|
||||
Reference in New Issue
Block a user