Advanced Usage

Object Types

There are 3 class types provided by PyInfoblox2.

  • Client Class

  • Object Classes

  • List Classes

Note

Object classes represent single Infoblox Object such as a network or TXT object

When retrieving a single record, that data is loaded into a single object class.

Note

List classes represent multiple Infoblox Objects such as a list of networks or TXT objects

When retrieving a multiple records, that data is loaded into a single list class.

Note

For every Infoblox object, an object class and a list class have been supplied

Object and List Classes

Object Class Name

List Class Name

Infoblox Record Type

ARecord

ARecords

A Records

AuthZone

AuthZones

Authoritative Zones

Cname

Cnames

CNAMES

Container

Containers

Infoblox IPv4 Containers

Containerv6

Containersv6

Infoblox IPv6 Containers

DelegatedZone

DelegatedZones

Delegated Zones

DHCPRange

DHCPRanges

DHCP Ranges

FixedAddress

FixedAddresses

Fixed Addresses

ForwardZone

ForwardZones

Forward Zones

Host

Hosts

Infoblox Hosts

IPv4Address

IPv4Addresses

IPv4 Addresses

MacFilter

MacFilters

MAC Filters

MacFilterAddress

MacFilterAddresses

MAC Filter Addresses

MXRecord

MXRecords

MX Records

NameServer

NameServers

Name Servers

Network

Networks

IPv4 Networks

Networkv6

Networksv6

IPv6 Networks

NSGroup

NSGroups

Name Server Groups

PTRRecord

PTRRecords

PTR Records

RoamingHost

RoamingHosts

Roaming Hosts

ScheduledTask

ScheduledTasks

Scheduled Tasks

SRVRecord

SRVRecords

SRV Record

TXTRecord

TXTRecords

TXT Records

Infoblox Client

The InfobloxClient class acts as an HTTP Rest Client for all Infoblox objects. It can also be used for searching for items within Infoblox.

The InfobloxClient takes a variety of parameters. These are described as follows:

server - this is either the hostname or IP of your Infoblox instance. It can be in HTTP format, e.g. http://localhost or localhost
username - this is the username used to log into your Infoblox instance
password - this is the password used to log into your Infoblox instance
version - this is the WAPI version, e.g. **'2.12.2'**
candidate - a read only server if different from the **server** parameter
ssl_check - this parameter is used to toggle ``verify`` when using SSL enabled instances
verbose - this parameter is used to set logging levels, e.g. 1 for warning, 2 for info, 3 for debug
simulation - this parameter is used to toggle a simulation of the client. When set to true, no connections will be made to the instances
add_audit - this feature is used to specify whether to add a log message to an Infoblox EA. The

Note

GET requests are sent to the candidate option if this is specified and different from the server parameter

All other requests are sent to the server (POST/PUT/DELETE)

Warning

The audit feature requires an Infoblox EA named ChangeControl

Examples

This is a simple example of how to call the InfobloxClient class.

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)

Below is a complete example of calling the InfobloxClient class.

from pyinfoblox2 import *
client = InfobloxClient(server, username, password,
                        version, candidate=None, ssl_check=False,
                        verbose=False, simulation=False, add_audit=False)

The infoblox client can be used to perform searches against infoblox objects. The below example would match a partial MAC address:

from pyinfoblox2 import *
client = InfobloxClient(server, username, password,
                        version, candidate=None, ssl_check=False,
                        verbose=False, simulation=False, add_audit=False)
client.search('mac_address', 'xx:xx:xx', regex=True)

The infoblox client can also be used to get data directly without using the object classes if required.

Tip

HTTP methods (get, post, put, delete) can be called directly and the resulting output would be JSON.

from pyinfoblox2 import *
client = InfobloxClient(server, username, password,
                        version, candidate=None, ssl_check=False,
                        verbose=False, simulation=False, add_audit=False)
result = client.get('record:txt', name='txt.example.com')

Creating Records

Infoblox Records can be created by using the add method on any Object Class.

Examples

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
obj = ObjectClass.add(*args, **kwargs, **extattrs)

Removing Records

Infoblox Records can be removed either immediately or at a scheduled time.

Note

The remove_on parameter allows the record to be removed at a specific time. This uses an Infoblox Scheduled Task set to the date/time provided.

Note

The remove_flags parameter allows the record to be removed and any remove flags that are associated with the object to be be triggered.

