From cd989f9c3aff968e19a3aeabc4eb9085787a6673 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 14:43:12 +0200 Subject: Adding upstream version 1.10.2. Signed-off-by: Daniel Baumann --- library/Director/Objects/IcingaEndpoint.php | 157 ++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 library/Director/Objects/IcingaEndpoint.php (limited to 'library/Director/Objects/IcingaEndpoint.php') 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 @@ + 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 ''; + } +} -- cgit v1.2.3