Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Created methods to create, retrieve, update and delete virtual chassi… #56

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
104 changes: 104 additions & 0 deletions netbox/dcim.py
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,42 @@ def update_rack_group_by_id(self, rack_group_id, **kwargs):
"""
return self.netbox_con.patch('/dcim/rack-groups/', rack_group_id, **kwargs)

def create_virtual_chassis(self, name, **kwargs):
"""Create a new virtual chassis

:param name: Name of the virtual chassis
:param kwargs: Optional arguments
:return: netbox object if successful otherwise raise CreateException
"""
required_fields = {"name": name}
return self.netbox_con.post('/dcim/virtual-chassis/', required_fields, **kwargs)

def get_virtual_chassis(self, **kwargs):
"""Get all virtual chassis"""
return self.netbox_con.get('/dcim/virtual-chassis/', **kwargs)

def update_virtual_chassis(self, virtual_chassis_name, **kwargs):
"""Update virtual chassis by virtual chassis name

:param virtual_chassis_name: virtual chassis name to update
:param kwargs: requests body dict
:return: bool True if successful otherwise raise UpdateException
"""
virtual_chassis_id = self.get_virtual_chassis(name=virtual_chassis_name)[0]['id']
return self.netbox_con.patch('/dcim/virtual-chassis/', virtual_chassis_id, **kwargs)

def delete_virtual_chassis(self, virtual_chassis_name):
"""Delete virtual chassis by virtual chassis name name

:param virtual_chassis_name: Virtual chassis to delete
:return: bool True if successful otherwise raise DeleteException
"""
try:
device_id = self.get_virtual_chassis(name=virtual_chassis_name)[0]['id']
except IndexError:
raise exceptions.NotFoundException({"detail": "device: {}".format(virtual_chassis_name)}) from None
return self.netbox_con.delete('/dcim/virtual-chassis/', device_id)

def get_devices(self, **kwargs):
"""Get all devices"""
return self.netbox_con.get('/dcim/devices/', **kwargs)
Expand Down Expand Up @@ -769,3 +805,71 @@ def get_power_ports(self, **kwargs):
def get_power_connections(self, **kwargs):
"""Return power connections """
return self.netbox_con.get('/dcim/power-connections/', **kwargs)

def create_rear_port(self, name, device_id, type, **kwargs):
"""Create a new rear port for a device

:param name: rear port name
:param device_id: device id for the device
:param type: the type for the rear port (for instance: 8p8c)
:param kwargs: optional fields
:return: netbox object if successful otherwise exception raised
"""
required_fields = {
"name": name,
"device": device_id,
"type": type
}
return self.netbox_con.post('/dcim/rear-ports/', required_fields, **kwargs)

def get_rear_ports(self, **kwargs):
"""Return rear ports"""
return self.netbox_con.get('/dcim/rear-ports/', **kwargs)

def create_front_port(self, name, device_id, type, rear_port_id, **kwargs):
"""Create a new front port for a device

:param name: rear port name
:param device_id: device id for the device
:param type: the type for the rear port (for instance: 8p8c)
:param rear_port_id: the id for the connected rear port
:param kwargs: optional fields
:return: netbox object if successful otherwise exception raised
"""
required_fields = {
"name": name,
"device": device_id,
"rear_port": rear_port_id,
"type": type
}
return self.netbox_con.post('/dcim/front-ports/', required_fields, **kwargs)

def get_front_ports(self, **kwargs):
"""Return front ports"""
return self.netbox_con.get('/dcim/front-ports/', **kwargs)

def create_cable(self, termination_a_type, termination_a_id, termination_b_type, termination_b_id, **kwargs):
"""Create a new front port for a device

:param termination_a_type: the type for the first termination (dcim.interface, dcim.frontport, etc.)
:param termination_a_id: the id for the first termination
:param termination_b_type: the type for the second termination (dcim.interface, dcim.frontport, etc.)
:param termination_b_id: the id for the second termination
:param kwargs: optional fields
:return: netbox object if successful otherwise exception raised
"""
required_fields = {
"a_terminations": [
{
"object_type": termination_a_type,
"object_id": termination_a_id
}
],
"b_terminations": [
{
"object_type": termination_b_type,
"object_id": termination_b_id
}
],
}
return self.netbox_con.post('/dcim/cables/', required_fields, **kwargs)