diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:43:12 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:43:12 +0000 |
commit | cd989f9c3aff968e19a3aeabc4eb9085787a6673 (patch) | |
tree | fbff2135e7013f196b891bbde54618eb050e4aaf /library/Director/Objects/IcingaEndpoint.php | |
parent | Initial commit. (diff) | |
download | icingaweb2-module-director-upstream.tar.xz icingaweb2-module-director-upstream.zip |
Adding upstream version 1.10.2.upstream/1.10.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'library/Director/Objects/IcingaEndpoint.php')
-rw-r--r-- | library/Director/Objects/IcingaEndpoint.php | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/library/Director/Objects/IcingaEndpoint.php b/library/Director/Objects/IcingaEndpoint.php new file mode 100644 index 0000000..030183b --- /dev/null +++ b/library/Director/Objects/IcingaEndpoint.php @@ -0,0 +1,157 @@ +<?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; + +class IcingaEndpoint extends IcingaObject +{ + protected $table = 'icinga_endpoint'; + + protected $supportsImports = true; + + protected $uuidColumn = 'uuid'; + + protected $defaultProperties = [ + 'id' => null, + '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); + } + + /** + * Return a core API, depending on the configuration format + * + * @return CoreApi|LegacyDeploymentApi + */ + public function api() + { + $format = $this->connection->settings()->config_format; + if ($format === 'v2') { + $api = new CoreApi($this->getRestApiClient()); + $api->setDb($this->getConnection()); + + return $api; + } elseif ($format === 'v1') { + return new LegacyDeploymentApi($this->connection); + } 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( + // 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() + ); + } + + /** + * Use duration time renderer helper + * + * Avoid complaints for method names with underscore: + * @codingStandardsIgnoreStart + * + * @return string + */ + protected function renderLog_duration() + { + // @codingStandardsIgnoreEnd + return $this->renderPropertyAsSeconds('log_duration'); + } + + /** + * Internal property, will not be rendered + * + * Avoid complaints for method names with underscore: + * @codingStandardsIgnoreStart + * + * @return string + */ + protected function renderApiuser_id() + { + // @codingStandardsIgnoreEnd + return ''; + } +} |