For A Records, there is a single flag, which requires enabling the feature on the Infoblox Grid: remove_associated_ptr=True

Examples

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
obj = ObjectClass.load(client, 'test.example.com')
obj.remove(username=None, remove_on=False, remove_flags=False)

Loading Records

Infoblox Records can be loaded in four ways:

Load Single Record using an object class which represents the record
Loading Multiple Records using a list class, either by getting all, or by searching for records
Loading Multiple records from a text file
Loading Multiple records from JSON data

Note

Loading data in bulk can be slow, so data is loaded asynchronously to speed up the process.

Examples

Loading a single record:

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
obj = ObjectClass.load(client, value)

Load all records of a given type using a list class:

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
obj = ListClass(client)
obj.get()
    while obj.next_page:
    obj.get_next(obj.next_page)

Load records of a given type using a search:

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
obj = ListClass.search(client, search_key, value, view='default', regex=False, limit=100, paging=0)

Loading records of a given type from a text file

from pyinfoblox2 import *
records = ListClass.load_from_file(filename, verbose=0)

Loading records of a given type from JSON

from pyinfoblox2 import *
records = ListClass.load_from_json(data, verbose=0)

Outputting data

Data can be output in 2 ways, either as JSON from either a list class or an object class, or to a file as JSON from a list class:

Examples

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
obj = ObjectClass.load(client, value)
json_data = obj.to_json()
from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
obj = ListClass.search(client, search_key, value, view='default', regex=False, limit=100, paging=0)
json_data = obj.to_json()

containers.write_to_file(filename, start=0, length=100)
from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
obj = ListClass.search(client, search_key, value, view='default', regex=False, limit=100, paging=0)
obj.write_to_file(filename, start=0, length=100)

Extra Attributes

Infoblox EAs are highly flexible and can be used by all object types.

In order to handle this, EA’s are passed into any given PyInfoblox2 object class as a series of keyword arguments when creating an object.

Tip

Infoblox EA’s can be passed as parameters and will be created if the EA exists within Infoblox.

If the ChangeControl EA exists, and the add_audit parameter is set to true when initializing the client object, the username parameter is used to populate this EA.

Note

The 2 helper classes handle all references to Infoblox EA values (ExtraAttr and AttrObj) and create lists of EA dictionaries: dict(name={“value”: value})

ObjectClass in the below examples can be any object class supplied with the PyInfoblox2 library

Examples

Infoblox EA’s can be added to any object at time of creation like so:

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
obj = ObjectClass.add(client, *args, **kwargs, **extattrs)

Infoblox EAs can be added to any existing object class in the following manner:

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
obj = ObjectClass.load(client, value)
obj.extattrs += AttrObj(name, value)
obj.save()

Infoblox EAs can be removed from any existing object class in the following manner:

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
obj = ObjectClass.load(client, value)
obj.extattrs -= name
obj.save()

Infoblox Functions

For certain object types, Infoblox provides internal functions to assist with record creation. For Host and Network objects, some of these are currently supported.

Examples

When wishing to create a host record using the next IP address within a given network, we can pass the networkk into the IP Address parameter when creating the host:

Note

If network is passed in CIDR format e.g. x.x.x.x/xx, a new IP will be allocated from the passed network using “nextavailableip” functionality

If ip_address is passed in “ip-ip” a new IP will be allocated from between the 2 IPs listed using “nextavailableip” functionality

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
host1 = Host.add(client, name='test.example.com', ip_address='10.10.10.0/24', description=None, mac=None, conf_dhcp=True, pxe=None, options=[], view='default', username=None, **extattrs)
host2 = Host.add(client, name='test.example.com', ip_address='10.10.10.1-10.10.10.5', description=None, mac=None, conf_dhcp=True, pxe=None, options=[], view='default', username=None, **extattrs)

When creating a network, as above, we can utilize the internal Infoblox functionality to select the next available network within a given container.

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
network = Network.add(client, None, description=None, options=None, members=None, pxe=None,
        view='default', create_next=True, mask=24, container='10.10.0.0/16', username=None, **extattrs)

Other Features

There are plenty of other helper methods that are object specific, such as adding an IP Address to an exist host record or adding an alias:

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
host = Host.add(client, ip_address, description=None, mac=None, conf_dhcp=True, pxe=None, options=[], view='default', username=None, **extattrs)
host.add_ip(ip_address, mac=None, conf_dhcp=True, options=[], username=None)
host.remove_ip(ip_address, username=None)
host.create_alias(alias, username=None)
host.remove_alias(alias, username=None)

