Beispiel #1
0
if power_panels is None:
    sys.exit()

required_assocs = {"site": (Site, "name")}

optional_assocs = {"rack_group": (RackGroup, "name")}

for params in power_panels:
    custom_field_data = pop_custom_fields(params)

    for assoc, details in required_assocs.items():
        model, field = details
        query = {field: params.pop(assoc)}

        params[assoc] = model.objects.get(**query)

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}

            params[assoc] = model.objects.get(**query)

    power_panel, created = PowerPanel.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(power_panel, custom_field_data)

        print("⚡ Created Power Panel", power_panel.site, power_panel.name)
Beispiel #2
0
required_assocs = {"site": (Site, "name")}

optional_assocs = {
    "role": (RackRole, "name"),
    "tenant": (Tenant, "name"),
    "location": (Location, "name"),
}

for params in racks:
    custom_field_data = pop_custom_fields(params)

    for assoc, details in required_assocs.items():
        model, field = details
        query = {field: params.pop(assoc)}

        params[assoc] = model.objects.get(**query)

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}

            params[assoc] = model.objects.get(**query)

    rack, created = Rack.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(rack, custom_field_data)

        print("🔳 Created rack", rack.site, rack.name)
Beispiel #3
0
required_assocs = {"type": (ClusterType, "name")}

optional_assocs = {
    "site": (Site, "name"),
    "group": (ClusterGroup, "name"),
    "tenant": (Tenant, "name"),
}

for params in clusters:
    custom_field_data = pop_custom_fields(params)

    for assoc, details in required_assocs.items():
        model, field = details
        query = {field: params.pop(assoc)}

        params[assoc] = model.objects.get(**query)

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}

            params[assoc] = model.objects.get(**query)

    cluster, created = Cluster.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(cluster, custom_field_data)

        print("🗄️ Created cluster", cluster.name)
import sys

from dcim.models import Device, Interface
from startup_script_utils import load_yaml, pop_custom_fields, set_custom_fields_values

interfaces = load_yaml("/opt/netbox/initializers/dcim_interfaces.yml")

if interfaces is None:
    sys.exit()

required_assocs = {"device": (Device, "name")}

for params in interfaces:
    custom_field_data = pop_custom_fields(params)

    for assoc, details in required_assocs.items():
        model, field = details
        query = {field: params.pop(assoc)}

        params[assoc] = model.objects.get(**query)

    interface, created = Interface.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(interface, custom_field_data)

        print("🧷 Created interface", interface.name, interface.device.name)
Beispiel #5
0
    "platform": (Platform, "name"),
    "role": (DeviceRole, "name"),
}

for params in virtual_machines:
    custom_field_data = pop_custom_fields(params)

    # primary ips are handled later in `270_primary_ips.py`
    params.pop("primary_ip4", None)
    params.pop("primary_ip6", None)

    for assoc, details in required_assocs.items():
        model, field = details
        query = {field: params.pop(assoc)}

        params[assoc] = model.objects.get(**query)

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}

            params[assoc] = model.objects.get(**query)

    virtual_machine, created = VirtualMachine.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(virtual_machine, custom_field_data)

        print("ЁЯЦея╕П Created virtual machine", virtual_machine.name)
required_assocs = {"rir": (RIR, "name")}

optional_assocs = {
    "tenant": (Tenant, "name"),
}

for params in aggregates:
    custom_field_data = pop_custom_fields(params)

    params["prefix"] = IPNetwork(params["prefix"])

    for assoc, details in required_assocs.items():
        model, field = details
        query = {field: params.pop(assoc)}

        params[assoc] = model.objects.get(**query)

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}

            params[assoc] = model.objects.get(**query)

    aggregate, created = Aggregate.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(aggregate, custom_field_data)

        print("🗞️ Created Aggregate", aggregate.prefix)
Beispiel #7
0
vlans = load_yaml("/opt/netbox/initializers/vlans.yml")

