From 3dac50b78a74e11c94323b402903f494cf22f300 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Wed, 22 Jul 2026 09:26:20 +0400 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=B2=D1=81=D0=B5=20TF=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D1=8B=20=D1=81=20=D0=B4=D0=B5=D1=82=D0=B0=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=BC=D0=B8=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D1=8F=D0=BC=D0=B8=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=BA=D0=B0=D0=B6=D0=B4=D1=83=D1=8E=20=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TEST_STAND/IOT_KAFKA_DEMO/consumer.tf | 70 ++++++------ TEST_STAND/IOT_KAFKA_DEMO/dashboard.tf | 40 +++---- TEST_STAND/IOT_KAFKA_DEMO/infra.tf | 81 ++++++++++++++ TEST_STAND/IOT_KAFKA_DEMO/locals.tf | 143 +++++++++---------------- TEST_STAND/IOT_KAFKA_DEMO/main.tf | 27 +++-- TEST_STAND/IOT_KAFKA_DEMO/producer.tf | 52 ++++----- apps/iot-consumer | 1 - 7 files changed, 238 insertions(+), 176 deletions(-) create mode 100644 TEST_STAND/IOT_KAFKA_DEMO/infra.tf delete mode 160000 apps/iot-consumer diff --git a/TEST_STAND/IOT_KAFKA_DEMO/consumer.tf b/TEST_STAND/IOT_KAFKA_DEMO/consumer.tf index e007070..6bc1fd9 100644 --- a/TEST_STAND/IOT_KAFKA_DEMO/consumer.tf +++ b/TEST_STAND/IOT_KAFKA_DEMO/consumer.tf @@ -1,58 +1,64 @@ # ============================================================================= -# Flask Consumer — читает RabbitMQ, пишет в Redis + MongoDB +# Consumer (Node.js) — читает RabbitMQ, сохраняет в Redis + MongoDB +# Использует amqplib для AMQP-подключения к RabbitMQ # ============================================================================= + locals { - consumer_rabbit_host = try(nubes_rabbitmq.main.state_out_flat["internalConnect"], "") - consumer_rabbit_user = try(nonsensitive(nubes_rabbitmq.main.vault_secrets["adminUser"]), "admin") - consumer_rabbit_password = try(nonsensitive(nubes_rabbitmq.main.vault_secrets["adminPass"]), "") + # Подключение к RabbitMQ (AMQP, порт 5672) + cons_rmq_host = nubes_rabbitmq.main.state_out_flat["internalConnect"] # K8s-хост + cons_rmq_user = nonsensitive(nubes_rabbitmq.main.vault_secrets["adminUser"]) # логин + cons_rmq_pass = nonsensitive(nubes_rabbitmq.main.vault_secrets["adminPass"]) # пароль - consumer_redis_host = try(nubes_redis.main.state_out_flat["internalConnect.master"], "") - consumer_redis_password = try(nonsensitive(nubes_redis.main.vault_secrets["adminPass"]), "") + # Подключение к Redis (порт 6379) + cons_rds_host = nubes_redis.main.state_out_flat["internalConnect.master"] # K8s-хост + cons_rds_pass = nonsensitive(nubes_redis.main.vault_secrets["adminPass"]) # пароль - consumer_mongo_host = try(nubes_mongodb.main.state_out_flat["internalConnect"], "") - consumer_mongo_user = try(nonsensitive(nubes_mongodb.main.vault_secrets["adminUser"]), "admin") - consumer_mongo_password = try(nonsensitive(nubes_mongodb.main.vault_secrets["adminPass"]), "") + # Подключение к MongoDB (порт 27017) — без аутентификации (vault пустой) + cons_mgo_host = nubes_mongodb.main.state_out_flat["internalConnect"] # K8s-хост + cons_mgo_user = "admin" # дефолтный пользователь + cons_mgo_pass = "" # без пароля } -resource "nubes_flask" "consumer" { - resource_name = local.consumer_resource_name +resource "nubes_nodejs" "consumer" { + resource_name = local.cons_resource_name # имя в личном кабинете startup_configuration = { - resource_realm = var.realm + resource_realm = var.realm # K8s-кластер } cluster_configuration = { - cpu = local.consumer_cpu - memory = local.consumer_memory - replicas = local.consumer_replicas + cpu = local.cons_cpu # CPU millicores + memory = local.cons_memory # память MB + replicas = local.cons_replicas # количество подов } access_configuration = { - domain = local.consumer_domain + domain = local.cons_domain # поддомен для HTTP } app_configuration = { - version = "3.12" - git_path = local.consumer_git_path - health_path = "/health" + version = "22" # версия Node.js + git_path = local.cons_git_path # Git-репо с кодом + health_path = "/" # health-check эндпоинт } - git_revision = local.consumer_git_revision - operation_timeout = local.consumer_timeout - adopt_existing_on_create = true + git_revision = local.cons_git_revision # коммит для деплоя + operation_timeout = local.cons_timeout # таймаут + # Переменные окружения для K8s пода json_env = jsonencode({ - RABBIT_HOST = local.consumer_rabbit_host - RABBIT_PORT = "5672" - RABBIT_USER = local.consumer_rabbit_user - RABBIT_PASSWORD = local.consumer_rabbit_password - RABBIT_QUEUE = local.rabbit_queue - REDIS_HOST = local.consumer_redis_host - REDIS_PORT = "6379" - REDIS_PASSWORD = local.consumer_redis_password - MONGO_URI = "mongodb://${local.consumer_mongo_user}:${local.consumer_mongo_password}@${local.consumer_mongo_host}:27017/iot?authSource=admin" - MONGO_DB = "iot" + RMQ_HOST = local.cons_rmq_host # хост RabbitMQ + RMQ_PORT = "5672" # порт AMQP + RMQ_USER = local.cons_rmq_user # логин RabbitMQ + RMQ_PASS = local.cons_rmq_pass # пароль RabbitMQ + RMQ_QUEUE = local.rmq_queue # имя очереди + REDIS_HOST = local.cons_rds_host # хост Redis + REDIS_PORT = "6379" # порт Redis + REDIS_PASS = local.cons_rds_pass # пароль Redis + MONGO_URI = "${local.cons_mgo_user}:${local.cons_mgo_pass}@${local.cons_mgo_host}:27017/iot?authSource=admin" + MONGO_DB = "iot" # имя базы MongoDB }) + # Ждать создания всех трёх сервисов depends_on = [nubes_rabbitmq.main, nubes_redis.main, nubes_mongodb.main] } diff --git a/TEST_STAND/IOT_KAFKA_DEMO/dashboard.tf b/TEST_STAND/IOT_KAFKA_DEMO/dashboard.tf index 8acef07..5be4967 100644 --- a/TEST_STAND/IOT_KAFKA_DEMO/dashboard.tf +++ b/TEST_STAND/IOT_KAFKA_DEMO/dashboard.tf @@ -1,42 +1,46 @@ # ============================================================================= -# Node.js Dashboard — читает Redis, показывает графики Chart.js +# Dashboard (Node.js + Chart.js) — читает Redis, показывает графики +# API: /api/latest, /api/counters, /api/recent # ============================================================================= + locals { - dashboard_redis_host = try(nubes_redis.main.state_out_flat["internalConnect.master"], "") - dashboard_redis_password = try(nonsensitive(nubes_redis.main.vault_secrets["adminPass"]), "") + # Подключение к Redis (только чтение) + dash_rds_host = nubes_redis.main.state_out_flat["internalConnect.master"] # K8s-хост Redis + dash_rds_pass = nonsensitive(nubes_redis.main.vault_secrets["adminPass"]) # пароль Redis } resource "nubes_nodejs" "dashboard" { - resource_name = local.dashboard_resource_name + resource_name = local.dash_resource_name # имя в личном кабинете startup_configuration = { - resource_realm = var.realm + resource_realm = var.realm # K8s-кластер } cluster_configuration = { - cpu = local.dashboard_cpu - memory = local.dashboard_memory - replicas = local.dashboard_replicas + cpu = local.dash_cpu # CPU millicores + memory = local.dash_memory # память MB + replicas = local.dash_replicas # количество подов } access_configuration = { - domain = local.dashboard_domain + domain = local.dash_domain # поддомен -> iotdash22.nodejsk8s.dev.nubes.ru } app_configuration = { - version = "22" - git_path = local.dashboard_git_path - health_path = "/" + version = "22" # версия Node.js + git_path = local.dash_git_path # Git-репо с кодом + health_path = "/" # health-check } - git_revision = local.dashboard_git_revision - operation_timeout = local.dashboard_timeout + git_revision = local.dash_git_revision # коммит для деплоя + operation_timeout = local.dash_timeout # таймаут + # Переменные окружения json_env = jsonencode({ - REDIS_HOST = local.dashboard_redis_host - REDIS_PORT = "6379" - REDIS_PASSWORD = local.dashboard_redis_password + REDIS_HOST = local.dash_rds_host # хост Redis + REDIS_PORT = "6379" # порт Redis + REDIS_PASS = local.dash_rds_pass # пароль Redis }) - depends_on = [nubes_redis.main] + depends_on = [nubes_redis.main] # ждать создания Redis } diff --git a/TEST_STAND/IOT_KAFKA_DEMO/infra.tf b/TEST_STAND/IOT_KAFKA_DEMO/infra.tf new file mode 100644 index 0000000..7c54ce7 --- /dev/null +++ b/TEST_STAND/IOT_KAFKA_DEMO/infra.tf @@ -0,0 +1,81 @@ +# ============================================================================= +# Инфраструктурные сервисы (создаются первым прогоном apply) +# RabbitMQ (очередь) + Redis (кэш) + MongoDB (архив) +# ============================================================================= + +# --- RabbitMQ: очередь сообщений (сервис 93) --- +# state_out_flat["internalConnect"] = K8s-хост (service.cluster.local) +# vault_secrets["adminUser"] / ["adminPass"] = логин/пароль (прямые строки, не JSON) +resource "nubes_rabbitmq" "main" { + resource_name = local.rmq_resource_name # имя в личном кабинете + + startup_configuration = { # на каком K8s-кластере развернуть + resource_realm = var.realm + } + + cluster_configuration = { # ресурсы пода + cpu = local.rmq_cpu # CPU millicores + memory = local.rmq_memory # память MB + disk = local.rmq_disk # диск GB + replicas = local.rmq_replicas # количество нод + } + + access_configuration = { # сетевой доступ + master_ip_space = "no-needed" # не резервировать внешний IP + master_access_list = jsonencode(["10.0.0.0/8"]) # внутренняя сеть K8s + } + + operation_timeout = local.rmq_timeout # макс. время ожидания +} + +# --- Redis: кэш дашборда (сервис 91) --- +# state_out_flat["internalConnect.master"] = хост +# vault_secrets["adminPass"] = пароль (прямая строка) +resource "nubes_redis" "main" { + resource_name = local.rds_resource_name + + startup_configuration = { + resource_realm = var.realm + } + + cluster_configuration = { + cpu = local.rds_cpu + memory = local.rds_memory + disk = local.rds_disk + replicas = local.rds_replicas + } + + access_configuration = { + master_ip_space = "no-needed" # не резервировать внешний IP + master_access_list = jsonencode(["10.0.0.0/8"]) # доступ изнутри кластера + slave_ip_space = "no-needed" # slave не нужен + slave_access_list = jsonencode([]) # slave не нужен + } + + operation_timeout = local.rds_timeout +} + +# --- MongoDB: архив событий (сервис 92) --- +# state_out_flat["internalConnect"] = хост +# vault_secrets — пустой (нет дефолтных пользователей), подключаемся без пароля +resource "nubes_mongodb" "main" { + resource_name = local.mgo_resource_name + + startup_configuration = { + resource_realm = var.realm + } + + cluster_configuration = { + cpu = local.mgo_cpu + memory = local.mgo_memory + disk = local.mgo_disk + replicas = local.mgo_replicas + } + + access_configuration = { + master_ip_space = "no-needed" + master_access_list = jsonencode(["10.0.0.0/8"]) + } + + operation_timeout = local.mgo_timeout +} diff --git a/TEST_STAND/IOT_KAFKA_DEMO/locals.tf b/TEST_STAND/IOT_KAFKA_DEMO/locals.tf index 7ae965a..c378fe5 100644 --- a/TEST_STAND/IOT_KAFKA_DEMO/locals.tf +++ b/TEST_STAND/IOT_KAFKA_DEMO/locals.tf @@ -1,100 +1,61 @@ # ============================================================================= -# locals.tf — все настраиваемые значения IOT_KAFKA_DEMO -# Kafka + ClickHouse + Superset + Flask (producer + consumer) +# Общие переменные для всех ресурсов демо-стенда IoT +# Пайплайн: Producer -> RabbitMQ -> Consumer -> Redis+MongoDB -> Dashboard +# Все значения вынесены сюда — в ресурсах хардкода нет # ============================================================================= - locals { + # --- RabbitMQ: очередь сообщений (сервис 93) --- + rmq_resource_name = "iot-rmq" # имя инстанса в личном кабинете Nubes + rmq_cpu = 300 # CPU в millicores (1000 = 1 ядро) + rmq_memory = 512 # память в MB + rmq_disk = 5 # диск в GB + rmq_replicas = 1 # количество реплик (нод) + rmq_timeout = "11m" # таймаут ожидания операций create/modify + rmq_queue = "iot-events" # имя очереди: producer кладёт, consumer забирает - # ═══════════════════════════════════════════════════════════════════════════ - # Kafka - # ═══════════════════════════════════════════════════════════════════════════ + # --- Redis: кэш дашборда (сервис 91) --- + rds_resource_name = "iot-rds" # имя инстанса (rds = ReDiS) + rds_cpu = 300 # CPU millicores + rds_memory = 512 # память MB + rds_disk = 5 # диск GB + rds_replicas = 1 # реплик (нод) + rds_timeout = "11m" # таймаут операций - kafka_resource_name = "iot-kafka-v2" - kafka_cpu = 500 - kafka_memory = 1024 - kafka_disk = 10 - kafka_replicas = 1 - kafka_version = "3.7" - kafka_timeout = "15m" + # --- MongoDB: архив всех событий (сервис 92) --- + mgo_resource_name = "iot-mgo" # имя инстанса (mgo = MonGO) + mgo_cpu = 300 # CPU millicores + mgo_memory = 512 # память MB + mgo_disk = 5 # диск GB + mgo_replicas = 1 # реплик (нод) + mgo_timeout = "11m" # таймаут операций - # Kafka — topic - kafka_topic_name = "iot-events" - kafka_topic_parts = 3 - kafka_topic_repl = 1 + # --- Producer (Node.js): генерирует IoT-события -> RabbitMQ --- + prod_resource_name = "iot-prod" # имя инстанса (prod = PRODucer) + prod_domain = "iotprod22" # поддомен (станет iotprod22.nodejsk8s.dev.nubes.ru) + prod_git_path = "https://gitea.services.ngcloud.ru/Nail/tf-iot-producer.git" # Git-репо с кодом producer + prod_git_revision = "0bf1847" # хеш коммита (менять для редеплоя нового кода) + prod_cpu = 300 # CPU millicores + prod_memory = 256 # память MB + prod_replicas = 1 # количество подов + prod_timeout = "11m" # таймаут операций - # Kafka — user (общий для producer и consumer) - kafka_username = "iot-app" + # --- Consumer (Node.js): RabbitMQ -> Redis + MongoDB --- + cons_resource_name = "iot-cons3" # имя инстанса (cons = CONSumer, версия 3) + cons_domain = "iotcons22n" # поддомен -> iotcons22n.nodejsk8s.dev.nubes.ru + cons_git_path = "https://gitea.services.ngcloud.ru/Nail/tf-iot-consumer.git" # Git-репо с кодом consumer + cons_git_revision = "03fefc0" # хеш коммита (менять для редеплоя) + cons_cpu = 300 # CPU millicores + cons_memory = 256 # память MB + cons_replicas = 1 # количество подов + cons_timeout = "11m" # таймаут операций - # ═══════════════════════════════════════════════════════════════════════════ - # RabbitMQ - # ═══════════════════════════════════════════════════════════════════════════ - - rabbit_resource_name = "iot-rabbit" - rabbit_cpu = 300 - rabbit_memory = 512 - rabbit_disk = 5 - rabbit_replicas = 1 - rabbit_timeout = "11m" - rabbit_queue = "iot-events" - - # ═══════════════════════════════════════════════════════════════════════════ - # Flask — Producer - # ═══════════════════════════════════════════════════════════════════════════ - - producer_resource_name = "iot-producer-v3" - producer_domain = "iotprodtest" - producer_git_path = "https://gitea.services.ngcloud.ru/Nail/tf-iot-producer.git" - producer_git_revision = "a6ed190" - producer_cpu = 300 - producer_memory = 256 - producer_replicas = 1 - producer_timeout = "11m" - - # ═══════════════════════════════════════════════════════════════════════════ - # Flask — Consumer - # ═══════════════════════════════════════════════════════════════════════════ - - consumer_resource_name = "iot-consumer-v4" - consumer_domain = "iotconstest" - consumer_git_path = "https://gitea.services.ngcloud.ru/Nail/tf-iot-consumer.git" - consumer_git_revision = "354cf38" - consumer_cpu = 300 - consumer_memory = 256 - consumer_replicas = 1 - consumer_timeout = "11m" - - # ═══════════════════════════════════════════════════════════════════════════ - # Redis - # ═══════════════════════════════════════════════════════════════════════════ - - redis_resource_name = "iot-redis" - redis_cpu = 300 - redis_memory = 512 - redis_disk = 5 - redis_replicas = 1 - redis_timeout = "11m" - - # ═══════════════════════════════════════════════════════════════════════════ - # MongoDB - # ═══════════════════════════════════════════════════════════════════════════ - - mongo_resource_name = "iot-mongo" - mongo_cpu = 300 - mongo_memory = 512 - mongo_disk = 5 - mongo_replicas = 1 - mongo_timeout = "11m" - - # ═══════════════════════════════════════════════════════════════════════════ - # Node.js Dashboard - # ═══════════════════════════════════════════════════════════════════════════ - - dashboard_resource_name = "iot-dashboard" - dashboard_domain = "iotdashtest" - dashboard_git_path = "https://gitea.services.ngcloud.ru/Nail/tf-iot-dashboard.git" - dashboard_git_revision = "42eb636" - dashboard_cpu = 300 - dashboard_memory = 256 - dashboard_replicas = 1 - dashboard_timeout = "11m" + # --- Dashboard (Node.js + Chart.js): Redis -> графики --- + dash_resource_name = "iot-dash" # имя инстанса (dash = DASHboard) + dash_domain = "iotdash22" # поддомен -> iotdash22.nodejsk8s.dev.nubes.ru + dash_git_path = "https://gitea.services.ngcloud.ru/Nail/tf-iot-dashboard.git" # Git-репо с кодом dashboard + dash_git_revision = "bc6f43d" # хеш коммита (менять для редеплоя) + dash_cpu = 300 # CPU millicores + dash_memory = 256 # память MB + dash_replicas = 1 # количество подов + dash_timeout = "11m" # таймаут операций } diff --git a/TEST_STAND/IOT_KAFKA_DEMO/main.tf b/TEST_STAND/IOT_KAFKA_DEMO/main.tf index 149bb4f..b7bc8aa 100644 --- a/TEST_STAND/IOT_KAFKA_DEMO/main.tf +++ b/TEST_STAND/IOT_KAFKA_DEMO/main.tf @@ -1,29 +1,36 @@ +# ============================================================================= +# Terraform-конфиг: IoT Demo стенд +# 6 сервисов Nubes Cloud: RabbitMQ, Redis, MongoDB, 3x Node.js +# Пайплайн: Producer -> RabbitMQ -> Consumer -> Redis+MongoDB -> Dashboard +# ============================================================================= + terraform { required_providers { nubes = { - source = "registry.kube5s.ru/nubes-test/nubes" - version = "5.1.16" + source = "registry.kube5s.ru/nubes-test/nubes" # реестр провайдера (test) + version = "5.1.16" # версия провайдера Nubes } } } +# API-токен для доступа к Nubes (из secrets/test.token) variable "api_token" { - type = string - sensitive = true - description = "Nubes API token" + type = string + sensitive = true # не показывать в логах/плане } +# Кластер Kubernetes для развёртывания (k8s-4-sandbox-nubes-ru) variable "realm" { - type = string - description = "resource_realm parameter for all resources" + type = string } +# S3-пользователь для бэкапов (не используется в этом демо) variable "s3_name" { - type = string - description = "S3 user name for backups" + type = string } +# Конфигурация провайдера Nubes provider "nubes" { api_token = var.api_token - api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc" + api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc" # тестовый API } diff --git a/TEST_STAND/IOT_KAFKA_DEMO/producer.tf b/TEST_STAND/IOT_KAFKA_DEMO/producer.tf index 56a9729..cca640a 100644 --- a/TEST_STAND/IOT_KAFKA_DEMO/producer.tf +++ b/TEST_STAND/IOT_KAFKA_DEMO/producer.tf @@ -1,47 +1,51 @@ # ============================================================================= -# Flask Producer — генерирует IoT-события, шлёт в RabbitMQ +# Producer (Node.js) — генерирует IoT-события и шлёт в RabbitMQ +# Каждые 3 сек создаёт случайное событие от одного из 8 датчиков +# Переменные окружения попадают в K8s под через json_env # ============================================================================= + locals { - producer_rabbit_host = try(nubes_rabbitmq.main.state_out_flat["internalConnect"], "") - producer_rabbit_user = try(nonsensitive(nubes_rabbitmq.main.vault_secrets["adminUser"]), "admin") - producer_rabbit_password = try(nonsensitive(nubes_rabbitmq.main.vault_secrets["adminPass"]), "") + # Достаём реальные значения из созданного RabbitMQ (state_out_flat + vault_secrets) + prod_rmq_host = nubes_rabbitmq.main.state_out_flat["internalConnect"] # K8s-хост RabbitMQ + prod_rmq_user = nonsensitive(nubes_rabbitmq.main.vault_secrets["adminUser"]) # логин RabbitMQ + prod_rmq_pass = nonsensitive(nubes_rabbitmq.main.vault_secrets["adminPass"]) # пароль RabbitMQ } -resource "nubes_flask" "producer" { - resource_name = local.producer_resource_name +resource "nubes_nodejs" "producer" { + resource_name = local.prod_resource_name # имя в личном кабинете startup_configuration = { - resource_realm = var.realm + resource_realm = var.realm # K8s-кластер } cluster_configuration = { - cpu = local.producer_cpu - memory = local.producer_memory - replicas = local.producer_replicas + cpu = local.prod_cpu # CPU millicores + memory = local.prod_memory # память MB + replicas = local.prod_replicas # количество подов } access_configuration = { - domain = local.producer_domain + domain = local.prod_domain # поддомен для HTTP-доступа } app_configuration = { - version = "3.12" - git_path = local.producer_git_path - health_path = "/health" + version = "22" # версия Node.js + git_path = local.prod_git_path # Git-репо с кодом + health_path = "/" # эндпоинт для health-check'а } - git_revision = local.producer_git_revision - operation_timeout = local.producer_timeout - adopt_existing_on_create = true + git_revision = local.prod_git_revision # коммит для деплоя + operation_timeout = local.prod_timeout # таймаут + # Переменные окружения в K8s поде (доступны через process.env) json_env = jsonencode({ - RABBIT_HOST = local.producer_rabbit_host - RABBIT_PORT = "5672" - RABBIT_USER = local.producer_rabbit_user - RABBIT_PASSWORD = local.producer_rabbit_password - RABBIT_QUEUE = local.rabbit_queue - PRODUCE_INTERVAL = "3" + RABBIT_HOST = local.prod_rmq_host # хост RabbitMQ + RABBIT_PORT = "5672" # порт AMQP + RABBIT_USER = local.prod_rmq_user # логин + RABBIT_PASS = local.prod_rmq_pass # пароль + RABBIT_QUEUE = local.rmq_queue # имя очереди + PRODUCE_INTERVAL = "3" # интервал между событиями (сек) }) - depends_on = [nubes_rabbitmq.main] + depends_on = [nubes_rabbitmq.main] # ждать создания RabbitMQ } diff --git a/apps/iot-consumer b/apps/iot-consumer deleted file mode 160000 index 354cf38..0000000 --- a/apps/iot-consumer +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 354cf387d293cb7545fb6c26676cd5f5dce67de1