# salt.modules.infoblox

This module have been tested on infoblox API v1.2.1, other versions of the API are likly workable.

depends:

  libinfoblox, https://github.com/steverweber/libinfoblox

  libinfoblox can be installed using pip install libinfoblox

API documents can be found on your infoblox server at:

> https://INFOBLOX/wapidoc

configuration:

  The following configuration defaults can be defined (pillar or config files '/etc/salt/master.d/infoblox.conf'):

      infoblox.config:
          api_sslverify: True
          api_url: 'https://INFOBLOX/wapi/v1.2.1'
          api_user: 'username'
          api_key: 'password'

  Many of the functions accept api_opts to override the API config.

      salt-call infoblox.get_host name=my.host.com             api_url: 'https://INFOBLOX/wapi/v1.2.1'             api_user=admin             api_key=passs

salt.modules.infoblox.create_a(data, **api_opts)

  Create A record.

  This is a helper function to create_object. See your infoblox API for full data format.

  CLI Example:

      salt-call infoblox.create_a                     data =
                  name: 'fastlinux.math.example.ca'
                  ipv4addr: '127.0.0.1'
                  view: External

salt.modules.infoblox.create_cname(data, **api_opts)

  Create a cname record.

  CLI Example:

      salt-call infoblox.create_cname data={             "comment": "cname to example server",             "name": "example.example.com",             "zone": "example.com",             "view": "Internal",             "canonical": "example-ha-0.example.com"         }

salt.modules.infoblox.create_host(data, **api_opts)

  Add host record

  Avoid race conditions, use func:nextavailableip for ipv[4,6]addrs:

  - func:nextavailableip:network/ZG54dfgsrDFEFfsfsLzA:10.0.0.0/8/default

  - func:nextavailableip:10.0.0.0/8

  - func:nextavailableip:10.0.0.0/8,external

  - func:nextavailableip:10.0.0.3-10.0.0.10

  See your infoblox API for full data format.

  CLI Example:

      salt-call infoblox.create_host             data =
              {'name': 'hostname.example.ca',
              'aliases': ['hostname.math.example.ca'],
          'extattrs': [{'Business Contact': {'value': 'example@example.ca'}},
              {'Pol8 Classification': {'value': 'Restricted'}},
              {'Primary OU': {'value': 'CS'}},
              {'Technical Contact': {'value': 'example@example.ca'}}],
          'ipv4addrs': [{'configure_for_dhcp': True,
              'ipv4addr': 'func:nextavailableip:129.97.139.0/24',
              'mac': '00:50:56:84:6e:ae'}],
          'ipv6addrs': [], }

salt.modules.infoblox.create_ipv4_range(data, **api_opts)

  Create a ipv4 range

  This is a helper function to create_object See your infoblox API for full data format.

  CLI Example:

      salt-call infoblox.create_ipv4_range data={
          start_addr: '129.97.150.160',
          end_addr: '129.97.150.170'}

salt.modules.infoblox.create_object(object_type, data, **api_opts)

  Create raw infoblox object. This is a low level api call.

  CLI Example:

      salt-call infoblox.update_object object_type=record:host  data={}

salt.modules.infoblox.delete_a(name=None, ipv4addr=None, allow_array=False, **api_opts)

  Delete A record

  If the A record is used as a round robin you can set `allow_array=True` to delete all records for the hostname.

  CLI Examples:

      salt-call infoblox.delete_a name=abc.example.com
      salt-call infoblox.delete_a ipv4addr=192.168.3.5
      salt-call infoblox.delete_a name=acname.example.com allow_array=True

salt.modules.infoblox.delete_cname(name=None, canonical=None, **api_opts)

  Delete CNAME. This is a helper call to delete_object.

  If record is not found, return True

  CLI Examples:

      salt-call infoblox.delete_cname name=example.example.com
      salt-call infoblox.delete_cname canonical=example-ha-0.example.com

salt.modules.infoblox.delete_host(name=None, mac=None, ipv4addr=None, **api_opts)

  Delete host

  CLI Example:

      salt-call infoblox.delete_host name=example.domain.com
      salt-call infoblox.delete_host ipv4addr=123.123.122.12
      salt-call infoblox.delete_host ipv4addr=123.123.122.12 mac=00:50:56:84:6e:ae

salt.modules.infoblox.delete_ipv4_range(start_addr=None, end_addr=None, **api_opts)

  Delete ip range.

  CLI Example:

      salt-call infoblox.delete_ipv4_range start_addr=123.123.122.12

salt.modules.infoblox.delete_object(objref, **api_opts)

  Delete infoblox object. This is a low level api call.

  CLI Example:

      salt-call infoblox.delete_object objref=[ref_of_object]

salt.modules.infoblox.diff_objects(obja, objb)

  Diff two complex infoblox objects. This is used from salt states to detect changes in objects.

  Using `func:nextavailableip` will not cause a diff if the ipaddress is in range

salt.modules.infoblox.get_a(name=None, ipv4addr=None, allow_array=True, **api_opts)

  Get A record

  CLI Examples:

      salt-call infoblox.get_a name=abc.example.com
      salt-call infoblox.get_a ipv4addr=192.168.3.5

salt.modules.infoblox.get_cname(name=None, canonical=None, return_fields=None, **api_opts)

  Get CNAME information.

  CLI Examples:

      salt-call infoblox.get_cname name=example.example.com
      salt-call infoblox.get_cname canonical=example-ha-0.example.com