if vlans is None:
    sys.exit()

optional_assocs = {
    "site": (Site, "name"),
    "tenant": (Tenant, "name"),
    "tenant_group": (TenantGroup, "name"),
    "group": (VLANGroup, "name"),
    "role": (Role, "name"),
}

for params in vlans:
    custom_field_data = pop_custom_fields(params)

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}

            params[assoc] = model.objects.get(**query)

    vlan, created = VLAN.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(vlan, custom_field_data)

        print("🏠 Created VLAN", vlan.name)
Beispiel #8
0
    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            if assoc == "interface":
                if vm:
                    vm_id = VirtualMachine.objects.get(name=vm).id
                    query = {
                        "name": params.pop(assoc),
                        "virtual_machine_id": vm_id
                    }
                    params["assigned_object_type"] = vm_interface_ct
                    params["assigned_object_id"] = VMInterface.objects.get(
                        **query).id
                elif device:
                    dev_id = Device.objects.get(name=device).id
                    query = {"name": params.pop(assoc), "device_id": dev_id}
                    params["assigned_object_type"] = interface_ct
                    params["assigned_object_id"] = Interface.objects.get(
                        **query).id
            else:
                query = {field: params.pop(assoc)}
                params[assoc] = model.objects.get(**query)

    ip_address, created = IPAddress.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(ip_address, custom_field_data)

        print("🧬 Created IP Address", ip_address.address)
Beispiel #9
0
    "cluster": (Cluster, "name"),
    "location": (Location, "name"),
}

for params in devices:
    custom_field_data = pop_custom_fields(params)

    # primary ips are handled later in `270_primary_ips.py`
    params.pop("primary_ip4", None)
    params.pop("primary_ip6", None)

    for assoc, details in required_assocs.items():
        model, field = details
        query = {field: params.pop(assoc)}

        params[assoc] = model.objects.get(**query)

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}

            params[assoc] = model.objects.get(**query)

    device, created = Device.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(device, custom_field_data)

        print("ЁЯЦея╕П  Created device", device.name)
Beispiel #10
0
import sys

from ipam.models import RouteTarget
from startup_script_utils import load_yaml, pop_custom_fields, set_custom_fields_values
from tenancy.models import Tenant

route_targets = load_yaml("/opt/netbox/initializers/route_targets.yml")

if route_targets is None:
    sys.exit()

optional_assocs = {"tenant": (Tenant, "name")}

for params in route_targets:
    custom_field_data = pop_custom_fields(params)

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}

            params[assoc] = model.objects.get(**query)

    route_target, created = RouteTarget.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(route_target, custom_field_data)

        print("🎯 Created Route Target", route_target.name)
Beispiel #11
0
import sys

from ipam.models import VRF
from startup_script_utils import load_yaml, pop_custom_fields, set_custom_fields_values
from tenancy.models import Tenant

vrfs = load_yaml("/opt/netbox/initializers/vrfs.yml")

if vrfs is None:
    sys.exit()

optional_assocs = {"tenant": (Tenant, "name")}

for params in vrfs:
    custom_field_data = pop_custom_fields(params)

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}

            params[assoc] = model.objects.get(**query)

    vrf, created = VRF.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(vrf, custom_field_data)

        print("📦 Created VRF", vrf.name)
for params in vlan_groups:
    custom_field_data = pop_custom_fields(params)

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}
            # Get model from Contenttype
            scope_type = params.pop("scope_type", None)
            if not scope_type:
                print(
                    f"VLAN Group '{params['name']}': scope_type is missing from VLAN Group"
                )
                continue
            app_label, model = str(scope_type).split(".")
            ct = ContentType.objects.filter(app_label=app_label,
                                            model=model).first()
            if not ct:
                print(
                    f"VLAN Group '{params['name']}': ContentType for " +
                    f"app_label = '{app_label}' and model = '{model}' not found"
                )
                continue
            params["scope_id"] = ct.model_class().objects.get(**query).id
    vlan_group, created = VLANGroup.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(vlan_group, custom_field_data)

        print("🏘️ Created VLAN Group", vlan_group.name)
