Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Published by Scroll Versions from this space and version 7.3.0


 

HTML
<div id="google_translate_element"></div>
<script type="text/javascript">
function googleTranslateElementInit() {
  new google.translate.TranslateElement({pageLanguage: 'en'}, 'google_translate_element');
}
</script>
<script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>

 

How Do I... (Use Cases)

Warning
ProVision's APIv1 system has been replaced by APIv2, and is now considered deprecated. 

If you want to get a jumpstart on common API use cases, you came to the right place! Expand the text areas below for walkthroughs and code samples of API calls...

...

Expand

DHCPv2 functionality is enabled on a particular resource by attaching a DHCP Module as a child.  A command to do this is as follows:

Code Block
            [ProVision root]/api/v1/api.php?target=resource&action=add
 
            data:
meta[type]: dhcp_module
meta[name]: [parent resource id] DHCP Module
meta[parent_id]: [parent resource id]
 


The special resource type “dhcp_module” indicates to ProVision that the DHCP system is enabled for the parent object.  The attributes associated with the “dhcp_module” resource govern the DHCP system's behavior. 

 


Updating the attributes of a DHCP Server uses a Resource Update command: 


Code Block
[ProVision root]/api/v1/api.php?target=resource&action=update&meta[id]=2178 &meta[type]=dhcp_module&fields[_dhcp_attributes][]={"type":"ISC","notes":"notes go here","username":"username","port":"port","config_test":"/etc/init.d/dhcpd configtest","server_stop":"/etc/init.d/dhcpd stop","server_start":"/etc/init.d/dhcpd start","config_path":"/tmp/dhcpd.conf","option_routers":"192.168.0.0","option_domain_name_servers":"ns1.6connect.com","option_domain_name":"6connect.com","authoritative":"1","default_lease_time":"600","max_lease_time":"7200","local_port":"67","log_facility":"local7","password":"password","server_ip":"192.168.0.1","freeLines":3,"freeLine1":"free line 1","freeLine2":"free line 2","freeLine3":"free line 3"}

 


This command appears rather complicated, but can be broken apart into reasonable pieces.  The first section: 


Code Block
target=resource&action=update&meta[id]=2178&meta[type]=dhcp_module
 


is familiar from other parts of ProVision.  We are updating a resource of type “dhcp_module” whose resource id is 2178.  The second section of the command details the update values, starting with

           

Code Block
 fields[_dhcp_attributes][]=

 


which contains a JSON-encoded string of all the fields specific to a DHCP server's function.  When expanded into its full object form it is substantially easier to digest:

 


Code Block
{
            "type":"ISC",
            "notes":"notes go here",
            "username":"username",
            "port":"port",
            "config_test":"/etc/init.d/dhcpd configtest",
            "server_stop":"/etc/init.d/dhcpd stop",
            "server_start":"/etc/init.d/dhcpd start",
            "config_path":"/tmp/dhcpd.conf",
            "option_routers":"192.168.0.0",
            "option_domain_name_servers":"ns1.6connect.com",
            "option_domain_name":"6connect.com",
            "authoritative":"1",
            "default_lease_time":"600",
            "max_lease_time":"7200",
            "local_port":"67",
            "log_facility":"local7",
            "password":"password",
            "server_ip":"192.168.0.1",
            "freeLines":3,
            "freeLine1":"free line 1",
            "freeLine2":"free line 2",
            "freeLine3":"free line 3"
}

 


This object describes all the most common DHCP server configuration options.  For a full explanation of each of the fields, see the Detailed API Specification later in this document.  


Please note that the object above must be passed to the DHCP system as a JSON-encoded string.  It must be passed into the special “_dhcp_attributes” attribute for it to be functional, as in the example URL.

...

Expand

An example command to add a DHCP Aggregate is:  


Code Block
[ProVision root]/api/v1/api.php?target=ipam&action=add&block=192.168.0.0/24&rir= 1918&vlan=&tags=&region=&resourceId=1282&allowSubAssignments=true

 

The important part to note is that the IP block is being assigned to resourceId 1282, which corresponds to the DHCP Available resource.  The DHCP Available resource is a system-level resource which is used to hold all unassigned DHCP IP addresses.  Every instance has its own DHCP Available resource, whose id can be found with the following command:

 


Code Block
[ProVision root]/api/v1/api.php?target=resource&action=get&slug=dhcp-available
 


New DHCP subnets and hosts draw their IPs from this pool.  If there are no IPs in the DHCP Available pool new subnets and hosts will not be able to be created.

 


DHCP IP aggregates are fetched, updated, split, and deleted using the standard IPAM management API endpoints.  Please see the IPAM API Documentation. for details.

...

Expand

 Similar to how the “dhcp_module” resource was created above, the command to create a DHCP Pool is as follows: 

Code Block
[ProVision root]/api/v1/api.php?target=resource&action=add&meta[type]=dhcp_pool &meta[name]=New Subnet&fields[_dhcp_type][]=subnet&fields[_dhcp_pool_attributes][]={"mac":"","rangeStart":"","rangeEnd":"","freeLines":3,"freeLine1":"Free Line 1","freeLine2":"Free Line 2","freeLine3":"Free Line 3"}
 


