Files
help365/platform/install-external-secrets-operator.html
2025-05-27 21:32:35 +04:00

310 lines
30 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<title>Install&nbsp;External&nbsp;Secrets&nbsp;Operator</title>
<meta name="generator" content="Help+Manual" />
<meta name="keywords" content="" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="The External Secrets Operator is a Kubernetes operator that integrates external secret management systems, such as HashiCorp Vault. The operator reads information from external..." />
<meta name="picture" content="" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Full documentation for BRIX365 platform. Low-code developer guide. User guide. Admin guide. Developer guide." />
<meta property="og:url" content="https://brix365.com/en/help" />
<meta property="og:image" content="" />
<link rel="icon" href="favicon.png" type="image/png" />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="./jquery-ui.min.css" />
<link rel="stylesheet" href="default.css" />
<link rel="stylesheet" href="./search-yandex.css" />
<link rel="stylesheet" href="./article.css" />
<link rel="stylesheet" href="./glossary.css" />
<link rel="stylesheet" href="./theme.css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="helpman_settings.js"></script>
<script type="text/javascript" src="helpman_topicinit.js"></script>
<script type="text/javascript" src="highlight.js"></script>
<script type="text/javascript">
$(document).ready(function(){highlight();});
</script>
</head>
<body>
<script>!function(e,t,c,n,r,a,m){e.ym=e.ym||function(){(e.ym.a=e.ym.a||[]).push(arguments)},e.ym.l=1*new Date;for(var s=0;s<document.scripts.length;s++)if(document.scripts[s].src===n)return;a=t.createElement(c),m=t.getElementsByTagName(c)[0],a.async=1,a.src=n,m.parentNode.insertBefore(a,m)}(window,document,"script","https://mc.yandex.ru/metrika/tag.js"),ym(83179930,"init",{clickmap:!0,trackLinks:!0,accurateTrackBounce:!0,webvisor:!0})</script><noscript><div><img alt=""src=https://mc.yandex.ru/watch/83179930 style=position:absolute;left:-9999px></div></noscript>
<header class="header elma-365">
<div class="container">
<a class="header__logo" href="https://brix365.com/en/help">
<img src="./logo-en.svg" alt="header logo">
</a>
<!-- <div class="hero__search-form" id="search-panel">
<form class="search-form" onsubmit="ym(83180416,'reachGoal','poisk')">
<label class="search-form__label">
<span id="reset-search" class="search__icon"></span>
<input class="search-form__input" type="text">
</label>
<input class="search-form__submit" type="submit" value="Submit">
</form>
</div> -->
<div class="hero__search-form" id="search-panel"> <form class="search-form"> <label class="search-form__label"> <span id="reset-search" class="search__icon"></span> <input class="search-form__input" type="text"> </label> <input class="search-form__submit" type="submit" value="Submit"> </form> </div>
<div class="hero__search">
<a href="#" id="search-icon" class="hero__search-icon">
<img src="search-icon-white.svg" alt="search string">
</a>
<a href="#" id="side-menu-icon" class="hero__side-icon">
<img src="side_menu.svg" alt="side menu">
</a>
</div>
<div class="header__navi">
<ul class="header__list"><li><span class="solution-select"><span class="solution-select__selected"></span><svg width="7" height="4" viewBox="0 0 7 4" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L3.5 3.5L6 1" stroke="white" stroke-linecap="round" stroke-linejoin="round"/></svg><ul class="solution-select__list"><li><a class="project-link" href="https://brix365.com/en/help/platform/get-trial.html">Platform</a></li><li><a class="project-link" href="https://brix365.com/en/help/ecm/ecm-functions.html">ECM</a></li><li><a class="project-link" href="https://brix365.com/en/help/crm/crm_overview.html">CRM</a></li><li><a class="project-link" href="https://brix365.com/en/help/service/service-functions.html">Service</a></li><li><a class="project-link" href="https://brix365.com/en/help/projects/projects-functions.html">Projects</a></li><li><a class="project-link" href="https://brix365.com/en/help/business_solutions/-elma365-store.html">Business Solutions</a></li></ul></span></li><li><a href="https://api.brix365.com/en/" target="_blank">API</a></li><li><a href="https://tssdk.brix365.com/" target="_blank">SDK</a></li></ul>
</div>
</div>
</header>
<main class="main container">
<aside class="sidebar" id="sidebar">
<div class="sidebar__header">
<a class="header__logo" href="https://brix365.com/en/help">
<img src="./logo-light-en.svg">
</a>
<span class="sidebar__close elma-365-close" id="close"></span>
</div>
<div class="sidebar__wrapper" id="side-menu">
</div>
</aside>
<article class="article" id="article">
<div class="article-inner">
<div class="content">
<header class="article__header">
<div class="article__bread" style="display:flex; gap:10px;">
<span id="subcategory" class="search-res__item-category search-res__item-category_subcategory subcategory article__badge"></span>
<div class="topic__breadcrumbs">
<p><a href="elma365-on-premises.html">BRIX On-Premises</a> &gt; <a href="elma365-enterprise.html">BRIX On-Premises Enterprise</a> &gt; Install add-on components for BRIX / Install&nbsp;External&nbsp;Secrets&nbsp;Operator</p>
</div>
</div>
<div class="topic__title"><h1 class="p_Heading1"><span class="f_Heading1">Install External Secrets Operator</span></h1>
</div>
</header>
<section class="article__content">
<div class="scroll-top-inner">
<a href="#h1-article" class="scroll-top"></a>
</div>
<!-- Placeholder for topic body. -->
<p class="p_Normal">The External Secrets Operator is a Kubernetes operator that integrates external secret management systems, such as HashiCorp Vault. The operator reads information from external APIs and automatically creates Kubernetes secrets.<br />
The installation of the External Secrets Operator consists of several steps:</p>
<ol style="list-style-type:decimal">
<li value="1" class="p_Normal"><a href="install-external-secrets-operator.html#install-helm-and-eso" class="topiclink">Download the Helm chart and configuration file for the External Secrets Operator</a>.</li><li value="2" class="p_Normal"><a href="install-external-secrets-operator.html#config-file-eso" class="topiclink">Fill out the configuration file for the External Secrets Operator</a>.</li><li value="3" class="p_Normal"><a href="install-external-secrets-operator.html#install-eso" class="topiclink">Install the External Secrets Operator using Helm in the Kubernetes cluster</a>.</li><li value="4" class="p_Normal" style="page-break-after: avoid;"><a href="install-external-secrets-operator.html#elma365-db-connections" class="topiclink">Configure the elma365-db-connections secret creation parameter in the ELMA365 Helm chart</a>.</li></ol>
<h2 class="p_Heading2"><a id="install-helm-and-eso" class="hmanchor"></a><span class="f_Heading2">Step 1: Download the Helm chart and configuration file for the External Secrets Operator</span></h2>
<p class="p_Normal">To install via the internet, obtain the configuration file <code><b>values-external-secrets.yaml</b></code> by executing the following command:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">helm&nbsp;repo&nbsp;add&nbsp;elma365&nbsp;https://charts.elma365.tech </span><br />
<span class="f_CodeExample">helm&nbsp;repo&nbsp;update</span><br />
<span class="f_CodeExample">helm&nbsp;show&nbsp;values&nbsp;elma365/external-secrets&nbsp;&gt;&nbsp;values-external-secrets.yaml</span></p>
<p class="p_Normal" style="page-break-after: avoid;"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A1')">Obtaining the configuration file for offline installation without internet access</a></p>
<div id="TOGGLE0186A1" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; line-height: 1.80; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
<tr>
<td style="vertical-align:top; padding:0; border:none"><ol style="list-style-type:decimal">
<li value="1" class="p_Normal" style="page-break-after: avoid;">On a computer with internet access, download the BRIX images and upload them to a local image registry by executing the following commands:</li></ol>
<p class="p_CodeExample" style="white-space: normal; page-break-inside: auto; page-break-after: avoid;"><span class="f_CodeExample">helm repo add elma365 https://charts.elma365.tech </span><br />
<span class="f_CodeExample">helm repo update</span><br />
<span class="f_CodeExample">helm pull elma365/external-secrets</span></p>
<p class="p_Normal" style="page-break-after: avoid;">&nbsp;<br />
For more details see <a href="downloadin-images-elma365.html" class="topiclink">Download BRIX images</a>.</p>
<ol style="list-style-type:decimal">
<li value="2" class="p_Normal" style="page-break-after: avoid;">Copy the downloaded archive of the chart <span style="font-weight: bold;">external-secrets-X.Y.Z.tgz</span> to the server where the installation will take place.</li><li value="3" class="p_Normal" style="page-break-after: avoid;">Unpack the chart and copy the default configuration file <code><b>values.yaml</b></code> to <code><b>values-external-secrets.yaml</b></code>:</li></ol>
<p class="p_CodeExample" style="white-space: normal; page-break-inside: auto; page-break-after: avoid;"><span class="f_CodeExample">tar -xf external-secrets-X.Y.Z.tgz</span><br />
<span class="f_CodeExample">cp external-secrets/values.yaml values-external-secrets.yaml</span></p>
</td>
</tr>
</table>
</div>
<h2 class="p_Heading2"><a id="config-file-eso" class="hmanchor"></a><span class="f_Heading2">Step 2: Fill out the configuration file for the External Secrets Operator</span></h2>
<p class="p_Normal">Fill out the <code><b>values-external-secrets.yaml</b></code> configuration file for installing the <span style="font-weight: bold;">external-secrets</span> service:</p>
<ol style="list-style-type:decimal">
<li value="1" class="p_Normal">In parameter <code><b>namespace</b></code> specify the <code><b>namespace</b></code> where BRIX is installed.</li><li value="2" class="p_Normal">In parameter <code><b>serverVault</b></code> replace <span style="font-weight: bold;">http://vault-server.vault:8200/</span> with the address, where the <span style="font-weight: bold;">Vault</span> service is accessible. In the example below, the <span style="font-weight: bold;">Vault</span> service is installed in in Kubernetes in the <span style="font-weight: bold;">vault</span> <code><b>namespace</b></code>.</li><li value="3" class="p_Normal">In parameters <code><b>kvPath</b></code>, <code><b>keyPath</b></code> and <code><b>kvVersion</b></code> specify the <code><b>kv</b></code> secret management mechanism in <span style="font-weight: bold;">Vault</span>.</li><li value="4" class="p_Normal">In parameters <code><b>authKubernetesRole</b></code> and <code><b>authKubernetesServiceAccount</b></code> specify the service account and role that link the policy to the Kubernetes service account.</li><li value="5" class="p_Normal">In parameters of the <code><b>key</b></code> section, specify the secret keys in <span style="font-weight: bold;">Vault</span>.</li></ol>
<p class="p_CodeExample" style="white-space: normal; page-break-inside: auto; page-break-after: avoid;"><span class="f_CodeExample"># external-secrets settings</span><br />
<span class="f_CodeExample">external-secrets:</span><br />
<span class="f_CodeExample"># Configure secret for elma365-db-connections</span><br />
<span class="f_CodeExample">  elma365DBConnections:</span><br />
<span class="f_CodeExample"># namespace, where BRIX will be installed and the secret will be created (must be created before installation)</span><br />
<span class="f_CodeExample">  &nbsp; namespace: elma365</span><br />
<span class="f_CodeExample"># vault server address</span><br />
<span class="f_CodeExample">  &nbsp; serverVault: &quot;http://vault-server.vault:8200&quot;</span><br />
<span class="f_CodeExample"># path where the kv secret mechanism is enabled</span><br />
<span class="f_CodeExample">  &nbsp; kvPath: &quot;secret&quot;</span><br />
<span class="f_CodeExample"># path to the secret in vault</span><br />
<span class="f_CodeExample">  &nbsp; keyPath: &quot;elma365/db&quot;</span><br />
<span class="f_CodeExample"># version of the kv secret mechanism</span><br />
<span class="f_CodeExample">  &nbsp; kvVersion: &quot;v2&quot;</span><br />
<span class="f_CodeExample"># role that link the policy to the Kubernetes service account</span><br />
<span class="f_CodeExample">  &nbsp; authKubernetesRole: &quot;read-secret-elma365&quot;</span><br />
<span class="f_CodeExample"># service account in the Kubernetes cluster</span><br />
<span class="f_CodeExample">  &nbsp; authKubernetesServiceAccount: &quot;vault-auth&quot;</span><br />
<span class="f_CodeExample"># secret keys in vault</span><br />
<span class="f_CodeExample">  &nbsp; key:</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; psqlUrl: PSQL_URL</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; roPsqlUrl: RO_POSTGRES_URL</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; mongoUrl: MONGO_URL</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; amqpUrl: AMQP_URL</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; redisUrl: REDIS_URL</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; vahterMongoUrl: VAHTER_MONGO_URL</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; s3BackendAddress: S3_BACKEND_ADDRESS</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; s3BackendRegion: S3_REGION</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; s3Bucket: S3_BUCKET</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; s3Key: S3_KEY</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; s3SecretAccessKey: S3_SECRET</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; s3SslEnabled: S3_SSL_ENABLED</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; s3Method: S3_UPLOAD_METHOD</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; s3DumpUrl: S3_DUMP_URL</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; s3VirtualHostedStyleEnabled: S3_VIRTUAL_HOSTED_STYLE_ENABLED</span><br />
<span class="f_CodeExample"># number of replicas for high availability</span><br />
<span class="f_CodeExample">  replicaCount: 1</span><br />
<span class="f_CodeExample"># CRD are applied automatically from the /crds directory</span><br />
<span class="f_CodeExample">  installCRDs: false</span><br />
<span class="f_CodeExample">...</span></p>
<p class="p_Normal"><a class="dropdown-toggle" style="font-style: normal; font-weight: normal; color: #000000; background-color: transparent; text-decoration: none;" href="javascript:HMToggle('toggle','TOGGLE0186A2')">Filling in the connection parameters for a private registry without internet access involves the following steps:</a></p>
<div id="TOGGLE0186A2" class="dropdown-toggle-body" style="text-align: left; text-indent: 0; line-height: 1.80; padding: 0 0 0 0; margin: 0 0 0 0;"><table style="border:none; border-spacing:0;">
<tr>
<td style="vertical-align:top; padding:0; border:none"><p class="p_Normal" style="page-break-after: avoid;">&nbsp;<br />
To connect to a private <span style="font-weight: bold;">registry</span>:</p>
<ol style="list-style-type:decimal">
<li value="1" class="p_Normal" style="page-break-after: avoid;">Download the BRIX images and upload them to a local image registry. For more details, see <a href="downloadin-images-elma365.html" class="topiclink">Download BRIX images</a>.</li><li value="2" class="p_Normal" style="page-break-after: avoid;">Specify the address and path in parameters <code><b>image.repository</b></code>, <code><b>webhook.image.repository</b></code>, <code><b>certController.image.repository</b></code>.</li><li value="3" class="p_Normal" style="page-break-after: avoid;">Indicate the name of the secret with access rights to the private <span style="font-weight: bold;">registry</span> in the parameter <code><b>imagePullSecrets</b></code>. he secret must be created manually and encoded in Base64.</li></ol>
<p class="p_CodeExample" style="white-space: normal; page-break-inside: auto; page-break-after: avoid;"><span class="f_CodeExample"># Settings for external-secrets</span><br />
<span class="f_CodeExample">external-secrets:</span><br />
<span class="f_CodeExample">...</span><br />
<span class="f_CodeExample"># Parameters for connecting to the private registry</span><br />
<span class="f_CodeExample">  image:</span><br />
<span class="f_CodeExample">  &nbsp; repository: hub.elma365.tech/docker/addons/external-secrets/external-secrets</span><br />
<span class="f_CodeExample">  &nbsp; tag: v0.10.2</span><br />
<span class="f_CodeExample"># The secret with access rights to the private registry must be created manually and encoded in Base64</span><br />
<span class="f_CodeExample">  imagePullSecrets:</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; - name: &quot;myRegistryKeySecretName&quot;</span><br />
<span class="f_CodeExample">  webhook:</span><br />
<span class="f_CodeExample"># Parameters for connecting to the private registry</span><br />
<span class="f_CodeExample">  &nbsp; image:</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; repository: hub.elma365.tech/docker/addons/external-secrets/external-secrets</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; tag: v0.10.2</span><br />
<span class="f_CodeExample"># The secret with access rights to the private registry must be created manually and encoded in Base64</span><br />
<span class="f_CodeExample">  &nbsp; imagePullSecrets:</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; - name: &quot;myRegistryKeySecretName&quot;</span><br />
<span class="f_CodeExample">  certController:</span><br />
<span class="f_CodeExample"># Parameters for connecting to the private registry</span><br />
<span class="f_CodeExample">  &nbsp; image:</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; repository: hub.elma365.tech/docker/addons/external-secrets/external-secrets</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; tag: v0.10.2</span><br />
<span class="f_CodeExample"># The secret with access rights to the private registry must be created manually and encoded in Base64</span><br />
<span class="f_CodeExample">  &nbsp; imagePullSecrets:</span><br />
<span class="f_CodeExample">  &nbsp; &nbsp; - name: &quot;myRegistryKeySecretName&quot;</span></p>
<p class="p_Normal" style="page-break-after: avoid;">where the format of <span style="font-weight: bold;">repository </span>is:</p>
<ul style="list-style-type:disc">
<li class="p_Normal" style="page-break-after: avoid;">address is <code><b>hub.elma365.tech</b></code>;</li><li class="p_Normal" style="page-break-after: avoid;">path is <code><b>docker/addons/external-secrets/external-secrets</b></code>.</li></ul>
</td>
</tr>
</table>
</div>
<h2 class="p_Heading2"><a id="install-eso" class="hmanchor"></a><span class="f_Heading2">Step 3: Install the External Secrets Operator using Helm in the Kubernetes cluster</span></h2>
<p class="p_Normal">Install the <span style="font-weight: bold;">external-secrets</span> service in a separate <code><b>namespace</b></code>, for example, <span style="font-weight: bold;">external-secrets</span>. This <code><b>Namespace</b></code> will be created during installation if it doesn't already exist.</p>
<p class="p_Normal">To install via the internet, execute the command:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">helm&nbsp;upgrade&nbsp;--install&nbsp;external-secrets&nbsp;elma365/external-secrets&nbsp;-f&nbsp;values-external-secrets.yaml&nbsp;-n&nbsp;external-secrets&nbsp;--create-namespace </span></p>
<p class="p_Normal">For offline installation without internet access, navigate to the directory with the downloaded chart and execute the command:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">helm&nbsp;upgrade&nbsp;--install&nbsp;external-secrets&nbsp;./external-secrets&nbsp;-f&nbsp;values-external-secrets.yaml&nbsp;-n&nbsp;external-secrets&nbsp;--create-namespace</span></p>
<p class="p_Normal">Make sure that the <span style="font-weight: bold;">external-secrets</span> service has been created:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl&nbsp;get&nbsp;external-secrets&nbsp;-n&nbsp;elma365</span></p>
<p class="p_Normal">Check the created secret:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">kubectl&nbsp;describe&nbsp;secrets&nbsp;elma365-db-connections&nbsp;-n&nbsp;elma365 </span></p>
<h2 class="p_Heading2"><a id="elma365-db-connections" class="hmanchor"></a><span class="f_Heading2">Step 4: Configure the elma365-db-connections secret creation parameter in the ELMA365 Helm chart</span></h2>
<p class="p_Normal">Before installing or upgrading the BRIX Helm chart, you need to disable the creation of the <code><b>elma365-db-connections</b></code> secret with the <code><b>values-elma365.yaml</b></code> configuration file parameters. To do this, set the <code><b>false</b></code> value to false in the parameter <code><b>db.enabled</b></code> in <code><b>values-elma365.yaml</b></code>.</p>
<p class="p_Normal">For more details on installing and updating BRIX, see <a href="installing-elma365-enterprise.html" class="topiclink">Install BRIX Enterprise</a> and <a href="version-update-enterprise.html" class="topiclink">Update version of BRIX Enterprise</a>.</p>
<h2 class="p_Heading2"><span class="f_Heading2">Uninstall the External Secrets Operator chart using Helm in the Kubernetes Cluster</span></h2>
<p class="p_Normal">To remove the <span style="font-weight: bold;">external-secrets</span> service in the <span style="font-weight: bold;">external-secrets</span> <code><b>namespace</b></code>, run the following command:</p>
<p class="p_CodeExample" style="page-break-inside: avoid;"><span class="f_CodeExample">helm&nbsp;uninstall&nbsp;external-secrets&nbsp;-n&nbsp;external-secrets</span></p>
<div class="bottom-nav">
<a id="prev-link" class="topic__navi_prev" href="install-vault.html">
<span class="bottom-nav__arrow bottom-nav__arrow--prev"></span> <span
class="bottom-nav__link">install-vault.html</span>
</a>
<a id="next-link" class="topic__navi_next" href="elma365-on-premises-standard.html">
<span class="bottom-nav__link">elma365-on-premises-standard.html</span> <span
class="bottom-nav__arrow bottom-nav__arrow--next"></span>
</a>
</div>
<!-- добавляет на страницу строку блок Была ли статья полезной? -->
<div class="feedback" id="feedback"><div class="feedback-help"><span><b>Was this helpful?</b></span><form action="" method="POST" class="feedback-form" id="feedback-form"><div class="feedback__popup feedback__popup-response" id="feedback__popup_thx" style="display: none;">Thanks for your feedback!</div><div class="feedback__popup" id="feedback__popup_why" style="display: none;"><div class="feedback__popup-header">Please specify why:</div><input type="radio" name="category" id="bad_recommendation" value="bad_recommendation"><label for="bad_recommendation">Recommendations did not help me</label><input type="radio" name="category" id="difficult_text" value="difficult_text"><label for="difficult_text">Article is hard to understand</label><input type="radio" name="category" id="no_answer" value="no_answer"><label for="no_answer">Didn`t answer my question</label><input type="radio" name="category" id="bad_header" value="bad_header"><label for="bad_header">Content does not match the topic</label><input type="radio" name="category" id="other_reason" value="other_reason"><label for="other_reason">Other</label></div><div class="feedback__popup" id="feedback__popup-other" style="display: none;"><div class="feedback__popup-header">How we can improve it?</div><textarea class="feedback__textarea" name="other" id=""></textarea><input type="submit" class="feedback__other-btn" value="Submit"></div><div class="feedback-form__btn-group"><input type="radio" name="useful" id="feedback__useful_yes" value="true"><label for="feedback__useful_yes"><img src="like.svg" class="small-img" alt="like"><spanclass="feedback-form__btn-group_yes-btn">Yes</spanclass="feedback-form__btn-group_yes-btn"></label><input type="radio" name="useful" id="feedback__useful_no" value="false"><label for="feedback__useful_no"><img src="dislike.svg" class="small-img" alt="dislike"><spanclass="feedback-form__btn-group_no-btn">No</spanclass="feedback-form__btn-group_no-btn"></label></div><select name="category"><option disabled="">Please specify why</option><option value="bad_recommendation" selected="">Recommendations did not help me</option><option value="difficult_text">Article is hard to understand</option><option value="no_answer">Didn`t answer my question</option><option value="bad_header">Content does not match the topic</option><option value="other_reason">Other</option></select><input type="submit"></form></div><div class="found_typo"><p style="margin: 0px; margin-top: 16px !important;"><span><b>Found a typo?</b></span> Select it and press <i>Ctrl+Enter</i> to send us feedback</p></div></div>
</section>
</div>
<aside class="article__sidebar" style="display:none">
<input type="checkbox" />
<div class="article__arrow"></div>
<div class="table-of-contents elma365-right" id="toc2Content">
<h3 class="h3-toc">In this topic</h3>
<nav id="toc2"></nav>
</div>
</aside>
</div>
</article>
</main>
<footer class="footer">
<div class="footer-container">
<div class="footer-mobile">
<ul class="footer-mobile__list"><li><a href="https://brix365.com/en/" target="_blank">BRIX</a></li><li><a href="https://tssdk.brix365.com/en/latest/" target="_blank">SDK</a></li><li><a href="https://api.brix365.com/en/" target="_blank">API</a></li></ul><ul class="footer-mobile__list"><li><a href="https://brix365.com/en/help/platform/get-trial.html">Platform</a></li><li><a href="https://brix365.com/en/help/ecm/ecm-functions.html">ECM</a></li><li><a href="https://brix365.com/en/help/service/service-functions.html">Service</a></li><li><a href="https://brix365.com/en/help/projects/projects-functions.html">Projects</a></li></ul>
</div>
<div class="footer-wrap">
<div><span class="mobile-question-popup">Send feedback</span><form method="POST" action class="question__popup question-xs" id="question__popup"><div class="question-wrap"><span class="close"></span><span class="title">Ask a question</span><label for="help_question" style="display: none;"></label><textarea name="help_question" id="help_question"></textarea><input type="submit" value="Send"></div></form><div class="hidden fade-in question-success-xs">Sent</div></div>
<div class="footer-flex-b">
<span class="footer-copy">&copy; 2025 BRIX</span>
<ul class="footer-list">
<li class="footer-item">
<a href="#" class="arrow-top" style="display: block;"></a>
</li>
</ul>
</div>
</div>
</div>
</footer>
<iframe name="hmnavigation" style="display:none!important"></iframe>
<script src="./jquery-ui.js"></script>
<!--script src="//cdn.jsdelivr.net/npm/featherlight@1.7.14/release/featherlight.min.js" type="text/javascript" charset="utf-8"></script-->
<script src="./jquery.tocify.min.js"></script>
<script src="./TypoReporter.min.js"></script>
<script src="./google-search.js"></script>
<script src="./main.js"></script>
<script type="text/javascript">
HMInitToggle('TOGGLE0186A1','hm.type','dropdown','hm.state','0');
HMInitToggle('TOGGLE0186A2','hm.type','dropdown','hm.state','0');
</script>
</body>
</html>