Beispiel #13
0
required_assocs = {
    "provider": (Provider, "name"),
    "type": (CircuitType, "name")
}

optional_assocs = {"tenant": (Tenant, "name")}

for params in circuits:
    custom_field_data = pop_custom_fields(params)

    for assoc, details in required_assocs.items():
        model, field = details
        query = {field: params.pop(assoc)}

        params[assoc] = model.objects.get(**query)

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}

            params[assoc] = model.objects.get(**query)

    circuit, created = Circuit.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(circuit, custom_field_data)

        print("⚡ Created Circuit", circuit.cid)
Beispiel #14
0
if prefixes is None:
    sys.exit()

optional_assocs = {
    "site": (Site, "name"),
    "tenant": (Tenant, "name"),
    "tenant_group": (TenantGroup, "name"),
    "vlan": (VLAN, "name"),
    "role": (Role, "name"),
    "vrf": (VRF, "name"),
}

for params in prefixes:
    custom_field_data = pop_custom_fields(params)

    params["prefix"] = IPNetwork(params["prefix"])

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}
            params[assoc] = model.objects.get(**query)

    prefix, created = Prefix.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(prefix, custom_field_data)

        print("📌 Created Prefix", prefix.prefix)
Beispiel #15
0
import sys

from startup_script_utils import load_yaml, pop_custom_fields, set_custom_fields_values
from tenancy.models import Tenant, TenantGroup

tenants = load_yaml("/opt/netbox/initializers/tenants.yml")

if tenants is None:
    sys.exit()

optional_assocs = {"group": (TenantGroup, "name")}

for params in tenants:
    custom_field_data = pop_custom_fields(params)

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}

            params[assoc] = model.objects.get(**query)

    tenant, created = Tenant.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(tenant, custom_field_data)

        print("👩‍💻 Created Tenant", tenant.name)
Beispiel #16
0
import sys

from dcim.models import Region, Site
from startup_script_utils import load_yaml, pop_custom_fields, set_custom_fields_values
from tenancy.models import Tenant

sites = load_yaml("/opt/netbox/initializers/sites.yml")

if sites is None:
    sys.exit()

optional_assocs = {"region": (Region, "name"), "tenant": (Tenant, "name")}

for params in sites:
    custom_field_data = pop_custom_fields(params)

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}

            params[assoc] = model.objects.get(**query)

    site, created = Site.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(site, custom_field_data)

        print("📍 Created site", site.name)
Beispiel #17
0
import sys

from circuits.models import Provider
from startup_script_utils import load_yaml, pop_custom_fields, set_custom_fields_values

providers = load_yaml("/opt/netbox/initializers/providers.yml")

if providers is None:
    sys.exit()

for params in providers:
    custom_field_data = pop_custom_fields(params)

    provider, created = Provider.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(provider, custom_field_data)

        print("📡 Created provider", provider.name)
Beispiel #18
0
if power_feeds is None:
    sys.exit()

required_assocs = {"power_panel": (PowerPanel, "name")}

optional_assocs = {"rack": (Rack, "name")}

for params in power_feeds:
    custom_field_data = pop_custom_fields(params)

    for assoc, details in required_assocs.items():
        model, field = details
        query = {field: params.pop(assoc)}

        params[assoc] = model.objects.get(**query)

    for assoc, details in optional_assocs.items():
        if assoc in params:
            model, field = details
            query = {field: params.pop(assoc)}

            params[assoc] = model.objects.get(**query)

    power_feed, created = PowerFeed.objects.get_or_create(**params)

    if created:
        set_custom_fields_values(power_feed, custom_field_data)

        print("⚡ Created Power Feed", power_feed.name)