netbox-php/src/Client.php

184 lines
5.7 KiB
PHP
Raw Normal View History

2021-03-10 17:40:13 -04:00
<?php
2022-05-31 12:56:36 +02:00
namespace port389\NetBox;
2021-03-10 17:40:13 -04:00
2022-05-31 12:56:36 +02:00
use BadMethodCallException;
use InvalidArgumentException;
use port389\NetBox\HttpClient\HttpClient;
use RuntimeException;
2021-03-10 17:40:13 -04:00
class Client
{
/** @var array */
protected $classes = [
2022-05-31 12:56:36 +02:00
// Circuits
'circuits' => 'Circuits\Circuits',
'providers' => 'Circuits\Providers',
'circuitTerminations' => 'Circuits\CircuitTerminations',
'circuitTypes' => 'Circuits\CircuitTypes',
2022-05-31 12:56:36 +02:00
// DCIM
'cables' => 'DCIM\Cables',
'connectedDevices' => 'DCIM\ConnectedDevices',
'consoleConnections' => 'DCIM\ConsoleConnections',
'consolePorts' => 'DCIM\ConsolePorts',
'consolePortTemplates' => 'DCIM\ConsolePortTemplates',
'consoleServerPorts' => 'DCIM\ConsoleServerPorts',
'consoleServerPortTemplates' => 'DCIM\ConsoleServerPortTemplates',
'deviceBays' => 'DCIM\DeviceBays',
'deviceBayTemplates' => 'DCIM\DeviceBayTemplates',
'deviceRoles' => 'DCIM\DeviceRoles',
'devices' => 'DCIM\Devices',
'deviceTypes' => 'DCIM\DeviceTypes',
'frontPorts' => 'DCIM\FrontPorts',
'frontPortTemplates' => 'DCIM\FrontPortTemplates',
'interfaceConnections' => 'DCIM\InterfaceConnections',
'interfaces' => 'DCIM\Interfaces',
'interfaceTemplates' => 'DCIM\InterfaceTemplates',
'inventoryItems' => 'DCIM\InventoryItems',
'manufacturers' => 'DCIM\Manufacturers',
'platforms' => 'DCIM\Platforms',
'powerFeeds' => 'DCIM\PowerFeeds',
'powerOutlets' => 'DCIM\PowerOutlets',
'powerOutletTemplates' => 'DCIM\PowerOutletTemplates',
'powerPanels' => 'DCIM\PowerPanels',
'powerPorts' => 'DCIM\PowerPorts',
'powerPortTemplates' => 'DCIM\PowerPortTemplates',
'rackGroups' => 'DCIM\RackGroups',
'rackReservations' => 'DCIM\RackReservations',
'rackRoles' => 'DCIM\RackRoles',
'racks' => 'DCIM\Racks',
'rearPorts' => 'DCIM\RearPorts',
'rearPortTemplates' => 'DCIM\RearPortTemplates',
'regions' => 'DCIM\Regions',
'sites' => 'DCIM\Sites',
'virtualChassis' => 'DCIM\VirtualChassis',
// Extras
'configContexts' => 'Extras\ConfigContexts',
'contentTypes' => 'Extras\ContentTypes',
'customFields' => 'Extras\CustomFields',
'exportTemplates' => 'Extras\ExportTemplates',
'imageAttachments' => 'Extras\ImageAttachments',
'jobResults' => 'Extras\JobResults',
'objectChanges' => 'Extras\ObjectChanges',
'reports' => 'Extras\Reports',
'scripts' => 'Extras\Scripts',
'tags' => 'Extras\Tags',
2022-05-31 12:56:36 +02:00
// IPAM
'aggregates' => 'IPAM\Aggregates',
'ipAddresses' => 'IPAM\IpAddresses',
'prefixes' => 'IPAM\Prefixes',
'rirs' => 'IPAM\Rirs',
'roles' => 'IPAM\Roles',
'routeTargets' => 'IPAM\RouteTargets',
'services' => 'IPAM\Services',
'vlanGroups' => 'IPAM\VlanGroups',
'vlans' => 'IPAM\Vlans',
'vrfs' => 'IPAM\Vrfs',
2022-05-31 12:56:36 +02:00
// Secrets
'keyGen' => 'Secrets\KeyGen',
'secrets' => 'Secrets\Secrets',
'secretRoles' => 'Secrets\SecretRoles',
'session' => 'Secrets\Session',
2022-05-31 12:56:36 +02:00
// Tenancy
'tenantGroups' => 'Tenancy\TenantGroups',
'tenants' => 'Tenancy\Tenants',
2022-05-31 12:56:36 +02:00
// Users
'config' => 'Users\Config',
'groups' => 'Users\Groups',
'permissions' => 'Users\Permissions',
'users' => 'Users\Users',
2022-05-31 12:56:36 +02:00
// Virtualization
'clusterGroups' => 'Virtualization\ClusterGroups',
'clusters' => 'Virtualization\Clusters',
'clusterTypes' => 'Virtualization\ClusterTypes',
'vinterfaces' => 'Virtualization\Interfaces',
'virtualMachines' => 'Virtualization\VirtualMachines',
'status' => 'Status',
2021-03-10 17:40:13 -04:00
];
2022-05-31 12:56:36 +02:00
/** @var HttpClient */
2021-03-10 17:40:13 -04:00
protected $httpClient;
/** @var array */
protected $options = [];
2022-05-31 12:56:36 +02:00
public function __construct()
{
if (strlen(getenv('NETBOX_API')) === 0 || strlen(getenv('NETBOX_API_KEY')) === 0) {
throw new RuntimeException(
sprintf(
'Environment Variables not found (NETBOX_API, NETBOX_API_KEY): "%s" "redacted(%s(%s))"',
getenv('NETBOX_API'),
gettype(getenv('NETBOX_API_KEY')),
strlen(getenv('NETBOX_API_KEY'))
),
1653901216
);
}
}
2021-03-10 17:40:13 -04:00
/**
* @param $method
* @param $args
* @return mixed
*/
public function __call($method, $args)
{
try {
return $this->api($method);
} catch (InvalidArgumentException $e) {
2022-05-31 12:56:36 +02:00
throw new BadMethodCallException(sprintf('Undefined method called: "%s"', $method));
2021-03-10 17:40:13 -04:00
}
}
/**
* @param $name
* @return mixed
*/
public function api($name)
{
if (!isset($this->classes[$name])) {
2022-05-31 12:56:36 +02:00
throw new InvalidArgumentException(sprintf('Undefined method called: "%s"', $name));
2021-03-10 17:40:13 -04:00
}
2022-05-31 12:56:36 +02:00
$class = '\\port389\\NetBox\\Api\\' . $this->classes[$name];
2021-03-10 17:40:13 -04:00
return new $class($this);
}
/**
* @return HttpClient
*/
2022-05-31 12:56:36 +02:00
public function getHttpClient(): HttpClient
2021-03-10 17:40:13 -04:00
{
if (!isset($this->httpClient)) {
$this->httpClient = new HttpClient();
}
$this->httpClient->setOptions($this->getOptions());
2022-05-31 12:56:36 +02:00
2021-03-10 17:40:13 -04:00
return $this->httpClient;
}
/**
* @return array
*/
2022-05-31 12:56:36 +02:00
public function getOptions(): array
2021-03-10 17:40:13 -04:00
{
return $this->options;
}
/**
2022-05-31 12:56:36 +02:00
* @param array $options
2021-03-10 17:40:13 -04:00
*/
2022-05-31 12:56:36 +02:00
public function setOptions(array $options)
2021-03-10 17:40:13 -04:00
{
$this->options = $options;
}
}