diff --git a/tests/slo/Dockerfile b/tests/slo/Dockerfile index 536ded2f0..76c86272e 100644 --- a/tests/slo/Dockerfile +++ b/tests/slo/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.23 as build +FROM golang:1.23 AS build ARG SRC_PATH ARG JOB_NAME COPY . /src diff --git a/tests/slo/Dockerfile.netcat-openbsd b/tests/slo/Dockerfile.netcat-openbsd new file mode 100644 index 000000000..78f4fe850 --- /dev/null +++ b/tests/slo/Dockerfile.netcat-openbsd @@ -0,0 +1,3 @@ +FROM alpine:latest +RUN apk add --no-cache netcat-openbsd +ENTRYPOINT [ "nc" ] \ No newline at end of file diff --git a/tests/slo/compose.yaml b/tests/slo/compose.yaml new file mode 100644 index 000000000..fbc056252 --- /dev/null +++ b/tests/slo/compose.yaml @@ -0,0 +1,275 @@ +networks: + default: + name: slo-network + ipam: + driver: default + config: + - subnet: "172.18.0.0/16" + ip_range: 172.18.238.0/27 + +x-runtime: &runtime + platform: linux/amd64 + privileged: true + +x-ydb-node: &ydb-node + image: cr.yandex/crptqonuodf51kdj7a7d/ydb:24.4.4.12 + restart: always + <<: *runtime + volumes: + - ./configs/ydb.yaml:/opt/ydb/cfg/config.yaml + +name: ydb + +services: + # `stub` service opens a port, connections to which never receive a response. + stub: + build: + # separate image because openBSD version of `netcat` can handle multiple connects + dockerfile: Dockerfile.netcat-openbsd + stdin_open: true + tty: true + expose: + - "2135" + networks: + default: + ipv4_address: 172.18.238.10 + command: [ "-k", "-l", "-p", "2135" ] + + static-0: + <<: *ydb-node + hostname: static-0 + command: + - /opt/ydb/bin/ydbd + - server + - --grpc-port + - "2135" + - --mon-port + - "8765" + - --ic-port + - "19001" + - --yaml-config + - /opt/ydb/cfg/config.yaml + - --node + - static + - --label + - deployment=docker + ports: + - "8765:8765" + - "2135:2135" + healthcheck: + test: bash -c "exec 6<> /dev/tcp/localhost/2135" + interval: 10s + timeout: 1s + retries: 3 + start_period: 30s + + static-init: + <<: *ydb-node + restart: on-failure + command: + - /opt/ydb/bin/ydbd + - -s + - grpc://static-0:2135 + - admin + - blobstorage + - config + - init + - --yaml-file + - /opt/ydb/cfg/config.yaml + depends_on: + static-0: + condition: service_healthy + + tenant-init: + <<: *ydb-node + restart: on-failure + command: + - /opt/ydb/bin/ydbd + - -s + - grpc://static-0:2135 + - admin + - database + - /Root/testdb + - create + - ssd:1 + depends_on: + static-init: + condition: service_completed_successfully + + database-1: &dynnode + <<: *ydb-node + command: + - /opt/ydb/bin/ydbd + - server + - --grpc-port + - "2135" + - --mon-port + - "8766" + - --ic-port + - "19002" + - --yaml-config + - /opt/ydb/cfg/config.yaml + - --tenant + - /Root/testdb + - --node-broker + - grpc://static-0:2135 + - --label + - deployment=docker + healthcheck: + test: bash -c "exec 6<> /dev/tcp/localhost/2135" + interval: 10s + timeout: 1s + retries: 3 + start_period: 30s + depends_on: + static-0: + condition: service_healthy + static-init: + condition: service_completed_successfully + tenant-init: + condition: service_completed_successfully + networks: + default: + ipv4_address: 172.18.238.11 + + database-2: + <<: *dynnode + networks: + default: + ipv4_address: 172.18.238.12 + + database-3: + <<: *dynnode + networks: + default: + ipv4_address: 172.18.238.13 + + database-4: + <<: *dynnode + networks: + default: + ipv4_address: 172.18.238.14 + + database-5: + <<: *dynnode + networks: + default: + ipv4_address: 172.18.238.15 + + chaos: + image: docker:latest + restart: on-failure + <<: *runtime + entrypoint: [ "/bin/sh", "-c", "chmod +x /opt/ydb/chaos.sh && ls -la /opt/ydb && /opt/ydb/chaos.sh" ] + volumes: + - ./configs/chaos.sh:/opt/ydb/chaos.sh + - ./configs/ydb.yaml:/opt/ydb/cfg/config.yaml + - /var/run/docker.sock:/var/run/docker.sock + depends_on: + static-0: + condition: service_healthy + + prometheus: + image: prom/prometheus + restart: unless-stopped + <<: *runtime + volumes: + - ./configs/prometheus.yml:/etc/prometheus/prometheus.yml + deploy: &monitoring-deploy + resources: + limits: + cpus: '0.1' + memory: 1000M + reservations: + cpus: '0.001' + memory: 50M + + prometheus-pushgateway: + image: prom/pushgateway + restart: unless-stopped + <<: *runtime + healthcheck: + test: [ "CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:9091/metrics" ] + interval: 1m30s + timeout: 1s + retries: 3 + start_period: 10s + deploy: + <<: *monitoring-deploy + + grafana: + image: grafana/grafana-enterprise + restart: unless-stopped + environment: + - GF_AUTH_DISABLE_LOGIN_FORM=true + - GF_AUTH_ANONYMOUS_ENABLED=true + - GF_USERS_ALLOW_SIGN_UP=false + - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin + volumes: + - ./configs/grafana/provisioning:/etc/grafana/provisioning + ports: + - '3000:3000' + + slo-native-query-create: + profiles: [ "native-query" ] + build: + context: ../.. + dockerfile: tests/slo/Dockerfile + args: + SRC_PATH: native/query + JOB_NAME: native-query + restart: on-failure + networks: + - default + command: + - create + - grpc://static-0:2135 + - /Root/testdb + depends_on: + tenant-init: + condition: service_completed_successfully + static-0: + condition: service_healthy + + slo-native-query-run: + profiles: [ "native-query" ] + build: + context: ../.. + dockerfile: tests/slo/Dockerfile + args: + SRC_PATH: native/query + JOB_NAME: native-query + extra_hosts: + # We are explicitly adding the stub service and dynnodes. + # This way, `stub` will always be the first in the list of IP addresses for the `database` FQDN. + - "database=172.18.238.10" + - "database=172.18.238.11" + - "database=172.18.238.12" + - "database=172.18.238.13" + - "database=172.18.238.14" + - "database=172.18.238.15" + command: + - run + - grpc://database:2135 + - /Root/testdb + - -prom-pgw + - prometheus-pushgateway:9091 + - -report-period + - "250" + - -time + - "600" + - -read-rps + - "500" + - -write-rps + - "50" + - -read-timeout + - "1000" + - -write-timeout + - "1000" + depends_on: + slo-native-query-create: + condition: service_completed_successfully + prometheus-pushgateway: + condition: service_healthy + stub: + condition: service_started diff --git a/tests/slo/configs/chaos.sh b/tests/slo/configs/chaos.sh new file mode 100755 index 000000000..d3e7e2e02 --- /dev/null +++ b/tests/slo/configs/chaos.sh @@ -0,0 +1,34 @@ +#!/bin/sh -e + +get_random_container() { + # Get a list of all containers starting with ydb-database-* + containers=$(docker ps --format '{{.Names}}' | grep '^ydb-database-') + + # Convert the list to a newline-separated string + containers=$(echo "$containers" | tr ' ' '\n') + + # Count the number of containers + containersCount=$(echo "$containers" | wc -l) + + # Generate a random number between 0 and containersCount - 1 + randomIndex=$(shuf -i 0-$(($containersCount - 1)) -n 1) + + # Get the container name at the random index + nodeForChaos=$(echo "$containers" | sed -n "$(($randomIndex + 1))p") +} + +get_random_container +sh -c "docker stop ${nodeForChaos} -t 30" +sh -c "docker start ${nodeForChaos}" + +sleep 60 + +get_random_container +sh -c "docker restart ${nodeForChaos} -t 0" + +sleep 60 + +get_random_container +sh -c "docker kill -s SIGKILL ${nodeForChaos}" + +sleep 60 \ No newline at end of file diff --git a/tests/slo/configs/grafana/provisioning/dashboards/dashboard.yml b/tests/slo/configs/grafana/provisioning/dashboards/dashboard.yml new file mode 100644 index 000000000..c6784142a --- /dev/null +++ b/tests/slo/configs/grafana/provisioning/dashboards/dashboard.yml @@ -0,0 +1,6 @@ +apiVersion: 1 + +providers: + - name: 'SLO' + options: + path: /etc/grafana/provisioning/dashboards diff --git a/tests/slo/configs/grafana/provisioning/dashboards/slo.json b/tests/slo/configs/grafana/provisioning/dashboards/slo.json new file mode 100644 index 000000000..bf1df577c --- /dev/null +++ b/tests/slo/configs/grafana/provisioning/dashboards/slo.json @@ -0,0 +1,708 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 1, + "links": [], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "go-native/query-3.113.2 [read] not OK" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0-16711121739", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "builder", + "expr": "rate(sdk_operations_success_total[$__rate_interval]) > 0", + "hide": false, + "legendFormat": "{{sdk}}-{{sdk_version}} [{{operation_type}}] OK", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "builder", + "expr": "rate(sdk_operations_failure_total[$__rate_interval]) > 0", + "hide": false, + "legendFormat": "{{sdk}}-{{sdk_version}} [{{operation_type}}] not OK", + "range": true, + "refId": "C" + } + ], + "title": "SLO Requests RPS", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 14, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0-16711121739", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "100 * sum by (ref) (increase(sdk_operations_success_total{operation_type=\"read\"}[30s])) / sum by (ref) (increase(sdk_operations_total{operation_type=\"read\"}[30s]))", + "hide": false, + "legendFormat": "Read operations availability", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P1809F7CD0C75ACF3" + }, + "editorMode": "code", + "expr": "100 * sum by (ref) (increase(sdk_operations_success_total{operation_type=\"write\"}[30s])) / sum by (ref) (increase(sdk_operations_total{operation_type=\"write\"}[30s]))", + "hide": false, + "instant": false, + "legendFormat": "Write operations availability", + "range": true, + "refId": "B" + } + ], + "title": "Availability", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, + "id": 7, + "panels": [], + "title": "Latencies", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 10 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0-16711121739", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "1000 * histogram_quantile(0.95, sum by(ref, le) (rate(sdk_operation_latency_seconds_bucket{operation_type=\"read\"}[30s])))", + "legendFormat": "95th percentile read operations latency in milliseconds", + "range": true, + "refId": "A" + } + ], + "title": "Read Latencies (OK)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 10 + }, + "id": 5, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0-16711121739", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "code", + "expr": "1000 * histogram_quantile(0.95, sum by(ref, le) (rate(sdk_operation_latency_seconds_bucket{operation_type=\"write\"}[30s])))", + "legendFormat": "95th percentile write operations latency in milliseconds", + "range": true, + "refId": "A" + } + ], + "title": "Write Latencies (OK)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 18 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0-16711121739", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "builder", + "expr": "latency{jobName=\"read\", status=\"err\"} > 0", + "legendFormat": "{{sdk}}-{{sdkVersion}}-p{{quantile}}", + "range": true, + "refId": "A" + } + ], + "title": "Read Latencies (NOT OK)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 18 + }, + "id": 11, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0-16711121739", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "editorMode": "builder", + "expr": "latency{jobName=\"write\", status=\"err\"} > 0", + "legendFormat": "{{sdk}}-{{sdkVersion}}-p{{quantile}}", + "range": true, + "refId": "A" + } + ], + "title": "Write Latencies (NOT OK)", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [ + { + "baseFilters": [], + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "filters": [], + "name": "filter", + "type": "adhoc" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "SLO", + "uid": "7CzMl5t4k", + "version": 1 +} \ No newline at end of file diff --git a/tests/slo/configs/grafana/provisioning/datasources/datasource.yml b/tests/slo/configs/grafana/provisioning/datasources/datasource.yml new file mode 100644 index 000000000..0b62b9c3a --- /dev/null +++ b/tests/slo/configs/grafana/provisioning/datasources/datasource.yml @@ -0,0 +1,11 @@ +apiVersion: 1 + +datasources: + - name: prometheus + type: prometheus + access: proxy + orgId: 1 + url: http://prometheus:9090 + basicAuth: false + isDefault: true + editable: true diff --git a/tests/slo/configs/prometheus.yml b/tests/slo/configs/prometheus.yml new file mode 100644 index 000000000..d3f196cf5 --- /dev/null +++ b/tests/slo/configs/prometheus.yml @@ -0,0 +1,9 @@ +global: + scrape_interval: 1s + evaluation_interval: 1s + +scrape_configs: + - job_name: "pushgateway" + static_configs: + - targets: + - prometheus-pushgateway:9091 \ No newline at end of file diff --git a/tests/slo/configs/ydb.yaml b/tests/slo/configs/ydb.yaml new file mode 100644 index 000000000..c54f740dd --- /dev/null +++ b/tests/slo/configs/ydb.yaml @@ -0,0 +1,60 @@ +actor_system_config: + cpu_count: 1 + node_type: STORAGE + use_auto_config: true +blob_storage_config: + service_set: + groups: + - erasure_species: none + rings: + - fail_domains: + - vdisk_locations: + - node_id: 1 + path: SectorMap:1:64 + pdisk_category: SSD +channel_profile_config: + profile: + - channel: + - erasure_species: none + pdisk_category: 0 + storage_pool_kind: ssd + - erasure_species: none + pdisk_category: 0 + storage_pool_kind: ssd + - erasure_species: none + pdisk_category: 0 + storage_pool_kind: ssd + profile_id: 0 +domains_config: + domain: + - name: Root + storage_pool_types: + - kind: ssd + pool_config: + box_id: 1 + erasure_species: none + kind: ssd + pdisk_filter: + - property: + - type: SSD + vdisk_kind: Default + state_storage: + - ring: + node: [1] + nto_select: 1 + ssid: 1 +host_configs: + - drive: + - path: SectorMap:1:64 + type: SSD + host_config_id: 1 +hosts: + - host: static-0 + host_config_id: 1 + node_id: 1 + port: 19001 + walle_location: + body: 1 + data_center: az-1 + rack: "0" +static_erasure: none \ No newline at end of file