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
|
2021-03-12 23:37:51 -04:00
|
|
|
'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
|
2021-03-12 23:37:51 -04:00
|
|
|
'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
|
2021-03-13 14:34:15 -04:00
|
|
|
'aggregates' => 'IPAM\Aggregates',
|
2021-03-12 23:37:51 -04:00
|
|
|
'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
|
2021-03-13 09:56:03 -04:00
|
|
|
'keyGen' => 'Secrets\KeyGen',
|
2021-03-12 23:37:51 -04:00
|
|
|
'secrets' => 'Secrets\Secrets',
|
|
|
|
|
'secretRoles' => 'Secrets\SecretRoles',
|
2021-03-13 09:56:03 -04:00
|
|
|
'session' => 'Secrets\Session',
|
2021-03-12 23:37:51 -04:00
|
|
|
|
2022-05-31 12:56:36 +02:00
|
|
|
// Tenancy
|
2021-03-12 23:37:51 -04:00
|
|
|
'tenantGroups' => 'Tenancy\TenantGroups',
|
|
|
|
|
'tenants' => 'Tenancy\Tenants',
|
|
|
|
|
|
2022-05-31 12:56:36 +02:00
|
|
|
// Users
|
2021-03-13 09:56:03 -04:00
|
|
|
'config' => 'Users\Config',
|
2021-03-12 23:37:51 -04:00
|
|
|
'groups' => 'Users\Groups',
|
|
|
|
|
'permissions' => 'Users\Permissions',
|
|
|
|
|
'users' => 'Users\Users',
|
|
|
|
|
|
2022-05-31 12:56:36 +02:00
|
|
|
// Virtualization
|
2021-03-12 23:37:51 -04:00
|
|
|
'clusterGroups' => 'Virtualization\ClusterGroups',
|
|
|
|
|
'clusters' => 'Virtualization\Clusters',
|
2021-03-13 09:56:03 -04:00
|
|
|
'clusterTypes' => 'Virtualization\ClusterTypes',
|
2021-03-12 23:37:51 -04:00
|
|
|
'vinterfaces' => 'Virtualization\Interfaces',
|
2021-03-13 09:56:03 -04:00
|
|
|
'virtualMachines' => 'Virtualization\VirtualMachines',
|
2021-03-12 23:37:51 -04:00
|
|
|
|
|
|
|
|
'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;
|
|
|
|
|
}
|
|
|
|
|
}
|