aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch
diff options
context:
space:
mode:
authoriddqd <iddqd@yandex-team.com>2024-06-11 10:12:13 +0300
committeriddqd <iddqd@yandex-team.com>2024-06-11 10:22:43 +0300
commit07f57e35443ab7f09471caf2dbf1afbcced4d9f7 (patch)
treea4a7b66ead62e83fa988a2ec2ce6576311c1f4b1 /contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch
parent6db3b8ca95e44179e48306a58656fb1f9317d9c3 (diff)
downloadydb-07f57e35443ab7f09471caf2dbf1afbcced4d9f7.tar.gz
add contrib/python/yandexcloud to import
03b7d3cad2237366b55b393e18d4dc5eb222798c
Diffstat (limited to 'contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch')
-rw-r--r--contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/auth.proto51
-rw-r--r--contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/auth_service.proto158
-rw-r--r--contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/backup.proto38
-rw-r--r--contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/backup_service.proto54
-rw-r--r--contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/cluster.proto268
-rw-r--r--contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/cluster_service.proto884
-rw-r--r--contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/config/elasticsearch.proto59
-rw-r--r--contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/extension.proto30
-rw-r--r--contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/extension_service.proto144
-rw-r--r--contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/maintenance.proto42
-rw-r--r--contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/resource_preset.proto21
-rw-r--r--contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/resource_preset_service.proto55
-rw-r--r--contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/user.proto25
-rw-r--r--contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/user_service.proto158
14 files changed, 1987 insertions, 0 deletions
diff --git a/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/auth.proto b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/auth.proto
new file mode 100644
index 0000000000..38eef4acb6
--- /dev/null
+++ b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/auth.proto
@@ -0,0 +1,51 @@
+syntax = "proto3";
+
+package yandex.cloud.mdb.elasticsearch.v1;
+
+import "yandex/cloud/validation.proto";
+
+option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/elasticsearch/v1;elasticsearch";
+option java_package = "yandex.cloud.api.mdb.elasticsearch.v1";
+
+message AuthProviders {
+ repeated AuthProvider providers = 1;
+}
+
+message AuthProvider {
+ enum Type {
+ TYPE_UNSPECIFIED = 0;
+ NATIVE = 1;
+ SAML = 2;
+ // OPENID = 3;
+ // ANONYMOUS = 4;
+ }
+
+ Type type = 1;
+ string name = 2 [(length) = "<=50", (pattern) = "[a-z][a-z0-9_-]*"];
+ int64 order = 3;
+ bool enabled = 4;
+
+ // selector ui settings
+ bool hidden = 5;
+ string description = 6 [(length) = "<=50"];
+ string hint = 7 [(length) = "<=250"];
+ string icon = 8 [(length) = "<=250"];
+
+ oneof settings {
+ SamlSettings saml = 9;
+ }
+}
+
+message SamlSettings {
+ string idp_entity_id = 1 [(length) = "<=250"];
+ bytes idp_metadata_file = 2 [(length) = "<=10000"];
+
+ string sp_entity_id = 3 [(length) = "<=250"];
+ string kibana_url = 4 [(length) = "<=250"];
+
+ string attribute_principal = 5 [(length) = "<=50"];
+ string attribute_groups = 6 [(length) = "<=50"];
+ string attribute_name = 7 [(length) = "<=50"];
+ string attribute_email = 8 [(length) = "<=50"];
+ string attribute_dn = 9 [(length) = "<=50"];
+}
diff --git a/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/auth_service.proto b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/auth_service.proto
new file mode 100644
index 0000000000..0f9741184b
--- /dev/null
+++ b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/auth_service.proto
@@ -0,0 +1,158 @@
+syntax = "proto3";
+
+package yandex.cloud.mdb.elasticsearch.v1;
+
+import "google/api/annotations.proto";
+import "yandex/cloud/api/operation.proto";
+import "yandex/cloud/operation/operation.proto";
+import "yandex/cloud/validation.proto";
+import "yandex/cloud/mdb/elasticsearch/v1/auth.proto";
+
+option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/elasticsearch/v1;elasticsearch";
+option java_package = "yandex.cloud.api.mdb.elasticsearch.v1";
+
+// A set of methods for managing Elasticsearch Authentication resources.
+service AuthService {
+
+ // Retrieves the list of registered auth providers for Elasticsearch cluster.
+ rpc ListProviders (ListAuthProvidersRequest) returns (ListAuthProvidersResponse) {
+ option (google.api.http) = { get: "/managed-elasticsearch/v1/clusters/{cluster_id}/auth/providers" };
+ }
+
+ // Returns registered auth provider by name.
+ rpc GetProvider (GetAuthProviderRequest) returns (AuthProvider) {
+ option (google.api.http) = { get: "/managed-elasticsearch/v1/clusters/{cluster_id}/auth/providers/{name}" };
+ }
+
+ // Adds new auth providers to Elasticsearch cluster.
+ rpc AddProviders (AddAuthProvidersRequest) returns (operation.Operation) {
+ option (google.api.http) = { post: "/managed-elasticsearch/v1/clusters/{cluster_id}/auth/providers" body: "*"};
+ option (yandex.cloud.api.operation) = {
+ metadata: "AddAuthProvidersMetadata"
+ response: "AuthProviders"
+ };
+ }
+
+ // Replase the list of auth providers.
+ rpc UpdateProviders (UpdateAuthProvidersRequest) returns (operation.Operation) {
+ option (google.api.http) = { put: "/managed-elasticsearch/v1/clusters/{cluster_id}/auth/providers" body: "*"};
+ option (yandex.cloud.api.operation) = {
+ metadata: "UpdateAuthProvidersMetadata"
+ response: "AuthProviders"
+ };
+ }
+
+ // Removes auth providers from Elasticsearch cluster by name.
+ rpc DeleteProviders (DeleteAuthProvidersRequest) returns (operation.Operation) {
+ option (google.api.http) = { delete: "/managed-elasticsearch/v1/clusters/{cluster_id}/auth/providers"};
+ option (yandex.cloud.api.operation) = {
+ metadata: "DeleteAuthProvidersMetadata"
+ response: "google.protobuf.Empty"
+ };
+ }
+
+ // Updates registered auth provider.
+ rpc UpdateProvider (UpdateAuthProviderRequest) returns (operation.Operation) {
+ option (google.api.http) = { put: "/managed-elasticsearch/v1/clusters/{cluster_id}/auth/providers/{name}" body: "*"};
+ option (yandex.cloud.api.operation) = {
+ metadata: "UpdateAuthProvidersMetadata"
+ response: "AuthProviders"
+ };
+ }
+
+ // Removes auth provider from Elasticsearch cluster by name.
+ rpc DeleteProvider (DeleteAuthProviderRequest) returns (operation.Operation) {
+ option (google.api.http) = { delete: "/managed-elasticsearch/v1/clusters/{cluster_id}/auth/providers/{name}"};
+ option (yandex.cloud.api.operation) = {
+ metadata: "DeleteAuthProvidersMetadata"
+ response: "google.protobuf.Empty"
+ };
+ }
+
+}
+
+
+message ListAuthProvidersRequest {
+ // Required. ID of the ElasticSearch cluster.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+}
+
+message ListAuthProvidersResponse {
+ // List of auth providers of the Elasticsearch cluster.
+ repeated AuthProvider providers = 1;
+}
+
+message GetAuthProviderRequest {
+ // Required. ID of the ElasticSearch cluster.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // Required. Name of the provider to delete.
+ string name = 2 [(required) = true, (length) = "<=50", (pattern) = "[a-z][a-z0-9_-]*"];
+}
+
+message AddAuthProvidersRequest {
+ // Required. ID of the ElasticSearch cluster.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // Required. List of providers to add.
+ repeated AuthProvider providers = 2 [(size) ="<=10"];
+}
+
+message UpdateAuthProvidersRequest {
+ // Required. ID of the ElasticSearch cluster.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // Required. List of providers to set.
+ repeated AuthProvider providers = 2 [(size) ="<=10"];
+}
+
+message DeleteAuthProvidersRequest {
+ // Required. ID of the ElasticSearch cluster.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // Required. List of providers to delete.
+ repeated string provider_names = 2 [(size) ="<=10", (length) = "<=50", (pattern) = "[a-z][a-z0-9_-]*"];
+}
+
+message UpdateAuthProviderRequest {
+ // Required. ID of the ElasticSearch cluster.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // Required. Name of the provider to update.
+ string name = 2 [(required) = true, (length) = "<=50", (pattern) = "[a-z][a-z0-9_-]*"];
+
+ // Required. New provider defenition.
+ AuthProvider provider = 3 [(required) = true];
+}
+
+message DeleteAuthProviderRequest {
+ // Required. ID of the ElasticSearch cluster.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // Required. Name of the provider to delete.
+ string name = 2 [(required) = true, (length) = "<=50", (pattern) = "[a-z][a-z0-9_-]*"];
+}
+
+message AddAuthProvidersMetadata {
+ // ID of the ElasticSearch cluster.
+ string cluster_id = 1;
+
+ // Names of the providers being added.
+ repeated string names = 2;
+}
+
+message UpdateAuthProvidersMetadata {
+ // ID of the ElasticSearch cluster.
+ string cluster_id = 1;
+
+ // Names of the providers being added.
+ repeated string names = 2;
+}
+
+message DeleteAuthProvidersMetadata {
+ // ID of the ElasticSearch cluster.
+ string cluster_id = 1;
+
+ // Names of the providers being removed.
+ repeated string names = 2;
+}
diff --git a/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/backup.proto b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/backup.proto
new file mode 100644
index 0000000000..3cd55343c7
--- /dev/null
+++ b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/backup.proto
@@ -0,0 +1,38 @@
+syntax = "proto3";
+
+package yandex.cloud.mdb.elasticsearch.v1;
+
+import "google/protobuf/timestamp.proto";
+import "yandex/cloud/validation.proto";
+
+option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/elasticsearch/v1;elasticsearch";
+option java_package = "yandex.cloud.api.mdb.elasticsearch.v1";
+
+message Backup {
+ // Required. ID of the backup.
+ string id = 1;
+
+ // ID of the folder that the backup belongs to.
+ string folder_id = 2;
+
+ // ID of the associated Elasticsearch cluster.
+ string source_cluster_id = 3;
+
+ // The time when the backup operation was started.
+ google.protobuf.Timestamp started_at = 4;
+
+ // The time when the backup was created (i.e. when the backup operation completed).
+ google.protobuf.Timestamp created_at = 5;
+
+ // Indices names. (max 100)
+ repeated string indices = 6 [(size) = "<=100"];
+
+ // Elasticsearch version used to create the snapshot
+ string elasticsearch_version = 7;
+
+ // Total size of all indices in backup. in bytes
+ int64 size_bytes = 8;
+
+ // Total count of indices in backup
+ int64 indices_total = 9;
+}
diff --git a/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/backup_service.proto b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/backup_service.proto
new file mode 100644
index 0000000000..fa1f83efa3
--- /dev/null
+++ b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/backup_service.proto
@@ -0,0 +1,54 @@
+syntax = "proto3";
+
+package yandex.cloud.mdb.elasticsearch.v1;
+
+import "google/api/annotations.proto";
+import "yandex/cloud/validation.proto";
+import "yandex/cloud/mdb/elasticsearch/v1/backup.proto";
+
+option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/elasticsearch/v1;elasticsearch";
+option java_package = "yandex.cloud.api.mdb.elasticsearch.v1";
+
+service BackupService {
+ // Returns the specified backup of Elasticsearch cluster.
+ rpc Get (GetBackupRequest) returns (Backup) {
+ option (google.api.http) = { get: "/managed-elasticsearch/v1/backups/{backup_id}" };
+ }
+
+ // Returns the list of available backups for the specified Elasticsearch cluster.
+ rpc List (ListBackupsRequest) returns (ListBackupsResponse) {
+ option (google.api.http) = { get: "/managed-elasticsearch/v1/backups" };
+ }
+}
+
+message GetBackupRequest {
+ // Required. ID of the backup to return.
+ string backup_id = 1 [(required) = true];
+}
+
+message ListBackupsRequest {
+ // Required. ID of the folder to list backups in.
+ string folder_id = 1 [(required) = true, (length) = "<=50"];
+
+ // The maximum number of results per page that should be returned. If the number of available
+ // results is larger than `page_size`, the service returns a `next_page_token` that can be used
+ // to get the next page of results in subsequent ListBackups requests.
+ // Acceptable values are 0 to 1000, inclusive. Default value: 100.
+ int64 page_size = 2 [(value) = "0-1000"];
+
+ // Page token. Set `page_token` to the `next_page_token` returned by a previous ListBackups
+ // request to get the next page of results.
+ string page_token = 3 [(length) = "<=100"];
+}
+
+message ListBackupsResponse {
+ // Requested list of backups.
+ repeated Backup backups = 1;
+
+ // This token allows you to get the next page of results for ListBackups requests,
+ // if the number of results is larger than `page_size` specified in the request.
+ // To get the next page, specify the value of `next_page_token` as a value for
+ // the `page_token` parameter in the next ListBackups request. Subsequent ListBackups
+ // requests will have their own `next_page_token` to continue paging through the results.
+ string next_page_token = 2;
+}
diff --git a/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/cluster.proto b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/cluster.proto
new file mode 100644
index 0000000000..e2662146b6
--- /dev/null
+++ b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/cluster.proto
@@ -0,0 +1,268 @@
+syntax = "proto3";
+
+package yandex.cloud.mdb.elasticsearch.v1;
+
+import "google/protobuf/timestamp.proto";
+import "yandex/cloud/mdb/elasticsearch/v1/config/elasticsearch.proto";
+import "yandex/cloud/mdb/elasticsearch/v1/maintenance.proto";
+
+option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/elasticsearch/v1;elasticsearch";
+option java_package = "yandex.cloud.api.mdb.elasticsearch.v1";
+
+// An Elasticsearch cluster resource.
+// For more information, see the [Concepts](/docs/managed-elasticsearch/concepts) section of the documentation.
+message Cluster {
+ enum Environment {
+ ENVIRONMENT_UNSPECIFIED = 0;
+
+ // Stable environment with a conservative update policy when only hotfixes are applied during regular maintenance.
+ PRODUCTION = 1;
+
+ // Environment with a more aggressive update policy when new versions are rolled out irrespective of backward compatibility.
+ PRESTABLE = 2;
+ }
+
+ enum Health {
+
+ // State of the cluster is unknown ([Host.health] of all hosts in the cluster is `UNKNOWN`).
+ HEALTH_UNKNOWN = 0;
+
+ // Cluster is alive and well ([Host.health] of all hosts in the cluster is `ALIVE`).
+ ALIVE = 1;
+
+ // Cluster is inoperable ([Host.health] of all hosts in the cluster is `DEAD`).
+ DEAD = 2;
+
+ // Cluster is in degraded state ([Host.health] of at least one of the hosts in the cluster is not `ALIVE`).
+ DEGRADED = 3;
+ }
+
+ enum Status {
+
+ // Cluster state is unknown.
+ STATUS_UNKNOWN = 0;
+
+ // Cluster is being created.
+ CREATING = 1;
+
+ // Cluster is running normally.
+ RUNNING = 2;
+
+ // Cluster encountered a problem and cannot operate.
+ ERROR = 3;
+
+ // Cluster is being updated.
+ UPDATING = 4;
+
+ // Cluster is stopping.
+ STOPPING = 5;
+
+ // Cluster stopped.
+ STOPPED = 6;
+
+ // Cluster is starting.
+ STARTING = 7;
+ }
+
+ // ID of the Elasticsearch cluster.
+ // This ID is assigned at creation time.
+ string id = 1;
+
+ // ID of the folder that the Elasticsearch cluster belongs to.
+ string folder_id = 2;
+
+ // Creation timestamp.
+ google.protobuf.Timestamp created_at = 3;
+
+ // Name of the Elasticsearch cluster.
+ // The name must be unique within the folder. 1-63 characters long.
+ string name = 4;
+
+ // Description of the Elasticsearch cluster. 0-256 characters long.
+ string description = 5;
+
+ // Custom labels for the Elasticsearch cluster as `key:value` pairs.
+ // A maximum of 64 labels per resource is allowed.
+ map<string, string> labels = 6;
+
+ // Deployment environment of the Elasticsearch cluster.
+ Environment environment = 7;
+
+ // Description of monitoring systems relevant to the Elasticsearch cluster.
+ repeated Monitoring monitoring = 8;
+
+ // Configuration of the Elasticsearch cluster.
+ ClusterConfig config = 9;
+
+ // ID of the network that the cluster belongs to.
+ string network_id = 10;
+
+ // Aggregated cluster health.
+ Health health = 11;
+
+ // Current state of the cluster.
+ Status status = 12;
+
+ // User security groups
+ repeated string security_group_ids = 13;
+
+ // ID of the service account used for access to Object Storage.
+ string service_account_id = 14;
+
+ // Deletion Protection inhibits deletion of the cluster
+ bool deletion_protection = 15;
+
+ // Window of maintenance operations.
+ MaintenanceWindow maintenance_window = 16;
+
+ // Maintenance operation planned at nearest maintenance_window.
+ MaintenanceOperation planned_operation = 17;
+}
+
+// Metadata of monitoring system.
+message Monitoring {
+ // Name of the monitoring system.
+ string name = 1;
+
+ // Description of the monitoring system.
+ string description = 2;
+
+ // Link to the monitoring system charts for the Elasticsearch cluster.
+ string link = 3;
+}
+
+message ClusterConfig {
+ // Elasticsearch version.
+ string version = 1;
+
+ // Configuration and resource allocation for Elasticsearch nodes.
+ Elasticsearch elasticsearch = 2;
+
+ // ElasticSearch edition.
+ string edition = 3;
+}
+
+message Elasticsearch {
+ message DataNode {
+ oneof config {
+ // Elasticsearch 7.x data node configuration.
+ config.ElasticsearchConfigSet7 elasticsearch_config_set_7 = 1 [json_name="elasticsearchConfigSet_7"];
+ }
+
+ // Resources allocated to Elasticsearch data nodes.
+ Resources resources = 2;
+ }
+
+ message MasterNode {
+ // Resources allocated to Elasticsearch master nodes.
+ Resources resources = 1;
+ }
+
+ // Configuration and resource allocation for Elasticsearch data nodes.
+ DataNode data_node = 1;
+
+ // Configuration and resource allocation for Elasticsearch master nodes.
+ MasterNode master_node = 2;
+
+ // Cluster wide plugins
+ repeated string plugins = 3;
+}
+
+// Computational resources.
+message Resources {
+ // ID of the preset for computational resources available to a host (CPU, memory etc.).
+ // All available presets are listed in the [documentation](/docs/managed-elasticsearch/concepts/instance-types).
+ string resource_preset_id = 1;
+
+ // Volume of the storage available to a host, in bytes.
+ int64 disk_size = 2;
+
+ // Type of the storage environment for the host.
+ // All available types are listed in the [documentation](/docs/managed-elasticsearch/concepts/storage).
+ string disk_type_id = 3;
+}
+
+// Cluster host metadata.
+message Host {
+ enum Type {
+ // Host type is unspecified. Default value.
+ TYPE_UNSPECIFIED = 0;
+
+ // The host is an Elasticsearch data node.
+ DATA_NODE = 1;
+
+ // The host is an Elasticsearch master node.
+ MASTER_NODE = 2;
+ }
+
+ enum Health {
+
+ // Health of the host is unknown.
+ UNKNOWN = 0;
+
+ // The host is performing all its functions normally.
+ ALIVE = 1;
+
+ // The host is inoperable and cannot perform any of its essential functions.
+ DEAD = 2;
+
+ // The host is degraded and can perform only some of its essential functions.
+ DEGRADED = 3;
+ }
+
+ // Name of the host.
+ string name = 1;
+
+ // ID of the Elasticsearch cluster.
+ string cluster_id = 2;
+
+ // ID of the availability zone where the host resides.
+ string zone_id = 3;
+
+ // Host type.
+ Type type = 4;
+
+ Resources resources = 5;
+
+ // Aggregated host health data. If the field has default value, it is not returned in the response.
+ Health health = 6;
+
+ // Services provided by the host.
+ repeated Service services = 7;
+
+ // ID of the subnet the host resides in.
+ string subnet_id = 8;
+
+ // The flag that defines whether a public IP address is assigned to the host.
+ //
+ // If the value is `true`, then this host is available on the Internet via it's public IP address.
+ bool assign_public_ip = 9;
+}
+
+// Cluster service metadata.
+message Service {
+ enum Type {
+ TYPE_UNSPECIFIED = 0;
+
+ // The Elasticsearch service.
+ ELASTICSEARCH = 1;
+ }
+
+ enum Health {
+
+ // Health of the service is unknown.
+ UNKNOWN = 0;
+
+ // The service is working normally.
+ ALIVE = 1;
+
+ // The service is dead or unresponsive.
+ DEAD = 2;
+ }
+
+ // Type of the service provided by the host.
+ Type type = 1;
+
+ // Service health data. If the field has default value, it is not returned in the response.
+ Health health = 2;
+}
diff --git a/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/cluster_service.proto b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/cluster_service.proto
new file mode 100644
index 0000000000..853b24f67a
--- /dev/null
+++ b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/cluster_service.proto
@@ -0,0 +1,884 @@
+syntax = "proto3";
+
+package yandex.cloud.mdb.elasticsearch.v1;
+
+import "google/api/annotations.proto";
+import "google/protobuf/field_mask.proto";
+import "google/protobuf/timestamp.proto";
+import "yandex/cloud/api/operation.proto";
+import "yandex/cloud/mdb/elasticsearch/v1/backup.proto";
+import "yandex/cloud/mdb/elasticsearch/v1/cluster.proto";
+import "yandex/cloud/mdb/elasticsearch/v1/config/elasticsearch.proto";
+import "yandex/cloud/mdb/elasticsearch/v1/extension.proto";
+import "yandex/cloud/mdb/elasticsearch/v1/maintenance.proto";
+import "yandex/cloud/mdb/elasticsearch/v1/user.proto";
+import "yandex/cloud/operation/operation.proto";
+import "yandex/cloud/validation.proto";
+
+option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/elasticsearch/v1;elasticsearch";
+option java_package = "yandex.cloud.api.mdb.elasticsearch.v1";
+
+// A set of methods for managing Elasticsearch clusters.
+service ClusterService {
+ // Returns the specified Elasticsearch cluster.
+ //
+ // To get the list of available Elasticsearch clusters, make a [List] request.
+ rpc Get(GetClusterRequest) returns (Cluster) {
+ option (google.api.http) = {get: "/managed-elasticsearch/v1/clusters/{cluster_id}"};
+ }
+
+ // Retrieves the list of Elasticsearch clusters that belong to the specified folder.
+ rpc List(ListClustersRequest) returns (ListClustersResponse) {
+ option (google.api.http) = {get: "/managed-elasticsearch/v1/clusters"};
+ }
+
+ // Creates a new Elasticsearch cluster in the specified folder.
+ rpc Create(CreateClusterRequest) returns (operation.Operation) {
+ option (google.api.http) = {
+ post: "/managed-elasticsearch/v1/clusters"
+ body: "*"
+ };
+ option (yandex.cloud.api.operation) = {
+ metadata: "CreateClusterMetadata"
+ response: "Cluster"
+ };
+ }
+
+ // Updates the specified Elasticsearch cluster.
+ rpc Update(UpdateClusterRequest) returns (operation.Operation) {
+ option (google.api.http) = {
+ patch: "/managed-elasticsearch/v1/clusters/{cluster_id}"
+ body: "*"
+ };
+ option (yandex.cloud.api.operation) = {
+ metadata: "UpdateClusterMetadata"
+ response: "Cluster"
+ };
+ }
+
+ // Deletes the specified Elasticsearch cluster.
+ rpc Delete(DeleteClusterRequest) returns (operation.Operation) {
+ option (google.api.http) = {delete: "/managed-elasticsearch/v1/clusters/{cluster_id}"};
+ option (yandex.cloud.api.operation) = {
+ metadata: "DeleteClusterMetadata"
+ response: "google.protobuf.Empty"
+ };
+ }
+
+ // Moves the specified Elasticsearch cluster to the specified folder.
+ rpc Move(MoveClusterRequest) returns (operation.Operation) {
+ option (google.api.http) = {
+ post: "/managed-elasticsearch/v1/clusters/{cluster_id}:move"
+ body: "*"
+ };
+ option (yandex.cloud.api.operation) = {
+ metadata: "MoveClusterMetadata"
+ response: "Cluster"
+ };
+ }
+
+ // Starts the specified Elasticsearch cluster.
+ rpc Start(StartClusterRequest) returns (operation.Operation) {
+ option (google.api.http) = {post: "/managed-elasticsearch/v1/clusters/{cluster_id}:start"};
+ option (yandex.cloud.api.operation) = {
+ metadata: "StartClusterMetadata"
+ response: "Cluster"
+ };
+ }
+
+ // Stops the specified Elasticsearch cluster.
+ rpc Stop(StopClusterRequest) returns (operation.Operation) {
+ option (google.api.http) = {post: "/managed-elasticsearch/v1/clusters/{cluster_id}:stop"};
+ option (yandex.cloud.api.operation) = {
+ metadata: "StopClusterMetadata"
+ response: "Cluster"
+ };
+ }
+
+ // Create a backup for the specified ElasticSearch cluster.
+ rpc Backup(BackupClusterRequest) returns (operation.Operation) {
+ option (google.api.http) = {post: "/managed-elasticsearch/v1/clusters/{cluster_id}:backup"};
+ option (yandex.cloud.api.operation) = {
+ metadata: "BackupClusterMetadata"
+ response: "Cluster"
+ };
+ }
+
+ // Returns the list of available backups for the specified Elasticsearch cluster.
+ rpc ListBackups(ListClusterBackupsRequest) returns (ListClusterBackupsResponse) {
+ option (google.api.http) = {get: "/managed-elasticsearch/v1/clusters/{cluster_id}/backups"};
+ }
+
+ // Creates a new ElasticSearch cluster from the specified backup.
+ rpc Restore(RestoreClusterRequest) returns (operation.Operation) {
+ option (google.api.http) = {
+ post: "/managed-elasticsearch/v1/clusters:restore"
+ body: "*"
+ };
+ option (yandex.cloud.api.operation) = {
+ metadata: "RestoreClusterMetadata"
+ response: "Cluster"
+ };
+ }
+
+ // Retrieves logs for the specified Elasticsearch cluster.
+ //
+ // For more information about logs, see the [Logs](/docs/managed-elasticsearch/operations/cluster-logs) section in the documentation.
+ rpc ListLogs(ListClusterLogsRequest) returns (ListClusterLogsResponse) {
+ option (google.api.http) = {get: "/managed-elasticsearch/v1/clusters/{cluster_id}:logs"};
+ }
+
+ // Same as [ListLogs] but using server-side streaming. Also supports `tail -f` semantics.
+ rpc StreamLogs(StreamClusterLogsRequest) returns (stream StreamLogRecord) {
+ option (google.api.http) = {get: "/managed-elasticsearch/v1/clusters/{cluster_id}:stream_logs"};
+ }
+
+ // Retrieves the list of operations for the specified Elasticsearch cluster.
+ rpc ListOperations(ListClusterOperationsRequest) returns (ListClusterOperationsResponse) {
+ option (google.api.http) = {get: "/managed-elasticsearch/v1/clusters/{cluster_id}/operations"};
+ }
+
+ // Retrieves a list of hosts for the specified Elasticsearch cluster.
+ rpc ListHosts(ListClusterHostsRequest) returns (ListClusterHostsResponse) {
+ option (google.api.http) = {get: "/managed-elasticsearch/v1/clusters/{cluster_id}/hosts"};
+ }
+
+ // Adds new hosts to the specified Elasticsearch cluster.
+ rpc AddHosts(AddClusterHostsRequest) returns (operation.Operation) {
+ option (google.api.http) = {
+ post: "/managed-elasticsearch/v1/clusters/{cluster_id}/hosts:batchCreate"
+ body: "*"
+ };
+ option (yandex.cloud.api.operation) = {
+ metadata: "AddClusterHostsMetadata"
+ response: "google.protobuf.Empty"
+ };
+ }
+
+ // Deletes specified hosts from the specified Elasticsearch cluster.
+ rpc DeleteHosts(DeleteClusterHostsRequest) returns (operation.Operation) {
+ option (google.api.http) = {
+ post: "/managed-elasticsearch/v1/clusters/{cluster_id}/hosts:batchDelete"
+ body: "*"
+ };
+ option (yandex.cloud.api.operation) = {
+ metadata: "DeleteClusterHostsMetadata"
+ response: "google.protobuf.Empty"
+ };
+ }
+
+ // Reschedule planned maintenance operation.
+ rpc RescheduleMaintenance(RescheduleMaintenanceRequest) returns (operation.Operation) {
+ option (google.api.http) = {
+ post: "/managed-elasticsearch/v1/clusters/{cluster_id}:rescheduleMaintenance"
+ body: "*"
+ };
+ option (yandex.cloud.api.operation) = {
+ metadata: "RescheduleMaintenanceMetadata"
+ response: "Cluster"
+ };
+ }
+}
+
+message GetClusterRequest {
+ // ID of the Elasticsearch cluster to return.
+ //
+ // To get the cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+}
+
+message ListClustersRequest {
+ // ID of the folder to list Elasticsearch clusters in.
+ //
+ // To get the folder ID, make a [yandex.cloud.resourcemanager.v1.FolderService.List] request.
+ string folder_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ // The maximum number of results per page to return.
+ // If the number of available results is larger than `page_size`, the service returns a [ListClustersResponse.next_page_token] that can be used to get the next page of results in subsequent list requests.
+ int64 page_size = 2 [(value) = "<=1000"];
+
+ // Page token.
+ // To get the next page of results, set `page_token` to the [ListClustersResponse.next_page_token] returned by the previous list request.
+ string page_token = 3 [(length) = "<=100"];
+
+ // A filter expression that filters resources listed in the response.
+ //
+ // The expression must specify:
+ // 1. The field name to filter by. Currently you can only use filtering with the [Cluster.name] field.
+ // 2. An `=` operator.
+ // 3. The value in double quotes (`"`). Must be 1-63 characters long and match the regular expression `[a-zA-Z0-9_-]+`.
+ //
+ // Example of a filter: `name NOT IN 'test,beta'`.
+ string filter = 4 [(length) = "<=1000"];
+}
+
+message ListClustersResponse {
+ // List of Elasticsearch clusters.
+ repeated Cluster clusters = 1;
+
+ // Token that allows you to get the next page of results for list requests.
+ //
+ // If the number of results is larger than [ListClustersRequest.page_size], use `next_page_token` as the value
+ // for the [ListClustersRequest.page_token] parameter in the next list request.
+ //Each subsequent list request will have its own `next_page_token` to continue paging through the results.
+ string next_page_token = 2;
+}
+
+message CreateClusterRequest {
+ reserved 7;
+ // ID of the folder to create the Elasticsearch cluster in.
+ string folder_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ // Name of the Elasticsearch cluster. The name must be unique within the folder.
+ string name = 2 [
+ (required) = true,
+ (length) = "<=63",
+ (pattern) = "[a-zA-Z0-9_-]*"
+ ];
+
+ // Description of the Elasticsearch cluster.
+ string description = 3 [(length) = "<=256"];
+
+ // Custom labels for the Elasticsearch cluster as `key:value` pairs.
+ //
+ // For example, "project": "mvp" or "source": "dictionary".
+ map<string, string> labels = 4 [
+ (yandex.cloud.size) = "<=64",
+ (length) = "<=63",
+ (pattern) = "[-_0-9a-z]*",
+ (map_key).length = "1-63",
+ (map_key).pattern = "[a-z][-_0-9a-z]*"
+ ];
+
+ // Deployment environment of the Elasticsearch cluster.
+ Cluster.Environment environment = 5;
+
+ // Elasticsearch and hosts configuration for the cluster.
+ ConfigSpec config_spec = 6 [(required) = true];
+
+ // One or more descriptions of users to be created in Elasticsearch cluster.
+ repeated UserSpec user_specs = 8; // optional, depricated will be removed in future versions
+
+ // One or more configurations of hosts to be created in the Elasticsearch cluster.
+ repeated HostSpec host_specs = 9 [(size) = ">0"];
+
+ // ID of the network to create the Elasticsearch cluster in.
+ string network_id = 10 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ // User security groups
+ repeated string security_group_ids = 11;
+
+ // ID of the service account used for access to Object Storage.
+ string service_account_id = 12;
+
+ // Deletion Protection inhibits deletion of the cluster
+ bool deletion_protection = 13;
+
+ // Window of maintenance operations.
+ MaintenanceWindow maintenance_window = 14;
+
+ repeated ExtensionSpec extension_specs = 15; // optional
+}
+
+message CreateClusterMetadata {
+ // ID of the Elasticsearch cluster that is being created.
+ string cluster_id = 1;
+}
+
+message UpdateClusterRequest {
+ // ID of the Elasticsearch cluster to update.
+ //
+ // To get the Elasticsearch cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ google.protobuf.FieldMask update_mask = 2;
+
+ // New description of the Elasticsearch cluster.
+ string description = 3 [(length) = "<=256"];
+
+ // Custom labels for the Elasticsearch cluster as `key:value` pairs.
+ //
+ // For example, "project": "mvp" or "source": "dictionary".
+ //
+ // The new set of labels will completely replace the old ones.
+ // To add a label, request the current set with the [ClusterService.Get] method, then send an [ClusterService.Update] request with the new label added to the set.
+ map<string, string> labels = 4 [
+ (yandex.cloud.size) = "<=64",
+ (length) = "<=63",
+ (pattern) = "[-_0-9a-z]*",
+ (map_key).length = "1-63",
+ (map_key).pattern = "[a-z][-_0-9a-z]*"
+ ];
+
+ // New configuration and resources for hosts in the Elasticsearch cluster.
+ //
+ // Use [update_mask] to prevent reverting all cluster settings that are not listed in `config_spec` to their default values.
+ ConfigSpecUpdate config_spec = 5;
+
+ // New name for the Elasticsearch cluster.
+ string name = 6 [
+ (length) = "<=63",
+ (pattern) = "[a-zA-Z0-9_-]*"
+ ];
+
+ // User security groups
+ repeated string security_group_ids = 7;
+
+ // ID of the service account used for access to Object Storage.
+ string service_account_id = 8;
+
+ // Deletion Protection inhibits deletion of the cluster
+ bool deletion_protection = 9;
+
+ // Window of maintenance operations.
+ MaintenanceWindow maintenance_window = 10;
+}
+
+message UpdateClusterMetadata {
+ // ID of the Elasticsearch cluster that is being updated.
+ string cluster_id = 1;
+}
+
+message DeleteClusterRequest {
+ // ID of the Elasticsearch cluster to delete.
+ //
+ // To get the Elasticsearch cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+}
+
+message DeleteClusterMetadata {
+ // ID of the Elasticsearch cluster that is being deleted.
+ string cluster_id = 1;
+}
+
+message ListClusterLogsRequest {
+ // ID of the Elasticsearch cluster to request logs for.
+ //
+ // To get the Elasticsearch cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ // Columns from the logs table to request.
+ //
+ // If no columns are specified, full log records are returned.
+ repeated string column_filter = 2;
+
+ // Start timestamp for the logs request.
+ google.protobuf.Timestamp from_time = 3;
+
+ // End timestamp for the logs request.
+ google.protobuf.Timestamp to_time = 4;
+
+ // The maximum number of results per page to return.
+ //
+ // If the number of available results is larger than `page_size`, the service returns a [ListClusterLogsResponse.next_page_token] that can be used to get the next page of results in subsequent list requests.
+ int64 page_size = 5 [(value) = "<=1000"];
+
+ // Page token.
+ //
+ // To get the next page of results, set `page_token` to the [ListClusterLogsResponse.next_page_token] returned by the previous list request.
+ string page_token = 6 [(length) = "<=100"];
+
+ // The flag that defines behavior of providing the next page token.
+ //
+ // If this flag is set to `true`, this API method will always return [ListClusterLogsResponse.next_page_token], even if current page is empty.
+ bool always_next_page_token = 7;
+
+ // A filter expression that filters resources listed in the response.
+ //
+ // The expression must specify:
+ // 1. The field name to filter by. Currently filtering can be applied to the `hostname` field.
+ // 2. An `=` operator.
+ // 3. The value in double quotes (`"`). Must be 1-63 characters long and match the regular expression `[a-z0-9.-]{1,61}`.
+ //
+ // Example of a filter: `message.hostname='node1.db.cloud.yandex.net'`
+ string filter = 8 [(length) = "<=1000"];
+
+ // Type of the service to request logs about.
+ ServiceType service_type = 9;
+
+ enum ServiceType {
+ SERVICE_TYPE_UNSPECIFIED = 0;
+ ELASTICSEARCH = 1;
+ KIBANA = 2;
+ }
+}
+
+// A single log record.
+message LogRecord {
+ // Log record timestamp.
+ google.protobuf.Timestamp timestamp = 1;
+
+ // Contents of the log record.
+ map<string, string> message = 2;
+}
+
+message ListClusterLogsResponse {
+ // Requested log records.
+ repeated LogRecord logs = 1;
+
+ // Token that allows you to get the next page of results for list requests.
+ //
+ // If the number of results is larger than [ListClusterLogsRequest.page_size], use `next_page_token` as the value for the [ListClusterLogsRequest.page_token] query parameter in the next list request.
+ // Each subsequent list request will have its own `next_page_token` to continue paging through the results.
+ //
+ // This value is interchangeable with [StreamLogRecord.next_record_token] from StreamLogs method.
+ string next_page_token = 2;
+}
+
+message StreamLogRecord {
+ // One of the requested log records.
+ LogRecord record = 1;
+
+ // This token allows you to continue streaming logs starting from the exact same record.
+ //
+ // To continue streaming, specify value of `next_record_token` as value for [StreamClusterLogsRequest.record_token] parameter in the next StreamLogs request.
+ //
+ // This value is interchangeable with [ListClusterLogsResponse.next_page_token] from ListLogs method.
+ string next_record_token = 2;
+}
+
+message StreamClusterLogsRequest {
+ // ID of the Elasticsearch cluster.
+ //
+ // To get the Elasticsearch cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ // Columns from logs table to get in the response.
+ //
+ // If no columns are specified, full log records are returned.
+ repeated string column_filter = 2;
+
+ // Start timestamp for the logs request.
+ google.protobuf.Timestamp from_time = 3;
+
+ // End timestamp for the logs request.
+ //
+ // If this field is not set, all existing logs will be sent and then the new ones asthey appear.
+ // In essence it has `tail -f` semantics.
+ google.protobuf.Timestamp to_time = 4;
+
+ // Record token.
+ //
+ // Set `record_token` to the [StreamLogRecord.next_record_token] returned by a previous [ClusterService.StreamLogs] request to start streaming from next log record.
+ string record_token = 5 [(length) = "<=100"];
+
+ // A filter expression that filters resources listed in the response.
+ //
+ // The expression must specify:
+ // 1. The field name to filter by. Currently filtering can be applied to the `hostname` field.
+ // 2. An `=` operator.
+ // 3. The value in double quotes (`"`). Must be 3-63 characters long and match the regular expression `[a-z][-a-z0-9]{1,61}[a-z0-9]`.
+ //
+ // Example of a filter: `message.hostname='node1.db.cloud.yandex.net'`
+ string filter = 6 [(length) = "<=1000"];
+
+ // Type of the service to request logs about.
+ ServiceType service_type = 7;
+
+ enum ServiceType {
+ SERVICE_TYPE_UNSPECIFIED = 0;
+ ELASTICSEARCH = 1;
+ KIBANA = 2;
+ }
+}
+
+message ListClusterOperationsRequest {
+ // ID of the Elasticsearch cluster to list operations for.
+ //
+ // To get the Elasticsearch cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ // The maximum number of results per page to return.
+ //
+ // If the number of available results is larger than `page_size`, the service returns a [ListClusterOperationsResponse.next_page_token] that can be used to get the next page of results in subsequent list requests.
+ int64 page_size = 2 [(value) = "<=1000"];
+
+ // Page token.
+ //
+ // To get the next page of results, set `page_token` to the [ListClusterOperationsResponse.next_page_token] returned by the previous list request.
+ string page_token = 3 [(length) = "<=100"];
+}
+
+message ListClusterOperationsResponse {
+ // List of operations for the specified Elasticsearch cluster.
+ repeated operation.Operation operations = 1;
+
+ // Token that allows you to get the next page of results for list requests.
+ //
+ // If the number of results is larger than [ListClusterOperationsRequest.page_size], use the `next_page_token` as the value for the [ListClusterOperationsRequest.page_token] query parameter in the next list request.
+ // Each subsequent list request will have its own `next_page_token` to continue paging through the results.
+ string next_page_token = 2;
+}
+
+message ListClusterHostsRequest {
+ // ID of the Elasticsearch cluster.
+ //
+ // To get the Elasticsearch cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ // The maximum number of results per page to return.
+ //
+ // If the number of available results is larger than `page_size`, the service returns a [ListClusterHostsResponse.next_page_token] that can be used to get the next page of results in subsequent list requests.
+ int64 page_size = 2 [(value) = "<=1000"];
+
+ // Page token.
+ //
+ // To get the next page of results, set `page_token` to the [ListClusterHostsResponse.next_page_token] returned by the previous list request.
+ string page_token = 3 [(length) = "<=100"];
+}
+
+message ListClusterHostsResponse {
+ // List of hosts.
+ repeated Host hosts = 1;
+
+ // Token that allows you to get the next page of results for list requests.
+ //
+ // If the number of results is larger than [ListClusterHostsRequest.page_size], use the `next_page_token` as the value for the [ListClusterHostsRequest.page_token] query parameter in the next list request.
+ // Each subsequent list request will have its own `next_page_token` to continue paging through the results.
+ string next_page_token = 2;
+}
+
+message MoveClusterRequest {
+ // ID of the Elasticsearch cluster to move.
+ //
+ // To get the Elasticsearch cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ // ID of the destination folder.
+ string destination_folder_id = 2 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+}
+
+message MoveClusterMetadata {
+ // ID of the Elasticsearch cluster being moved.
+ string cluster_id = 1;
+
+ // ID of the source folder.
+ string source_folder_id = 2;
+
+ // ID of the destination folder.
+ string destination_folder_id = 3;
+}
+
+message StartClusterRequest {
+ // ID of the Elasticsearch cluster to start.
+ //
+ // To get the Elasticsearch cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+}
+
+message StartClusterMetadata {
+ // ID of the Elasticsearch cluster.
+ string cluster_id = 1;
+}
+
+message StopClusterRequest {
+ // ID of the Elasticsearch cluster to stop.
+ //
+ // To get the Elasticsearch cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+}
+
+message StopClusterMetadata {
+ // ID of the Elasticsearch cluster.
+ string cluster_id = 1;
+}
+
+message HostSpec {
+ // ID of the availability zone where the host resides.
+ string zone_id = 1 [(length) = "<=50"];
+
+ // ID of the subnet the host resides in.
+ string subnet_id = 2 [(length) = "<=50"];
+
+ // The flag that defines whether a public IP address is assigned to the host.
+ //
+ // If the value is `true`, then this host is available on the Internet via it's public IP address.
+ bool assign_public_ip = 3;
+
+ // Host type.
+ Host.Type type = 4 [(required) = true];
+
+ // The shard name to create on the host.
+ string shard_name = 5 [
+ (length) = "<=63",
+ (pattern) = "[a-zA-Z0-9_-]*"
+ ];
+}
+
+message ElasticsearchSpec {
+ message DataNode {
+ // Elasticsearch data node configuration.
+ oneof config {
+ config.ElasticsearchConfig7 elasticsearch_config_7 = 1 [json_name = "elasticsearchConfig_7"];
+ }
+ // Resources allocated to Elasticsearch data nodes.
+ Resources resources = 2;
+ }
+
+ message MasterNode {
+ // Resources allocated to Elasticsearch master nodes.
+ Resources resources = 1;
+ }
+
+ // Configuration and resource allocation for Elasticsearch data nodes.
+ DataNode data_node = 1;
+
+ // Configuration and resource allocation for Elasticsearch master nodes.
+ MasterNode master_node = 2;
+
+ // Cluster wide plugins
+ repeated string plugins = 3 [(length) = "<=50"];
+}
+
+message ConfigSpec {
+ // Elasticsearch version.
+ string version = 1; // No formal validation, a list of supported versions should suffice.
+
+ // Configuration and resource allocation for Elasticsearch nodes.
+ ElasticsearchSpec elasticsearch_spec = 2;
+
+ // ElasticSearch edition.
+ string edition = 3;
+
+ // ElasticSearch admin password.
+ string admin_password = 4 [(required) = true];
+}
+
+message ConfigSpecUpdate {
+ // Elasticsearch version.
+ string version = 1; // No formal validation, a list of supported versions should suffice.
+
+ // Configuration and resource allocation for Elasticsearch nodes.
+ ElasticsearchSpec elasticsearch_spec = 2;
+
+ // ElasticSearch edition.
+ string edition = 3;
+
+ // ElasticSearch admin password.
+ string admin_password = 4;
+}
+
+message AddClusterHostsRequest {
+ // ID of the Elasticsearch cluster.
+ //
+ // To get the Elasticsearch cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ // One or more configurations of hosts to be added to the Elasticsearch cluster.
+ repeated HostSpec host_specs = 2 [(size) = ">0"];
+}
+
+message AddClusterHostsMetadata {
+ // ID of the Elasticsearch cluster.
+ string cluster_id = 1;
+
+ // Names of the host that are being added.
+ repeated string host_names = 2;
+}
+
+message DeleteClusterHostsRequest {
+ // ID of the Elasticsearch cluster.
+ //
+ // To get the Elasticsearch cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ // Names of the hosts to delete.
+ repeated string host_names = 2 [
+ (size) = ">0",
+ (length) = "<=253"
+ ];
+}
+
+message DeleteClusterHostsMetadata {
+ // ID of the Elasticsearch cluster.
+ string cluster_id = 1;
+
+ // Names of the hosts that are being deleted.
+ repeated string host_names = 2;
+}
+
+message RescheduleMaintenanceRequest {
+ // Required. ID of the Elasticsearch cluster to maintenance reschedule.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ enum RescheduleType {
+ RESCHEDULE_TYPE_UNSPECIFIED = 0;
+ IMMEDIATE = 1;
+ NEXT_AVAILABLE_WINDOW = 2;
+ SPECIFIC_TIME = 3;
+ }
+ // Required. The type of reschedule request.
+ RescheduleType reschedule_type = 2 [(required) = true];
+
+ // The time for SPECIFIC_TIME reschedule. Limited by two weeks since first time scheduled.
+ google.protobuf.Timestamp delayed_until = 3;
+}
+
+message RescheduleMaintenanceMetadata {
+ reserved 2 to 3;
+ // Required. ID of the Elasticsearch cluster.
+ string cluster_id = 1;
+
+ // Required. New time of the planned maintenance. Can be in the past for rescheduled to "IMMEDIATE".
+ google.protobuf.Timestamp delayed_until = 4;
+}
+
+message RestoreClusterRequest {
+ reserved 7 to 8;
+ // Required. ID of the backup to restore from.
+ string backup_id = 1 [(required) = true];
+
+ // Name of the ElasticSearch cluster. The name must be unique within the folder.
+ string name = 2 [
+ (required) = true,
+ (length) = "<=63",
+ (pattern) = "[a-zA-Z0-9_-]*"
+ ];
+
+ // Description of the ElasticSearch cluster.
+ string description = 3 [(length) = "<=256"];
+
+ // Custom labels for the ElasticSearch cluster as `` key:value `` pairs. Maximum 64 per resource.
+ // For example, "project": "mvp" or "source": "dictionary".
+ map<string, string> labels = 4 [
+ (yandex.cloud.size) = "<=64",
+ (length) = "<=63",
+ (pattern) = "[-_0-9a-z]*",
+ (map_key).length = "1-63",
+ (map_key).pattern = "[a-z][-_0-9a-z]*"
+ ];
+
+ // Deployment environment of the ElasticSearch cluster.
+ Cluster.Environment environment = 5;
+
+ // Configuration and resources for hosts that should be created for the ElasticSearch cluster.
+ ConfigSpec config_spec = 6 [(required) = true];
+
+ // Required. Configuration of ElasticSearch hosts.
+ repeated HostSpec host_specs = 9 [(size) = ">0"];
+
+ // ID of the network to create the cluster in.
+ string network_id = 10 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ // User security groups
+ repeated string security_group_ids = 11;
+
+ // ID of the service account used for access to Object Storage.
+ string service_account_id = 12;
+
+ // Deletion Protection inhibits deletion of the cluster
+ bool deletion_protection = 13;
+
+ // ID of the folder to create the ElasticSearch cluster in.
+ string folder_id = 14 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ repeated ExtensionSpec extension_specs = 15; // optional
+}
+
+message RestoreClusterMetadata {
+ // Required. ID of the new ElasticSearch cluster.
+ string cluster_id = 1;
+
+ // Required. ID of the backup used for recovery.
+ string backup_id = 2;
+}
+
+message BackupClusterRequest {
+ // Required. ID of the ElasticSearch cluster to back up.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+}
+
+message BackupClusterMetadata {
+ // ID of the ElasticSearch cluster.
+ string cluster_id = 1;
+}
+
+message ListClusterBackupsRequest {
+ // Required. ID of the Elasticsearch cluster.
+ string cluster_id = 1 [
+ (required) = true,
+ (length) = "<=50"
+ ];
+
+ // The maximum number of results per page that should be returned. If the number of available
+ // results is larger than `page_size`, the service returns a `next_page_token` that can be used
+ // to get the next page of results in subsequent ListClusterBackups requests.
+ // Acceptable values are 0 to 1000, inclusive. Default value: 100.
+ int64 page_size = 2 [(value) = "0-1000"];
+
+ // Page token. Set `page_token` to the `next_page_token` returned by a previous ListClusterBackups
+ // request to get the next page of results.
+ string page_token = 3 [(length) = "<=100"];
+}
+
+message ListClusterBackupsResponse {
+ // Requested list of backups.
+ repeated Backup backups = 1;
+
+ // This token allows you to get the next page of results for ListClusterBackups requests,
+ // if the number of results is larger than `page_size` specified in the request.
+ // To get the next page, specify the value of `next_page_token` as a value for
+ // the `page_token` parameter in the next ListClusterBackups request. Subsequent ListClusterBackups
+ // requests will have their own `next_page_token` to continue paging through the results.
+ string next_page_token = 2;
+}
diff --git a/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/config/elasticsearch.proto b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/config/elasticsearch.proto
new file mode 100644
index 0000000000..e279ed0063
--- /dev/null
+++ b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/config/elasticsearch.proto
@@ -0,0 +1,59 @@
+syntax = "proto3";
+
+package yandex.cloud.mdb.elasticsearch.v1.config;
+
+import "google/protobuf/wrappers.proto";
+import "yandex/cloud/validation.proto";
+
+option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/elasticsearch/v1/config;elasticsearch";
+option java_package = "yandex.cloud.api.mdb.elasticsearch.v1.config";
+
+// Elasticsearch 7.x supported configuration options are listed here.
+//
+// Detailed description for each set of options is available in [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html).
+//
+// Any options that are not listed here are not supported.
+message ElasticsearchConfig7 {
+ reserved 5;
+ // The maximum number of clauses a boolean query can contain.
+ //
+ // The limit is in place to prevent searches from becoming too large and taking up too much CPU and memory.
+ // It affects not only Elasticsearch's `bool` query, but many other queries that are implicitly converted to `bool` query by Elastcsearch.
+ //
+ // Default value: `1024`.
+ //
+ // See in-depth description in [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-settings.html).
+ google.protobuf.Int64Value max_clause_count = 3;
+
+ // The maximum percentage or absolute value (10%, 512mb) of heap space that is allocated to field data cache.
+ //
+ // All the field values that are placed in this cache, get loaded to memory in order to provide fast document based access to those values.
+ // Building the field data cache for a field can be an expensive operations, so its recommended to have enough memory for this cache, and to keep it loaded.
+ //
+ // Default value: unbounded.
+ //
+ // See in-depth description in [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-fielddata.html).
+ string fielddata_cache_size = 4;
+
+ // Remote hosts for reindex have to be explicitly allowed in elasticsearch.yml using the reindex.remote.whitelist property.
+ // It can be set to a comma delimited list of allowed remote host and port combinations.
+ // Scheme is ignored, only the host and port are used.
+ string reindex_remote_whitelist = 6;
+
+ // List of paths to PEM encoded certificate files that should be trusted.
+ //
+ // See in-depth description in [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html#reindex-ssl)
+ string reindex_ssl_ca_path = 7;
+}
+
+// Elasticsearch 7.x data node configuration.
+message ElasticsearchConfigSet7 {
+ // Effective settings for an Elasticsearch cluster (a combination of settings defined in [user_config] and [default_config]).
+ ElasticsearchConfig7 effective_config = 1 [(required) = true];
+
+ // User-defined settings for an Elasticsearch cluster.
+ ElasticsearchConfig7 user_config = 2;
+
+ // Default settings for an Elasticsearch cluster.
+ ElasticsearchConfig7 default_config = 3;
+}
diff --git a/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/extension.proto b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/extension.proto
new file mode 100644
index 0000000000..a5222250da
--- /dev/null
+++ b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/extension.proto
@@ -0,0 +1,30 @@
+syntax = "proto3";
+
+package yandex.cloud.mdb.elasticsearch.v1;
+
+import "yandex/cloud/validation.proto";
+
+option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/elasticsearch/v1;elasticsearch";
+option java_package = "yandex.cloud.api.mdb.elasticsearch.v1";
+
+message Extension {
+ // Name of the extension.
+ string name = 1;
+ // Unique ID of the extension.
+ string id = 2;
+ // ID of the Elasticsearch cluster the extension belongs to.
+ string cluster_id = 3;
+ // Version of the extension.
+ int64 version = 4;
+ // The flag shows whether the extension is active.
+ bool active = 5;
+}
+
+message ExtensionSpec {
+ // Name of the extension.
+ string name = 1 [(required) = true, (length) = "<=50"];
+ // URI of the zip archive to create the new extension from. Currently only supports links that are stored in Object Storage.
+ string uri = 2;
+ // The flag shows whether to create the extension in disabled state.
+ bool disabled = 3;
+}
diff --git a/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/extension_service.proto b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/extension_service.proto
new file mode 100644
index 0000000000..5a59ddc6a3
--- /dev/null
+++ b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/extension_service.proto
@@ -0,0 +1,144 @@
+syntax = "proto3";
+
+package yandex.cloud.mdb.elasticsearch.v1;
+
+import "google/api/annotations.proto";
+import "yandex/cloud/api/operation.proto";
+import "yandex/cloud/validation.proto";
+import "yandex/cloud/mdb/elasticsearch/v1/extension.proto";
+import "yandex/cloud/operation/operation.proto";
+
+option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/elasticsearch/v1;elasticsearch";
+option java_package = "yandex.cloud.api.mdb.elasticsearch.v1";
+
+service ExtensionService {
+ // Returns the specified extension of Elasticsearch cluster.
+ rpc Get (GetExtensionRequest) returns (Extension) {
+ option (google.api.http) = { get: "/managed-elasticsearch/v1/clusters/{cluster_id}/extensions/{extension_id}" };
+ }
+
+ // Returns the list of available extensions for the specified Elasticsearch cluster.
+ rpc List (ListExtensionsRequest) returns (ListExtensionsResponse) {
+ option (google.api.http) = { get: "/managed-elasticsearch/v1/clusters/{cluster_id}/extensions" };
+ }
+
+ // Creates new extension version.
+ rpc Create (CreateExtensionRequest) returns (operation.Operation) {
+ option (google.api.http) = { post: "/managed-elasticsearch/v1/clusters/{cluster_id}/extensions" body: "*" };
+ option (yandex.cloud.api.operation) = {
+ metadata: "CreateExtensionMetadata"
+ response: "Extension"
+ };
+ }
+
+ // Updates the specified extension.
+ rpc Update (UpdateExtensionRequest) returns (operation.Operation) {
+ option (google.api.http) = { patch: "/managed-elasticsearch/v1/clusters/{cluster_id}/extensions/{extension_id}" body: "*" };
+ option (yandex.cloud.api.operation) = {
+ metadata: "UpdateExtensionMetadata"
+ response: "Extension"
+ };
+ }
+
+ // Deletes the specified extension.
+ rpc Delete (DeleteExtensionRequest) returns (operation.Operation) {
+ option (google.api.http) = { delete: "/managed-elasticsearch/v1/clusters/{cluster_id}/extensions/{extension_id}" };
+ option (yandex.cloud.api.operation) = {
+ metadata: "DeleteExtensionMetadata"
+ response: "google.protobuf.Empty"
+ };
+ }
+
+}
+
+message GetExtensionRequest {
+ // ID of the cluster.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // ID of the extension to return.
+ string extension_id = 2 [(required) = true];
+}
+
+message ListExtensionsRequest {
+ // ID of the cluster to list extensions in.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // The maximum number of results per page to return.
+ //
+ // If the number of available results is larger than [page_size], the API returns a [ListExtensionsResponse.next_page_token] that can be used to get the next page of results in subsequent [ExtensionService.List] requests.
+ int64 page_size = 2 [(value) = "0-1000"];
+
+ // Page token that can be used to iterate through multiple pages of results.
+ //
+ // To get the next page of results, set [page_token] to the [ListExtensionsResponse.next_page_token] returned by the previous [ExtensionService.List] request.
+ string page_token = 3 [(length) = "<=100"];
+}
+
+message ListExtensionsResponse {
+ // Requested list of extensions.
+ repeated Extension extensions = 1;
+
+ // The token that can be used to get the next page of results.
+ //
+ // If the number of results is larger than [ListExtensionsRequest.page_size], use the [next_page_token] as the value for the [ListExtensionsRequest.page_token] in the subsequent [ExtensionService.List] request to iterate through multiple pages of results.
+ //
+ // Each of the subsequent [ExtensionService.List] requests should use the [next_page_token] value returned in the previous request to continue paging through the results.
+ string next_page_token = 2;
+}
+
+message DeleteExtensionRequest {
+ // ID of the cluster.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // ID of the extension to delete.
+ string extension_id = 2 [(required) = true];
+}
+
+message DeleteExtensionMetadata {
+ // ID of the cluster.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // ID of the extension to delete.
+ string extension_id = 2 [(required) = true];
+}
+
+message UpdateExtensionRequest {
+ // ID of the cluster.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // ID of the extension to update.
+ string extension_id = 2 [(required) = true];
+
+ // The flag shows whether to make the extension active.
+ bool active = 3;
+}
+
+message UpdateExtensionMetadata {
+ // ID of the cluster.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // ID of the extension.
+ string extension_id = 2 [(required) = true];
+}
+
+message CreateExtensionRequest {
+ // ID of the cluster.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // Name of the extension.
+ string name = 2 [(required) = true, (length) = "<=50"];
+
+ // URI of the zip archive to create the new extension from. Currently only supports links that are stored in Object Storage.
+ string uri = 3 [(required) = true];
+
+ // The flag that disables the extension.
+ bool disabled = 4;
+}
+
+message CreateExtensionMetadata {
+ // ID of the cluster.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // ID of the extension.
+ string extension_id = 2 [(required) = true];
+}
diff --git a/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/maintenance.proto b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/maintenance.proto
new file mode 100644
index 0000000000..456a4608b0
--- /dev/null
+++ b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/maintenance.proto
@@ -0,0 +1,42 @@
+syntax = "proto3";
+
+package yandex.cloud.mdb.elasticsearch.v1;
+
+import "google/protobuf/timestamp.proto";
+
+import "yandex/cloud/validation.proto";
+
+option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/elasticsearch/v1;elasticsearch";
+option java_package = "yandex.cloud.api.mdb.elasticsearch.v1";
+
+message MaintenanceWindow {
+ oneof policy {
+ option (exactly_one) = true;
+ AnytimeMaintenanceWindow anytime = 1;
+ WeeklyMaintenanceWindow weekly_maintenance_window = 2;
+ }
+}
+
+message AnytimeMaintenanceWindow {}
+
+message WeeklyMaintenanceWindow {
+ enum WeekDay {
+ WEEK_DAY_UNSPECIFIED = 0;
+ MON = 1;
+ TUE = 2;
+ WED = 3;
+ THU = 4;
+ FRI = 5;
+ SAT = 6;
+ SUN = 7;
+ }
+ WeekDay day = 1;
+
+ // Hour of the day in UTC.
+ int64 hour = 2 [(value) = "1-24"];
+}
+
+message MaintenanceOperation {
+ string info = 1 [(length) = "<=256"];
+ google.protobuf.Timestamp delayed_until = 2;
+}
diff --git a/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/resource_preset.proto b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/resource_preset.proto
new file mode 100644
index 0000000000..9bb835cc37
--- /dev/null
+++ b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/resource_preset.proto
@@ -0,0 +1,21 @@
+syntax = "proto3";
+
+package yandex.cloud.mdb.elasticsearch.v1;
+
+option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/elasticsearch/v1;elasticsearch";
+option java_package = "yandex.cloud.api.mdb.elasticsearch.v1";
+
+// A ResourcePreset resource for describing hardware configuration presets.
+message ResourcePreset {
+ // ID of the resource preset.
+ string id = 1;
+
+ // IDs of availability zones where the resource preset is available.
+ repeated string zone_ids = 2;
+
+ // Number of CPU cores for an Elasticsearch node created with the preset.
+ int64 cores = 3;
+
+ // RAM volume for an Elasticsearch node created with the preset, in bytes.
+ int64 memory = 4;
+}
diff --git a/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/resource_preset_service.proto b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/resource_preset_service.proto
new file mode 100644
index 0000000000..2049f007e7
--- /dev/null
+++ b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/resource_preset_service.proto
@@ -0,0 +1,55 @@
+syntax = "proto3";
+
+package yandex.cloud.mdb.elasticsearch.v1;
+
+import "google/api/annotations.proto";
+import "yandex/cloud/mdb/elasticsearch/v1/resource_preset.proto";
+import "yandex/cloud/validation.proto";
+
+option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/elasticsearch/v1;elasticsearch";
+option java_package = "yandex.cloud.api.mdb.elasticsearch.v1";
+
+// A set of methods for managing Elasticsearch resource presets.
+service ResourcePresetService {
+ // Returns the specified resource preset.
+ //
+ // To get the list of available resource presets, make a [List] request.
+ rpc Get (GetResourcePresetRequest) returns (ResourcePreset) {
+ option (google.api.http) = { get: "/managed-elasticsearch/v1/resourcePresets/{resource_preset_id}" };
+ }
+
+ // Retrieves the list of available resource presets.
+ rpc List (ListResourcePresetsRequest) returns (ListResourcePresetsResponse) {
+ option (google.api.http) = { get: "/managed-elasticsearch/v1/resourcePresets" };
+ }
+}
+
+message GetResourcePresetRequest {
+ // ID of the resource preset to return.
+ //
+ // To get the resource preset ID, use a [ResourcePresetService.List] request.
+ string resource_preset_id = 1 [(required) = true];
+}
+
+message ListResourcePresetsRequest {
+ // The maximum number of results per page to return.
+ //
+ // If the number of available results is larger than `page_size`, the service returns a [ListResourcePresetsResponse.next_page_token] that can be used to get the next page of results in subsequent list requests.
+ int64 page_size = 1 [(value) = "<=1000"];
+
+ // Page token.
+ //
+ // To get the next page of results, set `page_token` to the [ListResourcePresetsResponse.next_page_token] returned by the previous list request.
+ string page_token = 2 [(length) = "<=100"];
+}
+
+message ListResourcePresetsResponse {
+ // List of resource presets.
+ repeated ResourcePreset resource_presets = 1;
+
+ // This token allows you to get the next page of results for list requests.
+ //
+ // If the number of results is larger than [ListResourcePresetsRequest.page_size], use the `next_page_token` as the value for the [ListResourcePresetsRequest.page_token] parameter in the next list request.
+ // Each subsequent list request will have its own `next_page_token` to continue paging through the results.
+ string next_page_token = 2 [(length) = "<=100"];
+}
diff --git a/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/user.proto b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/user.proto
new file mode 100644
index 0000000000..3c49bdde53
--- /dev/null
+++ b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/user.proto
@@ -0,0 +1,25 @@
+syntax = "proto3";
+
+package yandex.cloud.mdb.elasticsearch.v1;
+
+import "yandex/cloud/validation.proto";
+
+option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/elasticsearch/v1;elasticsearch";
+option java_package = "yandex.cloud.api.mdb.elasticsearch.v1";
+
+// An Elasticsearch user.
+message User {
+ // Name of the Elasticsearch user.
+ string name = 1;
+
+ // ID of the Elasticsearch cluster the user belongs to.
+ string cluster_id = 2;
+}
+
+message UserSpec {
+ // Name of the Elasticsearch user.
+ string name = 1 [(required) = true, (length) = "<=63", (pattern) = "[a-zA-Z0-9_]*"];
+
+ // Password of the Elasticsearch user.
+ string password = 2 [(required) = true, (length) = "8-128"];
+}
diff --git a/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/user_service.proto b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/user_service.proto
new file mode 100644
index 0000000000..726735e616
--- /dev/null
+++ b/contrib/libs/yandex-cloud-api-protos/yandex/cloud/mdb/elasticsearch/v1/user_service.proto
@@ -0,0 +1,158 @@
+syntax = "proto3";
+
+package yandex.cloud.mdb.elasticsearch.v1;
+
+import "google/api/annotations.proto";
+import "google/protobuf/field_mask.proto";
+import "yandex/cloud/operation/operation.proto";
+import "yandex/cloud/validation.proto";
+import "yandex/cloud/mdb/elasticsearch/v1/user.proto";
+import "yandex/cloud/api/operation.proto";
+
+option go_package = "github.com/yandex-cloud/go-genproto/yandex/cloud/mdb/elasticsearch/v1;elasticsearch";
+option java_package = "yandex.cloud.api.mdb.elasticsearch.v1";
+
+// A set of methods for managing Elasticsearch users.
+service UserService {
+ // Returns the specified Elasticsearch user.
+ //
+ // To get the list of available Elasticsearch users, make a [List] request.
+ rpc Get (GetUserRequest) returns (User) {
+ option (google.api.http) = { get: "/managed-elasticsearch/v1/clusters/{cluster_id}/users/{user_name}" };
+ }
+
+ // Retrieves the list of Elasticsearch users in the specified cluster.
+ rpc List (ListUsersRequest) returns (ListUsersResponse) {
+ option (google.api.http) = { get: "/managed-elasticsearch/v1/clusters/{cluster_id}/users" };
+ }
+
+ // Creates a user in the specified cluster.
+ rpc Create (CreateUserRequest) returns (operation.Operation) {
+ option (google.api.http) = { post: "/managed-elasticsearch/v1/clusters/{cluster_id}/users" body: "*" };
+ option (yandex.cloud.api.operation) = {
+ metadata: "CreateUserMetadata"
+ response: "User"
+ };
+ }
+
+ // Updates the specified user.
+ rpc Update (UpdateUserRequest) returns (operation.Operation) {
+ option (google.api.http) = { patch: "/managed-elasticsearch/v1/clusters/{cluster_id}/users/{user_name}" body: "*" };
+ option (yandex.cloud.api.operation) = {
+ metadata: "UpdateUserMetadata"
+ response: "User"
+ };
+ }
+
+ // Deletes the specified user.
+ rpc Delete (DeleteUserRequest) returns (operation.Operation) {
+ option (google.api.http) = { delete: "/managed-elasticsearch/v1/clusters/{cluster_id}/users/{user_name}" };
+ option (yandex.cloud.api.operation) = {
+ metadata: "DeleteUserMetadata"
+ response: "google.protobuf.Empty"
+ };
+ }
+}
+
+message GetUserRequest {
+ // ID of the Elasticsearch cluster the user belongs to.
+ //
+ // To get the cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // Name of the Elasticsearch user to return.
+ //
+ // To get the name of the user, make a [UserService.List] request.
+ string user_name = 2 [(required) = true, (length) = "<=63", (pattern) = "[a-zA-Z0-9_]*"];
+}
+
+message ListUsersRequest {
+ // ID of the Elasticsearch cluster to list Elasticsearch users in.
+ //
+ // To get the cluster ID, use a [ClusterService.List] request.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // The maximum number of results per page to return.
+ //
+ //If the number of available results is larger than `page_size`, the service returns a [ListUsersResponse.next_page_token] that can be used to get the next page of results in subsequent list requests.
+ int64 page_size = 2 [(value) = "<=1000"];
+
+ // Page token.
+ //
+ // To get the next page of results, set `page_token` to the [ListUsersResponse.next_page_token] returned by the previous list request.
+ string page_token = 3 [(length) = "<=100"];
+}
+
+message ListUsersResponse {
+ // List of Elasticsearch users.
+ repeated User users = 1;
+
+ // This token allows you to get the next page of results for list requests.
+ //
+ // If the number of results is larger than [ListUsersRequest.page_size], use the `next_page_token` as the value for the [ListUsersRequest.page_token] parameter in the next list request.
+ // Each subsequent list request will have its own `next_page_token` to continue paging through the results.
+ string next_page_token = 2;
+}
+
+message CreateUserRequest {
+ // ID of the Elasticsearch cluster to create a user in.
+ //
+ // To get the cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // Configuration of the user to create.
+ UserSpec user_spec = 2 [(required) = true];
+}
+
+message CreateUserMetadata {
+ // ID of the Elasticsearch cluster the user is being created in.
+ string cluster_id = 1;
+
+ // Name of the user that is being created.
+ string user_name = 2;
+}
+
+message UpdateUserRequest {
+ // ID of the Elasticsearch cluster the user belongs to.
+ //
+ // To get the cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // Name of the user to be updated.
+ //
+ // To get the name of the user, make a [UserService.List] request.
+ string user_name = 2 [(required) = true, (length) = "1-63", (pattern) = "[a-zA-Z0-9_]*"];
+
+ google.protobuf.FieldMask update_mask = 3;
+
+ // New password for the user.
+ string password = 4 [(length) = "8-128"];
+}
+
+message UpdateUserMetadata {
+ // ID of the Elasticsearch cluster the user belongs to.
+ string cluster_id = 1;
+
+ // Name of the user that is being updated.
+ string user_name = 2;
+}
+
+message DeleteUserRequest {
+ // ID of the Elasticsearch cluster the user belongs to.
+ //
+ // To get the cluster ID, make a [ClusterService.List] request.
+ string cluster_id = 1 [(required) = true, (length) = "<=50"];
+
+ // Name of the user to delete.
+ //
+ // To get the name of the user, make a [UserService.List] request.
+ string user_name = 2 [(required) = true, (length) = "1-63", (pattern) = "[a-zA-Z0-9_]*"];
+}
+
+message DeleteUserMetadata {
+ // ID of the Elasticsearch cluster the user belongs to.
+ string cluster_id = 1;
+
+ // Name of the user that is being deleted.
+ string user_name = 2;
+}