salt.modules.infoblox.get_host(name=None, ipv4addr=None, mac=None, return_fields=None, **api_opts)

  Get host information

  CLI Examples:

      salt-call infoblox.get_host hostname.domain.ca
      salt-call infoblox.get_host ipv4addr=123.123.122.12
      salt-call infoblox.get_host mac=00:50:56:84:6e:ae

salt.modules.infoblox.get_host_advanced(name=None, ipv4addr=None, mac=None, **api_opts)

  Get all host information

  CLI Example:

      salt-call infoblox.get_host_advanced hostname.domain.ca

salt.modules.infoblox.get_host_domainname(name, domains=None, **api_opts)

  Get host domain name

  If no domains are passed, the hostname is checked for a zone in infoblox, if no zone split on first dot.

  If domains are provided, the best match out of the list is returned.

  If none are found the return is None

  dots at end of names are ignored.

  CLI Example:

      salt-call uwl.get_host_domainname name=localhost.t.domain.com             domains=['domain.com', 't.domain.com.']

      # returns: t.domain.com

salt.modules.infoblox.get_host_hostname(name, domains=None, **api_opts)

  Get hostname

  If no domains are passed, the hostname is checked for a zone in infoblox, if no zone split on first dot.

  If domains are provided, the best match out of the list is truncated from the fqdn leaving the hostname.

  If no matching domains are found the fqdn is returned.

  dots at end of names are ignored.

  CLI Examples:

      salt-call infoblox.get_host_hostname fqdn=localhost.xxx.t.domain.com             domains="['domain.com', 't.domain.com']"
      #returns: localhost.xxx

      salt-call infoblox.get_host_hostname fqdn=localhost.xxx.t.domain.com
      #returns: localhost

salt.modules.infoblox.get_host_ipv4(name=None, mac=None, allow_array=False, **api_opts)

  Get ipv4 address from host record.

  Use allow_array to return possible multiple values.

  CLI Examples:

      salt-call infoblox.get_host_ipv4 host=localhost.domain.com
      salt-call infoblox.get_host_ipv4 mac=00:50:56:84:6e:ae

salt.modules.infoblox.get_host_ipv4addr_info(ipv4addr=None, mac=None, discovered_data=None, return_fields=None, **api_opts)

  Get host ipv4addr information

  CLI Examples:

      salt-call infoblox.get_ipv4addr ipv4addr=123.123.122.12
      salt-call infoblox.get_ipv4addr mac=00:50:56:84:6e:ae
      salt-call infoblox.get_ipv4addr mac=00:50:56:84:6e:ae return_fields=host return_fields='mac,host,configure_for_dhcp,ipv4addr'

salt.modules.infoblox.get_host_ipv6addr_info(ipv6addr=None, mac=None, discovered_data=None, return_fields=None, **api_opts)

  Get host ipv6addr information

  CLI Example:

      salt-call infoblox.get_host_ipv6addr_info ipv6addr=2001:db8:85a3:8d3:1349:8a2e:370:7348

salt.modules.infoblox.get_host_mac(name=None, allow_array=False, **api_opts)

  Get mac address from host record.

  Use allow_array to return possible multiple values.

  CLI Example:

      salt-call infoblox.get_host_mac host=localhost.domain.com

salt.modules.infoblox.get_ipv4_range(start_addr=None, end_addr=None, return_fields=None, **api_opts)

  Get ip range

  CLI Example:

      salt-call infoblox.get_ipv4_range start_addr=123.123.122.12

salt.modules.infoblox.get_network(ipv4addr=None, network=None, return_fields=None, **api_opts)

  Get list of all networks. This is helpful when looking up subnets to use with func:nextavailableip

  This call is offen slow and not cached!

  some return_fields comment,network,network_view,ddns_domainname,disable,enable_ddns

  CLI Example:

      salt-call infoblox.get_network

salt.modules.infoblox.get_object(objref, data=None, return_fields=None, max_results=None, ensure_none_or_one_result=False, **api_opts)

  Get raw infoblox object. This is a low level api call.

  CLI Example:

      salt-call infoblox.get_object objref=[_ref of object]

salt.modules.infoblox.is_ipaddr_in_ipfunc_range(ipaddr, ipfunc)

  Return true if the ipaddress is in the range of the nextavailableip function

  CLI Example:

      salt-call infoblox.is_ipaddr_in_ipfunc_range             ipaddr="10.0.2.2" ipfunc="func:nextavailableip:10.0.0.0/8"

salt.modules.infoblox.update_cname(name, data, **api_opts)

  Update CNAME. This is a helper call to update_object.

  Find a CNAME `_ref` then call update_object with the record data.

  CLI Example:

      salt-call infoblox.update_cname name=example.example.com data="{
              'canonical':'example-ha-0.example.com',
              'use_ttl':true,
              'ttl':200,
              'comment':'Salt managed CNAME'}"

salt.modules.infoblox.update_host(name, data, **api_opts)

  Update host record. This is a helper call to update_object.

  Find a hosts `_ref` then call update_object with the record data.

  CLI Example:

      salt-call infoblox.update_host name=fqdn data={}

salt.modules.infoblox.update_object(objref, data, **api_opts)

  Update raw infoblox object. This is a low level api call.

  CLI Example:

      salt-call infoblox.update_object objref=[ref_of_object] data={}