The first half of this command is relatively straightforward: 


Code Block
target=resource&action=add&meta[type]=dhcp_pool&meta[name]=New Subnet

This section informs the API that we wish to create a new, empty “dhcp_pool” resource whose name is “New Subnet.”

 

Code Block
fields[_dhcp_type][]=subnet&fields[_dhcp_pool_attributes][]={"mac":"","rangeStart":"", "rangeEnd":"","freeLines":3,"freeLine1":"Free Line 1","freeLine2":"Free Line 2","freeLine3":"Free Line 3"}

 


The second half of the command behaves in a similar manner to the “dhcp_module.”  The “_dhcp_pool_attributes” field holds a JSON-encoded string which describes the dhcp_pool resource.  When expanded, the JSON string becomes the following object:

Code Block
{
            "mac":"",
            "rangeStart":"",
            "rangeEnd":"",
            "freeLines":3,
            "freeLine1":"Free Line 1",
            "freeLine2":"Free Line 2",
            "freeLine3":"Free Line 3"
}

 


For a full explanation of each of the fields, see the Detailed API Specification

 


Note
Please note that the object above must be passed to the DHCP system as a JSON-encoded string.  It must be passed into the “_dhcp_pool_attributes” attribute for it to be functional, as in the example URL.

 

Once a dhcp_pool resource is in the system it can be updated with IP data obtained from the IP Management system.  Under DHCPv2, the DHCP system uses all the standard IPAM API endpoints and can make use of both the smartAssign and the directAssign methods.  Please see the IPAM API documentation for details.

...

Expand

An example of building a link between a dhcp_pool and a DHCP Server is: 


Code Block
[ProVision root]/api/v1/api.php?target=resource&action=addLink&resource_id1=2178& resource_id2=1452&relation=dhcpPoolLink
 


The Resource Linkage system controls which DHCP Pools are associated with a given DHCP Server.  In the case of linking a DHCP Pool to a DHCP Server, the relation used is “dhcpPoolLink”.  This is a directional link, so it is important that resource_id1 and resource_id2 do not get confused.

Code Block
relation:  "dhcpPoolLink"
resource_id1:  the id of the dhcp_module this pool is being linked to
resource_id2:  the id of the dhcp_pool being linked


Note

It is very important that resource_id1 not be confused with resource_id2.  The link will not function with the values reversed.

 


To undo the above and break a DHCP Pool link, use the same command but substitute “deleteLink” for the action “addLink”.

 


Code Block
[ProVision root]/api/v1/api.php?target=resource&action=deleteLink&resource_id1=2178& resource_id2=2179&relation=dhcpPoolLink


...

Expand

Once the server has been configured according to the previous sections, hitting the following API endpoint will trigger a DHCP push:

 


Code Block
[ProVision root]/api/v1/api.php?target=dhcp&action=push&id=2178

 


The “id” in the above string is the id of the dhcp_module resource attached to the server you whose configuration is to be pushed.  The API return payload will contain success or failure codes, as well as a description of any errors which might have occurred.

When a DHCP configuration file is pushed an SSH connection is opened to the configured server using the user, password, and port supplied to the '_dhcp_attributes' attribute on the dhcp_module resource. If the system successfully connects, it will assemble a DHCP configuration from the information given to the dhcp_module's '_dhcp_attribute' attribute and then parse and add in all linked dhcp_pool resources. 

After the assembled file has been transferred to the DHCP server it will be placed in the location given by 'config_path' on the dhcp_module, and then the command described in 'config_test' will be run to determine whether or not this new file parses correctly.  If 'config_test' is blank or omitted, this step is skipped. 

If the file parses correctly the DHCP will be stopped and restarted according to the 'server_stop' and 'server_start' commands on the DHCP module. If there are errors at any point the system backs out, replaces old config files, and reports the errors via the 'message' return field of the API call.


...

Expand


Code Block
languagepy
#!/usr/bin/python
from apiclient import APIClient, APIResponse

# REPLACE WITH CORRECT VALUES FOR YOUR INSTANCE

base_url		= 'https://<ProVision Instance URL>'

api_key			= '00-ABCDEFGHIJ123456'

api_secret_key	= '0123456789abcdef0123456789abcdef'


# create the APIClient

client = APIClient(base_url, api_key, api_secret_key)



# create aggregate 1.2.3.0/24

target = 'ipam'

action = 'add'

params = {'block': '1.2.3.0/24', 'rir':'ARIN'}

url = client.get_request_url(target, action, params)

print url

response = client.make_api_call(target, action, params)

print response



# get block 1.2.3.0/24

target = 'ipam'

action = 'get'

params = {'block': '1.2.3.0/24'}

url = client.get_request_url(target, action, params)

print url

response = client.make_api_call(target, action, params)

print response




# delete aggregate 1.2.3.0/24

target = 'ipam'

action = 'delete'

params = {'block': '1.2.3.0/24'}

url = client.get_request_url(target, action, params)

print url

response = client.make_api_call(target, action, params)

print response