- Class XMLRPC

# Class XMLRPC

This class provides a XML-RPC API for HaCi.

Basic usage:

            my $api         = new Frontier::Client(url => "http://$server/RPC2");
            my $session     = $api->call('login', [$user, $pass]);
            die 'Login failed!' unless $session;

            print Dumper($api->call($method, $session, @args));

            $api->call('logout', $session);

            exit 0;

`login()`

  Login and return your session

       Params

       Returns
          - session        [string]    session token you can use for authentication

`logout()`

  Logout

       Params

       Returns

`search()`

  Search networks

       Params
          - search          [string]  string to search for
          - state           [string]  filter the result by that network state (ALLOCATED PA, ASSIGNED, ...)
          - exact           [string]  don't do a substring search
          - template name   [string]  filter the result by that template name
          - template query  [hash]    filter the result by defining special values for template entries (i.e.: {name => 'POOL1'})
          - root name       [string]  limit the search in that root
          - nrOfFreeSubs    [boolean] compute the number of free subnets in each found network
          - withDetails     [boolean] show details for found networks
          - tags            [string]  return only networks with this tags, seperate with spaces (i.e.: 'OR foo bar', 'AND foo bar')
       Returns
          - networks        [array]    array of found network blocks (hash)
                                       - netID
                                       - network
                                       - rootName
                                       - description
                                       - state
                                       - nrOfFreeSubs
       Example
          my $networks = search('Test', 'ASSIGNED', 0, 'DSL-POOL', {name => 'Pool1'}, 'DSL-Test-Pool-Root', 0);

`getFreeSubnets()`

  Find free subnets in a specified root and supernet and return the wanted amount of subnets

       Params
          - root name       [string]  search free subnets in that root
          - supernet        [network] search free subnets in that supernet (e.g. 192.168.0.0/24, 2001::/120)
          - cidr            [integer] specify the target cidr of your subnets (e.g. 30)
          - amount          [integer] how many subnets you want to get
       Returns
          - networks        [array]   array of free subnets found (hash)
                                      - network
       Example
          my $freeSubnets = getFreeSubnets('Test root', '10.184.120.0/23', 32, 1);

`getFreeSubnetsFromSearch()`

  Search networks and return free subnets from them

       Params
          - search          [string]  string to search for
          - state           [string]  filter the result by that network state (ALLOCATED PA, ASSIGNED, ...)
          - exact           [string]  don't do a substring search
          - template name   [string]  filter the result by that template name
          - template query  [hash]    filter the result by defining special values for template entries (i.e.: {name => 'POOL1'})
          - root name       [string]  limit the search in that root
          - cidr            [integer] specify the target cidr of your subnets (e.g. 30)
          - amount          [integer] how many subnets you want to get
       Returns
          - networks        [array]   array of free subnets found (hash)
                                      - network
                                      - root name
       Example
          my $freeSubnets = getFreeSubnetsFromSearch('search me', '', 1, '', {}, 'Test-Root', 29, 3);

`listRoots()`

  Add a root to HaCi

       Params
       Returns
          - roots        [array]    array of found roots (hash)
                                       - ID
                                       - name
                                       - ipv6 (boolean)

`addRoot()`

  Add a root to HaCi

       Params
          - root name       [string]  add a root with this name
          - description     [string]  description of the root
          - ipv6            [boolean] this root contains IPv6 networks
       Returns
          - success         [string] 0 on success, error-String at error

`editRoot()`

  Edit an existing root

       Params
          - root name      [string]  edit this root
          - new root name  [string]  change root name
          - description    [string]  new description of the root
       Returns
          - success         [string] 0 on success, error-String at error

`delRoot()`

  Delete a root from HaCi

       Params
          - root name       [string]  remove the root
       Returns
          - success         [string] 0 on success, error-String at error

`addNet()`

  Add a network to HaCi

       Params
          - root name       [string]  add the network to this root
          - network         [network] add this network (e.g. 192.168.0.1/32, 2001::dead:beef:0/125)
          - description     [string]  description of the network
          - state           [string]  state of the network (e.g. ALLOCATED PA, ASSIGNED, ...)
          - def subnet Size [integer] define a default subnet cidr size (e.g. 30)
          - template name   [string]  assign a template to the network
          - template values [hash]    pass template values (e.g. {hostname => 'abc.de', os => 'redhat'})
          - tags                                              [string]  add tags (seperate by comma)
       Returns
          - success         [string] 0 on success, error-String at error

`editNet()`

  Edit an existing network

       Params
          - root name   [string]  edit the network in this root
          - network     [network] edit this network (e.g. 192.168.0.1/32, 2001::dead:beef:0/125)
          - changes     [hash]    changes (valid attributes are: network description state rootName defSubnetSize tmplName tmplValues)
                                  e.g.:
                                   {description => 'test_8'}
                                   {network => '192.168.0.8/29', defSubnetSize=>30, state=>'FREE', rootName=>'larsux.de'}
       Returns
          - success         [string] 0 on success, error-String at error

`delNet()`

  Delete a network from HaCi

       Params
          - root name       [string]  remove the netork from this root
          - network         [network] remove this network (e.g. 192.168.0.1/32, 2001::dead:beef:0/125)
          - network lock    [integer] lock network for X seconds
          - withSubnets     [boolean] also remve subnets
       Returns
          - success         [string] 0 on success, error-String at error

`assignFreeSubnet()`

  Find the next free subnet and assign it in one step

       Params
          - root name       [string]  search free subnets in that root
          - supernet        [network] search free subnets in that supernet (e.g. 192.168.0.0/24, 2001::/120)
          - cidr            [integer] specify the target cidr of your subnets (e.g. 30)
          - description     [string]  description of the network
          - state           [string]  state of the network (e.g. ALLOCATED PA, ASSIGNED, ...)
          - def subnet Size [integer] define a default subnet cidr size (e.g. 30)
          - template name   [string]  assign a template to the network
          - template values [hash]    pass template values (e.g. {hostname => 'abc.de', os => 'redhat'})
       Returns
          - network details [hash]    new network assigned:
                                      - netID
                                      - network
                                      - modify date
                                      - ipv6 (boolean)
                                      - description
                                      - state
                                      - create from
                                      - create date
                                      - default subnet cidr size
                                      - template name
                                      - modify from

`getNetworkDetails()`

  Get details from a network in HaCi

       Params
          - root name       [string]  get details of a network in this root
          - network         [network] get details of this network (e.g. 192.168.0.1/32, 2001::dead:beef:0/125)
       Returns
          - network         [hash]    network details:
                                      - netID
                                      - network
                                      - modify date
                                      - ipv6 (boolean)
                                      - description
                                      - state
                                      - create from
                                      - create date
                                      - default subnet cidr size
                                      - template name
                                      - modify from

`getSubnets()`

  Get subnets from a root and optional from a supernet

       Params
          - root name       [string]  get subnets from this root
          - supernet        [network] get subnets from this network (e.g. 192.168.0.1/32, 2001::dead:beef:0/125)
       Returns
          - networks        [array]    array of found networks (hash)
                                       - netID
                                       - network
                                       - modify date
                                       - ipv6 (boolean)
                                       - description
                                       - state
                                       - create from
                                       - create date
                                       - default subnet cidr size
                                       - template name
                                       - modify from
       Example
          my $subnets = getSubnets('Test');
          my $subnets = getSubnets('Test', '192.168.0.0/24');