Record(s) Examples

A Record(s)

This example shows how to load a single A Record from Infoblox into a object class.

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
record = ARecord.load(client, 'test.example.com')
record = ARecord.load(client, '1.1.1.1')

Creating an A Record is also done using the object class.

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
record = ARecord.add(client, name, ip_address, description=None, view='default', username=None, **extattrs)

Removing an A Record is also done using the object class.

Note

The remove_on parameter allows the record to be removed at a specific time. This uses an Infoblox Scheduled Task set to the date/time provided.

Note

The remove_flags parameter allows the record to be removed and any remove flags that are associated with the object to be be triggered.

For A Records, there is a single flag, which requires enabling the feature on the Infoblox Grid: remove_associated_ptr=True

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
record = ARecord.load(client, 'test.example.com')
record.remove(username=None, remove_on=False, remove_flags=False)

This example shows how to load all A Records into a list class.

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
records = ARecords(client)
records.get()
while records.next_page:
    records.get_next(records.next_page)

This example shows how to search for A Records.

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
records = ARecords.search(client, search_key, value, view='default', regex=False, limit=100, paging=0)

Helper methods have been added to make searching by name or IP Address easier.

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
records = ARecords.search_by_address(client, value, view='default', limit=100, paging=0)
records = ARecords.search_by_name(client, value, view='default', limit=100, paging=0)

Searching for a given element within the resulting class:

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
records = ARecords(client)
records.get()
containers.get()
result_obj = records.find('ip_address', '1.1.1.1')

A Records can also be loaded from files, such as a JSON file, or a text file, where the text file contains a list of JSON dictionaries.

Note

Loading data in bulk can be slow, so data is loaded asynchronously to speed up the process.

from pyinfoblox2 import *
records = ARecords.load_from_file(filename, verbose=0)
records = ARecords.load_from_json(data, verbose=0)

Data can be output in 2 ways, either as JSON or to a file as JSON:

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
records = ARecords.search(client, '10.10.10', regex=True)
records.to_json()
records.write_to_file(filename, start=0, length=100)

Container(s)

This example shows how to load a single container from Infoblox into a Container object.

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
container = Container.load(client, '10.0.0.0/8')
co

To load all networks within a given container a helper method is supplied:

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
container = Container.load(client, '10.0.0.0/8')
container.load_networks()
container.networks.to_json()

In oder to load multiple containers, you can either search for containers matching a given criteria or load all containers.

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
containers = Containers(client)
containers.get()
containers.get_next()
containers.to_json()

To search for containers:

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
containers = Containers.search(client, search_key, value, view='default', regex=False, limit=100, paging=0)

Containers can also be loaded from files, such as a JSON file, or a text file, where the text file contains a list of JSON dictionaries:

from pyinfoblox2 import *
containers = Containers.load_from_file(filename, verbose=0)
containers = Containers.load_from_json(data, verbose=0)

Searching for a given element within the containers class:

from pyinfoblox2 import *
containers.get()
result_obj = containers.find('network', '10.10.0.0/16')

Data can be output in 2 ways, either as JSON or to a file as JSON:

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
containers = Containers.search(client, '10.10.10', regex=True)
contains.to_json()
containers.write_to_file(filename, start=0, length=100)

The following example shows how to create a container in infoblox.

Note

When using DHCP options, the options parameter can be a tuple of 5 values, making up an option, or a list of JSON objects:

Example 1: options=list(dict(name=name, num=int(num), value=value, vendor_class=vendor_class))
Example 2: options=list(dict(name=name, num=int(num), use_option=use, value=value, vendor_class=vendor_class))
Example 3: options=list(tuple(name, num, True, value, vendor_class))
from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
container = Container.add(client, network, description=None, options=None, view='default', username=None, **extattrs)

To update a container, the following method is used. In this case, if kwargs are passed, these are translated into EA’s and applied to the container.

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
container = Container.load(client, network)
container.description = 'new description'
container.save(username=None, ***kwargs)

Infoblox EA’s can be applied to existing containers like so:

from pyinfoblox2 import *
client = InfobloxClient(server, username, password, version)
container = Container.load(client, network)
containers.extattrs += AttrObj(name, value)
containers.extattrs -= AttrObj(name, value)