icingaweb2-module-director/library/Director/Objects/IcingaEndpoint.php

158 lines
4 KiB
PHP
Raw Permalink Normal View History

2015-06-01 11:26:09 -04:00
<?php
namespace Icinga\Module\Director\Objects;
use Icinga\Module\Director\Core\CoreApi;
use Icinga\Module\Director\Core\LegacyDeploymentApi;
use Icinga\Module\Director\Core\RestApiClient;
use Icinga\Module\Director\Exception\NestingError;
use Icinga\Module\Director\IcingaConfig\IcingaConfig;
use InvalidArgumentException;
use RuntimeException;
2015-06-01 11:26:09 -04:00
class IcingaEndpoint extends IcingaObject
{
protected $table = 'icinga_endpoint';
2015-06-29 05:11:56 -04:00
protected $supportsImports = true;
2021-10-05 12:19:01 -04:00
protected $uuidColumn = 'uuid';
protected $defaultProperties = [
'id' => null,
2021-10-05 12:19:01 -04:00
'uuid' => null,
'zone_id' => null,
'object_name' => null,
'object_type' => null,
'disabled' => 'n',
'host' => null,
'port' => null,
'log_duration' => null,
'apiuser_id' => null,
];
protected $relations = [
'zone' => 'IcingaZone',
'apiuser' => 'IcingaApiUser',
];
public function hasApiUser()
{
return $this->getResolvedProperty('apiuser_id') !== null;
}
public function getApiUser()
{
$id = $this->getResolvedProperty('apiuser_id');
if ($id === null) {
throw new RuntimeException('Trying to get API User for Endpoint without such: ' . $this->getObjectName());
}
return $this->getRelatedObject('apiuser', $id);
}
2016-11-01 13:28:36 -04:00
/**
* Return a core API, depending on the configuration format
*
* @return CoreApi|LegacyDeploymentApi
2016-11-01 13:28:36 -04:00
*/
public function api()
{
$format = $this->connection->settings()->config_format;
if ($format === 'v2') {
$api = new CoreApi($this->getRestApiClient());
$api->setDb($this->getConnection());
return $api;
2017-01-13 13:47:54 -05:00
} elseif ($format === 'v1') {
return new LegacyDeploymentApi($this->connection);
2017-01-13 13:47:54 -05:00
} else {
throw new InvalidArgumentException("Unsupported config format: $format");
}
}
/**
* @return RestApiClient
*/
public function getRestApiClient()
{
$client = new RestApiClient(
$this->getResolvedProperty('host', $this->getObjectName()),
$this->getResolvedProperty('port')
);
$user = $this->getApiUser();
$client->setCredentials(
2017-03-28 14:56:10 -04:00
// TODO: $user->client_dn,
$user->object_name,
$user->password
);
return $client;
}
public function getRenderingZone(?IcingaConfig $config = null)
{
try {
if ($zone = $this->getResolvedRelated('zone')) {
return $zone->getRenderingZone($config);
}
} catch (NestingError $e) {
return self::RESOLVE_ERROR;
}
return parent::getRenderingZone($config);
}
/**
* @return int
*/
public function getResolvedPort()
{
$port = $this->getSingleResolvedProperty('port');
if (null === $port) {
return 5665;
} else {
return (int) $port;
}
}
public function getDescriptiveUrl()
{
return sprintf(
'https://%s@%s:%d/v1/',
$this->getApiUser()->getObjectName(),
$this->getResolvedProperty('host', $this->getObjectName()),
$this->getResolvedPort()
);
}
2016-02-26 05:58:37 -05:00
/**
* Use duration time renderer helper
*
* Avoid complaints for method names with underscore:
* @codingStandardsIgnoreStart
*
* @return string
*/
protected function renderLog_duration()
{
2016-02-26 05:58:37 -05:00
// @codingStandardsIgnoreEnd
2015-12-03 12:02:57 -05:00
return $this->renderPropertyAsSeconds('log_duration');
}
2016-02-26 05:58:37 -05:00
/**
* Internal property, will not be rendered
*
* Avoid complaints for method names with underscore:
* @codingStandardsIgnoreStart
*
* @return string
*/
protected function renderApiuser_id()
{
2016-02-26 05:58:37 -05:00
// @codingStandardsIgnoreEnd
return '';
}
2015-06-01 11:26:09 -04:00
}