From e8b8db1d1073e480d63afd35eaef52bc53b22043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Wed, 1 Jul 2026 10:04:15 +0400 Subject: [PATCH] v5.0.57: regenerate all from TEST API (NOT PROD) - 43 YAML, 94 Go, 332 docs from deck-api-test.ngcloud.ru - STANDS.md, TESTING.md, API_TOKENS.md added - Never mix PROD/TEST again --- universal_rebuild/docs-gen/akhq.md | 13 + universal_rebuild/docs-gen/akhq_example.md | 50 +++ universal_rebuild/docs-gen/akhq_ops.md | 15 + universal_rebuild/docs-gen/akhq_outputs.md | 33 ++ universal_rebuild/docs-gen/akhq_params.md | 12 + .../docs-gen/akhq_params_create.md | 40 +++ .../docs-gen/akhq_params_modify.md | 15 + universal_rebuild/docs-gen/clickhouse.md | 13 + .../docs-gen/clickhouse_database.md | 27 ++ .../docs-gen/clickhouse_database_example.md | 33 ++ .../docs-gen/clickhouse_example.md | 49 +++ universal_rebuild/docs-gen/clickhouse_ops.md | 20 ++ .../docs-gen/clickhouse_outputs.md | 18 + .../docs-gen/clickhouse_params.md | 12 + .../docs-gen/clickhouse_params_create.md | 39 +++ .../docs-gen/clickhouse_params_modify.md | 21 ++ universal_rebuild/docs-gen/clickhouse_user.md | 29 ++ .../docs-gen/clickhouse_user_example.md | 35 ++ universal_rebuild/docs-gen/dnsrecord.md | 13 + .../docs-gen/dnsrecord_example.md | 49 +++ universal_rebuild/docs-gen/dnsrecord_ops.md | 14 + .../docs-gen/dnsrecord_outputs.md | 29 ++ .../docs-gen/dnsrecord_params.md | 12 + .../docs-gen/dnsrecord_params_create.md | 27 ++ .../docs-gen/dnsrecord_params_modify.md | 15 + universal_rebuild/docs-gen/dnszone.md | 13 + universal_rebuild/docs-gen/dnszone_example.md | 52 +++ universal_rebuild/docs-gen/dnszone_ops.md | 12 + universal_rebuild/docs-gen/dnszone_outputs.md | 32 ++ universal_rebuild/docs-gen/dnszone_params.md | 12 + .../docs-gen/dnszone_params_create.md | 31 ++ .../docs-gen/dnszone_params_modify.md | 11 + universal_rebuild/docs-gen/dummy.md | 13 + universal_rebuild/docs-gen/dummy_example.md | 50 +++ universal_rebuild/docs-gen/dummy_ops.md | 17 + universal_rebuild/docs-gen/dummy_outputs.md | 28 ++ universal_rebuild/docs-gen/dummy_params.md | 12 + .../docs-gen/dummy_params_create.md | 46 +++ .../docs-gen/dummy_params_modify.md | 21 ++ universal_rebuild/docs-gen/flask.md | 13 + universal_rebuild/docs-gen/flask_example.md | 49 +++ universal_rebuild/docs-gen/flask_ops.md | 17 + universal_rebuild/docs-gen/flask_outputs.md | 18 + universal_rebuild/docs-gen/flask_params.md | 12 + .../docs-gen/flask_params_create.md | 39 +++ .../docs-gen/flask_params_modify.md | 17 + universal_rebuild/docs-gen/gitea.md | 13 + universal_rebuild/docs-gen/gitea_complex.md | 13 + .../docs-gen/gitea_complex_example.md | 42 +++ .../docs-gen/gitea_complex_ops.md | 10 + .../docs-gen/gitea_complex_outputs.md | 18 + .../docs-gen/gitea_complex_params.md | 12 + .../docs-gen/gitea_complex_params_create.md | 16 + .../docs-gen/gitea_complex_params_modify.md | 11 + universal_rebuild/docs-gen/gitea_example.md | 50 +++ universal_rebuild/docs-gen/gitea_ops.md | 15 + universal_rebuild/docs-gen/gitea_outputs.md | 39 +++ universal_rebuild/docs-gen/gitea_params.md | 12 + .../docs-gen/gitea_params_create.md | 42 +++ .../docs-gen/gitea_params_modify.md | 20 ++ universal_rebuild/docs-gen/harbor.md | 13 + universal_rebuild/docs-gen/harbor_example.md | 50 +++ universal_rebuild/docs-gen/harbor_ops.md | 13 + universal_rebuild/docs-gen/harbor_outputs.md | 40 +++ universal_rebuild/docs-gen/harbor_params.md | 12 + .../docs-gen/harbor_params_create.md | 28 ++ .../docs-gen/harbor_params_modify.md | 17 + universal_rebuild/docs-gen/http.md | 13 + universal_rebuild/docs-gen/http_example.md | 51 +++ universal_rebuild/docs-gen/http_ops.md | 17 + universal_rebuild/docs-gen/http_outputs.md | 34 ++ universal_rebuild/docs-gen/http_params.md | 12 + .../docs-gen/http_params_create.md | 42 +++ .../docs-gen/http_params_modify.md | 17 + universal_rebuild/docs-gen/index.md | 47 +++ .../docs-gen/k8s_sthutrval_cluster.md | 13 + .../docs-gen/k8s_sthutrval_cluster_example.md | 49 +++ .../docs-gen/k8s_sthutrval_cluster_ops.md | 18 + .../docs-gen/k8s_sthutrval_cluster_outputs.md | 33 ++ .../docs-gen/k8s_sthutrval_cluster_params.md | 12 + .../k8s_sthutrval_cluster_params_create.md | 39 +++ .../k8s_sthutrval_cluster_params_modify.md | 18 + .../docs-gen/k8s_sthutrval_cluster_user.md | 27 ++ .../k8s_sthutrval_cluster_user_example.md | 33 ++ .../docs-gen/k8s_ziti_controller.md | 13 + .../docs-gen/k8s_ziti_controller_example.md | 50 +++ .../docs-gen/k8s_ziti_controller_ops.md | 12 + .../docs-gen/k8s_ziti_controller_outputs.md | 18 + .../docs-gen/k8s_ziti_controller_params.md | 12 + .../k8s_ziti_controller_params_create.md | 28 ++ .../k8s_ziti_controller_params_modify.md | 11 + universal_rebuild/docs-gen/kafka.md | 13 + universal_rebuild/docs-gen/kafka_example.md | 50 +++ universal_rebuild/docs-gen/kafka_ops.md | 21 ++ universal_rebuild/docs-gen/kafka_outputs.md | 54 +++ universal_rebuild/docs-gen/kafka_params.md | 12 + .../docs-gen/kafka_params_create.md | 41 +++ .../docs-gen/kafka_params_modify.md | 20 ++ universal_rebuild/docs-gen/kafka_topic.md | 35 ++ .../docs-gen/kafka_topic_example.md | 33 ++ universal_rebuild/docs-gen/kafka_user.md | 39 +++ .../docs-gen/kafka_user_example.md | 35 ++ universal_rebuild/docs-gen/lucee.md | 13 + universal_rebuild/docs-gen/lucee_example.md | 49 +++ universal_rebuild/docs-gen/lucee_ops.md | 18 + universal_rebuild/docs-gen/lucee_outputs.md | 34 ++ universal_rebuild/docs-gen/lucee_params.md | 12 + .../docs-gen/lucee_params_create.md | 39 +++ .../docs-gen/lucee_params_modify.md | 17 + universal_rebuild/docs-gen/mariadb.md | 13 + .../docs-gen/mariadb_database.md | 27 ++ .../docs-gen/mariadb_database_example.md | 33 ++ universal_rebuild/docs-gen/mariadb_example.md | 48 +++ universal_rebuild/docs-gen/mariadb_ops.md | 20 ++ universal_rebuild/docs-gen/mariadb_outputs.md | 18 + universal_rebuild/docs-gen/mariadb_params.md | 12 + .../docs-gen/mariadb_params_create.md | 37 ++ .../docs-gen/mariadb_params_modify.md | 19 + universal_rebuild/docs-gen/mariadb_user.md | 33 ++ .../docs-gen/mariadb_user_example.md | 36 ++ universal_rebuild/docs-gen/mongodb.md | 13 + universal_rebuild/docs-gen/mongodb_example.md | 50 +++ universal_rebuild/docs-gen/mongodb_ops.md | 18 + universal_rebuild/docs-gen/mongodb_outputs.md | 34 ++ universal_rebuild/docs-gen/mongodb_params.md | 12 + .../docs-gen/mongodb_params_create.md | 41 +++ .../docs-gen/mongodb_params_modify.md | 20 ++ universal_rebuild/docs-gen/mongodb_user.md | 35 ++ .../docs-gen/mongodb_user_example.md | 33 ++ universal_rebuild/docs-gen/nextcloud.md | 13 + .../docs-gen/nextcloud_backup.md | 19 + .../docs-gen/nextcloud_backup_example.md | 31 ++ .../docs-gen/nextcloud_example.md | 46 +++ universal_rebuild/docs-gen/nextcloud_ops.md | 19 + .../docs-gen/nextcloud_outputs.md | 18 + .../docs-gen/nextcloud_params.md | 12 + .../docs-gen/nextcloud_params_create.md | 35 ++ .../docs-gen/nextcloud_params_modify.md | 16 + universal_rebuild/docs-gen/nifi.md | 13 + universal_rebuild/docs-gen/nifi_example.md | 46 +++ universal_rebuild/docs-gen/nifi_ops.md | 13 + universal_rebuild/docs-gen/nifi_outputs.md | 18 + universal_rebuild/docs-gen/nifi_params.md | 12 + .../docs-gen/nifi_params_create.md | 23 ++ .../docs-gen/nifi_params_modify.md | 16 + universal_rebuild/docs-gen/nodejs.md | 13 + universal_rebuild/docs-gen/nodejs_example.md | 49 +++ universal_rebuild/docs-gen/nodejs_ops.md | 17 + universal_rebuild/docs-gen/nodejs_outputs.md | 34 ++ universal_rebuild/docs-gen/nodejs_params.md | 12 + .../docs-gen/nodejs_params_create.md | 39 +++ .../docs-gen/nodejs_params_modify.md | 17 + universal_rebuild/docs-gen/nodered.md | 13 + universal_rebuild/docs-gen/nodered_example.md | 50 +++ universal_rebuild/docs-gen/nodered_ops.md | 12 + universal_rebuild/docs-gen/nodered_outputs.md | 18 + universal_rebuild/docs-gen/nodered_params.md | 12 + .../docs-gen/nodered_params_create.md | 28 ++ .../docs-gen/nodered_params_modify.md | 11 + universal_rebuild/docs-gen/openwhisk.md | 13 + .../docs-gen/openwhisk_example.md | 42 +++ universal_rebuild/docs-gen/openwhisk_ops.md | 10 + .../docs-gen/openwhisk_outputs.md | 18 + .../docs-gen/openwhisk_params.md | 12 + .../docs-gen/openwhisk_params_create.md | 16 + .../docs-gen/openwhisk_params_modify.md | 11 + universal_rebuild/docs-gen/pgadmin.md | 13 + universal_rebuild/docs-gen/pgadmin_example.md | 51 +++ universal_rebuild/docs-gen/pgadmin_ops.md | 16 + universal_rebuild/docs-gen/pgadmin_outputs.md | 34 ++ universal_rebuild/docs-gen/pgadmin_params.md | 12 + .../docs-gen/pgadmin_params_create.md | 41 +++ .../docs-gen/pgadmin_params_modify.md | 17 + universal_rebuild/docs-gen/postgres.md | 13 + universal_rebuild/docs-gen/postgres_backup.md | 13 + .../docs-gen/postgres_backup_example.md | 30 ++ .../docs-gen/postgres_database.md | 24 ++ .../docs-gen/postgres_database_example.md | 32 ++ .../docs-gen/postgres_example.md | 48 +++ universal_rebuild/docs-gen/postgres_ops.md | 23 ++ .../docs-gen/postgres_outputs.md | 65 ++++ universal_rebuild/docs-gen/postgres_params.md | 12 + .../docs-gen/postgres_params_create.md | 38 ++ .../docs-gen/postgres_params_modify.md | 20 ++ universal_rebuild/docs-gen/postgres_user.md | 24 ++ .../docs-gen/postgres_user_example.md | 32 ++ universal_rebuild/docs-gen/rabbitmq.md | 13 + .../docs-gen/rabbitmq_example.md | 50 +++ universal_rebuild/docs-gen/rabbitmq_ops.md | 15 + .../docs-gen/rabbitmq_outputs.md | 48 +++ universal_rebuild/docs-gen/rabbitmq_params.md | 12 + .../docs-gen/rabbitmq_params_create.md | 41 +++ .../docs-gen/rabbitmq_params_modify.md | 20 ++ universal_rebuild/docs-gen/redis.md | 13 + universal_rebuild/docs-gen/redis_example.md | 45 +++ universal_rebuild/docs-gen/redis_ops.md | 16 + universal_rebuild/docs-gen/redis_outputs.md | 18 + universal_rebuild/docs-gen/redis_params.md | 12 + .../docs-gen/redis_params_create.md | 34 ++ .../docs-gen/redis_params_modify.md | 16 + universal_rebuild/docs-gen/s3.md | 13 + universal_rebuild/docs-gen/s3_example.md | 44 +++ universal_rebuild/docs-gen/s3_ops.md | 18 + universal_rebuild/docs-gen/s3_outputs.md | 42 +++ universal_rebuild/docs-gen/s3_params.md | 12 + .../docs-gen/s3_params_create.md | 33 ++ .../docs-gen/s3_params_modify.md | 17 + universal_rebuild/docs-gen/s3_sub_user.md | 24 ++ .../docs-gen/s3_sub_user_example.md | 32 ++ universal_rebuild/docs-gen/s3bucket.md | 13 + .../docs-gen/s3bucket_example.md | 51 +++ universal_rebuild/docs-gen/s3bucket_ops.md | 12 + .../docs-gen/s3bucket_outputs.md | 28 ++ universal_rebuild/docs-gen/s3bucket_params.md | 12 + .../docs-gen/s3bucket_params_create.md | 29 ++ .../docs-gen/s3bucket_params_modify.md | 11 + universal_rebuild/docs-gen/superset.md | 13 + .../docs-gen/superset_example.md | 51 +++ universal_rebuild/docs-gen/superset_ops.md | 12 + .../docs-gen/superset_outputs.md | 18 + universal_rebuild/docs-gen/superset_params.md | 12 + .../docs-gen/superset_params_create.md | 29 ++ .../docs-gen/superset_params_modify.md | 11 + universal_rebuild/docs-gen/template.md | 13 + .../docs-gen/template_example.md | 45 +++ universal_rebuild/docs-gen/template_ops.md | 16 + .../docs-gen/template_outputs.md | 18 + universal_rebuild/docs-gen/template_params.md | 12 + .../docs-gen/template_params_create.md | 34 ++ .../docs-gen/template_params_modify.md | 16 + universal_rebuild/docs-gen/tenant.md | 13 + universal_rebuild/docs-gen/tenant_example.md | 44 +++ universal_rebuild/docs-gen/tenant_ops.md | 13 + universal_rebuild/docs-gen/tenant_outputs.md | 18 + universal_rebuild/docs-gen/tenant_params.md | 12 + .../docs-gen/tenant_params_create.md | 21 ++ .../docs-gen/tenant_params_modify.md | 11 + universal_rebuild/docs-gen/valo_tenant.md | 13 + .../docs-gen/valo_tenant_example.md | 48 +++ universal_rebuild/docs-gen/valo_tenant_ops.md | 15 + .../docs-gen/valo_tenant_outputs.md | 18 + .../docs-gen/valo_tenant_params.md | 12 + .../docs-gen/valo_tenant_params_create.md | 38 ++ .../docs-gen/valo_tenant_params_modify.md | 16 + universal_rebuild/docs-gen/vapp.md | 13 + universal_rebuild/docs-gen/vapp_example.md | 45 +++ universal_rebuild/docs-gen/vapp_ops.md | 15 + universal_rebuild/docs-gen/vapp_outputs.md | 18 + universal_rebuild/docs-gen/vapp_params.md | 12 + .../docs-gen/vapp_params_create.md | 34 ++ .../docs-gen/vapp_params_modify.md | 11 + universal_rebuild/docs-gen/vc_complex.md | 13 + .../docs-gen/vc_complex_example.md | 59 ++++ universal_rebuild/docs-gen/vc_complex_ops.md | 11 + .../docs-gen/vc_complex_outputs.md | 18 + .../docs-gen/vc_complex_params.md | 12 + .../docs-gen/vc_complex_params_create.md | 37 ++ .../docs-gen/vc_complex_params_modify.md | 11 + universal_rebuild/docs-gen/vc_nsxt.md | 13 + universal_rebuild/docs-gen/vc_nsxt_example.md | 47 +++ universal_rebuild/docs-gen/vc_nsxt_ops.md | 14 + universal_rebuild/docs-gen/vc_nsxt_outputs.md | 18 + universal_rebuild/docs-gen/vc_nsxt_params.md | 12 + .../docs-gen/vc_nsxt_params_create.md | 28 ++ .../docs-gen/vc_nsxt_params_modify.md | 18 + universal_rebuild/docs-gen/vc_org.md | 13 + universal_rebuild/docs-gen/vc_org_example.md | 46 +++ universal_rebuild/docs-gen/vc_org_ops.md | 18 + universal_rebuild/docs-gen/vc_org_outputs.md | 28 ++ universal_rebuild/docs-gen/vc_org_params.md | 12 + .../docs-gen/vc_org_params_create.md | 36 ++ .../docs-gen/vc_org_params_modify.md | 15 + universal_rebuild/docs-gen/vc_org_saas.md | 13 + .../docs-gen/vc_org_saas_example.md | 43 +++ universal_rebuild/docs-gen/vc_org_saas_ops.md | 14 + .../docs-gen/vc_org_saas_outputs.md | 18 + .../docs-gen/vc_org_saas_params.md | 12 + .../docs-gen/vc_org_saas_params_create.md | 32 ++ .../docs-gen/vc_org_saas_params_modify.md | 11 + universal_rebuild/docs-gen/vc_org_user.md | 27 ++ .../docs-gen/vc_org_user_example.md | 33 ++ universal_rebuild/docs-gen/vc_vdc.md | 13 + universal_rebuild/docs-gen/vc_vdc_example.md | 51 +++ universal_rebuild/docs-gen/vc_vdc_group.md | 13 + .../docs-gen/vc_vdc_group_example.md | 43 +++ .../docs-gen/vc_vdc_group_ops.md | 15 + .../docs-gen/vc_vdc_group_outputs.md | 18 + .../docs-gen/vc_vdc_group_params.md | 12 + .../docs-gen/vc_vdc_group_params_create.md | 20 ++ .../docs-gen/vc_vdc_group_params_modify.md | 11 + .../docs-gen/vc_vdc_group_vdc.md | 13 + .../docs-gen/vc_vdc_group_vdc_example.md | 30 ++ universal_rebuild/docs-gen/vc_vdc_ops.md | 16 + universal_rebuild/docs-gen/vc_vdc_outputs.md | 28 ++ universal_rebuild/docs-gen/vc_vdc_params.md | 12 + .../docs-gen/vc_vdc_params_create.md | 41 +++ .../docs-gen/vc_vdc_params_modify.md | 17 + universal_rebuild/docs-gen/vc_vm.md | 13 + universal_rebuild/docs-gen/vc_vm_example.md | 52 +++ universal_rebuild/docs-gen/vc_vm_ops.md | 15 + universal_rebuild/docs-gen/vc_vm_outputs.md | 18 + universal_rebuild/docs-gen/vc_vm_params.md | 12 + .../docs-gen/vc_vm_params_create.md | 42 +++ .../docs-gen/vc_vm_params_modify.md | 18 + universal_rebuild/docs-gen/vc_vm_v2.md | 13 + .../docs-gen/vc_vm_v2_example.md | 45 +++ universal_rebuild/docs-gen/vc_vm_v2_ops.md | 15 + .../docs-gen/vc_vm_v2_outputs.md | 18 + universal_rebuild/docs-gen/vc_vm_v2_params.md | 12 + .../docs-gen/vc_vm_v2_params_create.md | 32 ++ .../docs-gen/vc_vm_v2_params_modify.md | 15 + universal_rebuild/docs-gen/vc_vm_v3.md | 13 + .../docs-gen/vc_vm_v3_example.md | 53 +++ universal_rebuild/docs-gen/vc_vm_v3_ops.md | 17 + .../docs-gen/vc_vm_v3_outputs.md | 30 ++ universal_rebuild/docs-gen/vc_vm_v3_params.md | 12 + .../docs-gen/vc_vm_v3_params_create.md | 46 +++ .../docs-gen/vc_vm_v3_params_modify.md | 20 ++ universal_rebuild/docs-gen/vcexternalip.md | 13 + .../docs-gen/vcexternalip_example.md | 51 +++ .../docs-gen/vcexternalip_ops.md | 13 + .../docs-gen/vcexternalip_outputs.md | 28 ++ .../docs-gen/vcexternalip_params.md | 12 + .../docs-gen/vcexternalip_params_create.md | 36 ++ .../docs-gen/vcexternalip_params_modify.md | 20 ++ universal_rebuild/docs-gen/vmpostgre.md | 13 + .../docs-gen/vmpostgre_example.md | 42 +++ universal_rebuild/docs-gen/vmpostgre_ops.md | 10 + .../docs-gen/vmpostgre_outputs.md | 18 + .../docs-gen/vmpostgre_params.md | 12 + .../docs-gen/vmpostgre_params_create.md | 16 + .../docs-gen/vmpostgre_params_modify.md | 11 + .../resources_gen/100_openwhisk_resource.go | 43 +-- .../resources_gen/21_vc_vdc_resource.go | 4 +- .../resources_gen/26_vapp_reconcile_action.go | 136 ++++++++ .../resources_gen/32_vmpostgre_resource.go | 328 ++---------------- .../resources_gen/82_harbor_resource.go | 57 +-- .../resources_gen/98_http_reconcile_action.go | 136 ++++++++ .../internal/resources_gen/registry.go | 3 + universal_rebuild/main.go | 2 +- .../resources_yaml/100_openwhisk.yaml | 22 +- .../resources_yaml/116_kafka.yaml | 2 +- .../resources_yaml/21_vc_vdc.yaml | 6 +- universal_rebuild/resources_yaml/26_vapp.yaml | 5 + .../resources_yaml/32_vmpostgre.yaml | 28 ++ .../resources_yaml/82_harbor.yaml | 30 +- universal_rebuild/resources_yaml/98_http.yaml | 5 + 347 files changed, 8435 insertions(+), 392 deletions(-) create mode 100644 universal_rebuild/docs-gen/akhq.md create mode 100644 universal_rebuild/docs-gen/akhq_example.md create mode 100644 universal_rebuild/docs-gen/akhq_ops.md create mode 100644 universal_rebuild/docs-gen/akhq_outputs.md create mode 100644 universal_rebuild/docs-gen/akhq_params.md create mode 100644 universal_rebuild/docs-gen/akhq_params_create.md create mode 100644 universal_rebuild/docs-gen/akhq_params_modify.md create mode 100644 universal_rebuild/docs-gen/clickhouse.md create mode 100644 universal_rebuild/docs-gen/clickhouse_database.md create mode 100644 universal_rebuild/docs-gen/clickhouse_database_example.md create mode 100644 universal_rebuild/docs-gen/clickhouse_example.md create mode 100644 universal_rebuild/docs-gen/clickhouse_ops.md create mode 100644 universal_rebuild/docs-gen/clickhouse_outputs.md create mode 100644 universal_rebuild/docs-gen/clickhouse_params.md create mode 100644 universal_rebuild/docs-gen/clickhouse_params_create.md create mode 100644 universal_rebuild/docs-gen/clickhouse_params_modify.md create mode 100644 universal_rebuild/docs-gen/clickhouse_user.md create mode 100644 universal_rebuild/docs-gen/clickhouse_user_example.md create mode 100644 universal_rebuild/docs-gen/dnsrecord.md create mode 100644 universal_rebuild/docs-gen/dnsrecord_example.md create mode 100644 universal_rebuild/docs-gen/dnsrecord_ops.md create mode 100644 universal_rebuild/docs-gen/dnsrecord_outputs.md create mode 100644 universal_rebuild/docs-gen/dnsrecord_params.md create mode 100644 universal_rebuild/docs-gen/dnsrecord_params_create.md create mode 100644 universal_rebuild/docs-gen/dnsrecord_params_modify.md create mode 100644 universal_rebuild/docs-gen/dnszone.md create mode 100644 universal_rebuild/docs-gen/dnszone_example.md create mode 100644 universal_rebuild/docs-gen/dnszone_ops.md create mode 100644 universal_rebuild/docs-gen/dnszone_outputs.md create mode 100644 universal_rebuild/docs-gen/dnszone_params.md create mode 100644 universal_rebuild/docs-gen/dnszone_params_create.md create mode 100644 universal_rebuild/docs-gen/dnszone_params_modify.md create mode 100644 universal_rebuild/docs-gen/dummy.md create mode 100644 universal_rebuild/docs-gen/dummy_example.md create mode 100644 universal_rebuild/docs-gen/dummy_ops.md create mode 100644 universal_rebuild/docs-gen/dummy_outputs.md create mode 100644 universal_rebuild/docs-gen/dummy_params.md create mode 100644 universal_rebuild/docs-gen/dummy_params_create.md create mode 100644 universal_rebuild/docs-gen/dummy_params_modify.md create mode 100644 universal_rebuild/docs-gen/flask.md create mode 100644 universal_rebuild/docs-gen/flask_example.md create mode 100644 universal_rebuild/docs-gen/flask_ops.md create mode 100644 universal_rebuild/docs-gen/flask_outputs.md create mode 100644 universal_rebuild/docs-gen/flask_params.md create mode 100644 universal_rebuild/docs-gen/flask_params_create.md create mode 100644 universal_rebuild/docs-gen/flask_params_modify.md create mode 100644 universal_rebuild/docs-gen/gitea.md create mode 100644 universal_rebuild/docs-gen/gitea_complex.md create mode 100644 universal_rebuild/docs-gen/gitea_complex_example.md create mode 100644 universal_rebuild/docs-gen/gitea_complex_ops.md create mode 100644 universal_rebuild/docs-gen/gitea_complex_outputs.md create mode 100644 universal_rebuild/docs-gen/gitea_complex_params.md create mode 100644 universal_rebuild/docs-gen/gitea_complex_params_create.md create mode 100644 universal_rebuild/docs-gen/gitea_complex_params_modify.md create mode 100644 universal_rebuild/docs-gen/gitea_example.md create mode 100644 universal_rebuild/docs-gen/gitea_ops.md create mode 100644 universal_rebuild/docs-gen/gitea_outputs.md create mode 100644 universal_rebuild/docs-gen/gitea_params.md create mode 100644 universal_rebuild/docs-gen/gitea_params_create.md create mode 100644 universal_rebuild/docs-gen/gitea_params_modify.md create mode 100644 universal_rebuild/docs-gen/harbor.md create mode 100644 universal_rebuild/docs-gen/harbor_example.md create mode 100644 universal_rebuild/docs-gen/harbor_ops.md create mode 100644 universal_rebuild/docs-gen/harbor_outputs.md create mode 100644 universal_rebuild/docs-gen/harbor_params.md create mode 100644 universal_rebuild/docs-gen/harbor_params_create.md create mode 100644 universal_rebuild/docs-gen/harbor_params_modify.md create mode 100644 universal_rebuild/docs-gen/http.md create mode 100644 universal_rebuild/docs-gen/http_example.md create mode 100644 universal_rebuild/docs-gen/http_ops.md create mode 100644 universal_rebuild/docs-gen/http_outputs.md create mode 100644 universal_rebuild/docs-gen/http_params.md create mode 100644 universal_rebuild/docs-gen/http_params_create.md create mode 100644 universal_rebuild/docs-gen/http_params_modify.md create mode 100644 universal_rebuild/docs-gen/index.md create mode 100644 universal_rebuild/docs-gen/k8s_sthutrval_cluster.md create mode 100644 universal_rebuild/docs-gen/k8s_sthutrval_cluster_example.md create mode 100644 universal_rebuild/docs-gen/k8s_sthutrval_cluster_ops.md create mode 100644 universal_rebuild/docs-gen/k8s_sthutrval_cluster_outputs.md create mode 100644 universal_rebuild/docs-gen/k8s_sthutrval_cluster_params.md create mode 100644 universal_rebuild/docs-gen/k8s_sthutrval_cluster_params_create.md create mode 100644 universal_rebuild/docs-gen/k8s_sthutrval_cluster_params_modify.md create mode 100644 universal_rebuild/docs-gen/k8s_sthutrval_cluster_user.md create mode 100644 universal_rebuild/docs-gen/k8s_sthutrval_cluster_user_example.md create mode 100644 universal_rebuild/docs-gen/k8s_ziti_controller.md create mode 100644 universal_rebuild/docs-gen/k8s_ziti_controller_example.md create mode 100644 universal_rebuild/docs-gen/k8s_ziti_controller_ops.md create mode 100644 universal_rebuild/docs-gen/k8s_ziti_controller_outputs.md create mode 100644 universal_rebuild/docs-gen/k8s_ziti_controller_params.md create mode 100644 universal_rebuild/docs-gen/k8s_ziti_controller_params_create.md create mode 100644 universal_rebuild/docs-gen/k8s_ziti_controller_params_modify.md create mode 100644 universal_rebuild/docs-gen/kafka.md create mode 100644 universal_rebuild/docs-gen/kafka_example.md create mode 100644 universal_rebuild/docs-gen/kafka_ops.md create mode 100644 universal_rebuild/docs-gen/kafka_outputs.md create mode 100644 universal_rebuild/docs-gen/kafka_params.md create mode 100644 universal_rebuild/docs-gen/kafka_params_create.md create mode 100644 universal_rebuild/docs-gen/kafka_params_modify.md create mode 100644 universal_rebuild/docs-gen/kafka_topic.md create mode 100644 universal_rebuild/docs-gen/kafka_topic_example.md create mode 100644 universal_rebuild/docs-gen/kafka_user.md create mode 100644 universal_rebuild/docs-gen/kafka_user_example.md create mode 100644 universal_rebuild/docs-gen/lucee.md create mode 100644 universal_rebuild/docs-gen/lucee_example.md create mode 100644 universal_rebuild/docs-gen/lucee_ops.md create mode 100644 universal_rebuild/docs-gen/lucee_outputs.md create mode 100644 universal_rebuild/docs-gen/lucee_params.md create mode 100644 universal_rebuild/docs-gen/lucee_params_create.md create mode 100644 universal_rebuild/docs-gen/lucee_params_modify.md create mode 100644 universal_rebuild/docs-gen/mariadb.md create mode 100644 universal_rebuild/docs-gen/mariadb_database.md create mode 100644 universal_rebuild/docs-gen/mariadb_database_example.md create mode 100644 universal_rebuild/docs-gen/mariadb_example.md create mode 100644 universal_rebuild/docs-gen/mariadb_ops.md create mode 100644 universal_rebuild/docs-gen/mariadb_outputs.md create mode 100644 universal_rebuild/docs-gen/mariadb_params.md create mode 100644 universal_rebuild/docs-gen/mariadb_params_create.md create mode 100644 universal_rebuild/docs-gen/mariadb_params_modify.md create mode 100644 universal_rebuild/docs-gen/mariadb_user.md create mode 100644 universal_rebuild/docs-gen/mariadb_user_example.md create mode 100644 universal_rebuild/docs-gen/mongodb.md create mode 100644 universal_rebuild/docs-gen/mongodb_example.md create mode 100644 universal_rebuild/docs-gen/mongodb_ops.md create mode 100644 universal_rebuild/docs-gen/mongodb_outputs.md create mode 100644 universal_rebuild/docs-gen/mongodb_params.md create mode 100644 universal_rebuild/docs-gen/mongodb_params_create.md create mode 100644 universal_rebuild/docs-gen/mongodb_params_modify.md create mode 100644 universal_rebuild/docs-gen/mongodb_user.md create mode 100644 universal_rebuild/docs-gen/mongodb_user_example.md create mode 100644 universal_rebuild/docs-gen/nextcloud.md create mode 100644 universal_rebuild/docs-gen/nextcloud_backup.md create mode 100644 universal_rebuild/docs-gen/nextcloud_backup_example.md create mode 100644 universal_rebuild/docs-gen/nextcloud_example.md create mode 100644 universal_rebuild/docs-gen/nextcloud_ops.md create mode 100644 universal_rebuild/docs-gen/nextcloud_outputs.md create mode 100644 universal_rebuild/docs-gen/nextcloud_params.md create mode 100644 universal_rebuild/docs-gen/nextcloud_params_create.md create mode 100644 universal_rebuild/docs-gen/nextcloud_params_modify.md create mode 100644 universal_rebuild/docs-gen/nifi.md create mode 100644 universal_rebuild/docs-gen/nifi_example.md create mode 100644 universal_rebuild/docs-gen/nifi_ops.md create mode 100644 universal_rebuild/docs-gen/nifi_outputs.md create mode 100644 universal_rebuild/docs-gen/nifi_params.md create mode 100644 universal_rebuild/docs-gen/nifi_params_create.md create mode 100644 universal_rebuild/docs-gen/nifi_params_modify.md create mode 100644 universal_rebuild/docs-gen/nodejs.md create mode 100644 universal_rebuild/docs-gen/nodejs_example.md create mode 100644 universal_rebuild/docs-gen/nodejs_ops.md create mode 100644 universal_rebuild/docs-gen/nodejs_outputs.md create mode 100644 universal_rebuild/docs-gen/nodejs_params.md create mode 100644 universal_rebuild/docs-gen/nodejs_params_create.md create mode 100644 universal_rebuild/docs-gen/nodejs_params_modify.md create mode 100644 universal_rebuild/docs-gen/nodered.md create mode 100644 universal_rebuild/docs-gen/nodered_example.md create mode 100644 universal_rebuild/docs-gen/nodered_ops.md create mode 100644 universal_rebuild/docs-gen/nodered_outputs.md create mode 100644 universal_rebuild/docs-gen/nodered_params.md create mode 100644 universal_rebuild/docs-gen/nodered_params_create.md create mode 100644 universal_rebuild/docs-gen/nodered_params_modify.md create mode 100644 universal_rebuild/docs-gen/openwhisk.md create mode 100644 universal_rebuild/docs-gen/openwhisk_example.md create mode 100644 universal_rebuild/docs-gen/openwhisk_ops.md create mode 100644 universal_rebuild/docs-gen/openwhisk_outputs.md create mode 100644 universal_rebuild/docs-gen/openwhisk_params.md create mode 100644 universal_rebuild/docs-gen/openwhisk_params_create.md create mode 100644 universal_rebuild/docs-gen/openwhisk_params_modify.md create mode 100644 universal_rebuild/docs-gen/pgadmin.md create mode 100644 universal_rebuild/docs-gen/pgadmin_example.md create mode 100644 universal_rebuild/docs-gen/pgadmin_ops.md create mode 100644 universal_rebuild/docs-gen/pgadmin_outputs.md create mode 100644 universal_rebuild/docs-gen/pgadmin_params.md create mode 100644 universal_rebuild/docs-gen/pgadmin_params_create.md create mode 100644 universal_rebuild/docs-gen/pgadmin_params_modify.md create mode 100644 universal_rebuild/docs-gen/postgres.md create mode 100644 universal_rebuild/docs-gen/postgres_backup.md create mode 100644 universal_rebuild/docs-gen/postgres_backup_example.md create mode 100644 universal_rebuild/docs-gen/postgres_database.md create mode 100644 universal_rebuild/docs-gen/postgres_database_example.md create mode 100644 universal_rebuild/docs-gen/postgres_example.md create mode 100644 universal_rebuild/docs-gen/postgres_ops.md create mode 100644 universal_rebuild/docs-gen/postgres_outputs.md create mode 100644 universal_rebuild/docs-gen/postgres_params.md create mode 100644 universal_rebuild/docs-gen/postgres_params_create.md create mode 100644 universal_rebuild/docs-gen/postgres_params_modify.md create mode 100644 universal_rebuild/docs-gen/postgres_user.md create mode 100644 universal_rebuild/docs-gen/postgres_user_example.md create mode 100644 universal_rebuild/docs-gen/rabbitmq.md create mode 100644 universal_rebuild/docs-gen/rabbitmq_example.md create mode 100644 universal_rebuild/docs-gen/rabbitmq_ops.md create mode 100644 universal_rebuild/docs-gen/rabbitmq_outputs.md create mode 100644 universal_rebuild/docs-gen/rabbitmq_params.md create mode 100644 universal_rebuild/docs-gen/rabbitmq_params_create.md create mode 100644 universal_rebuild/docs-gen/rabbitmq_params_modify.md create mode 100644 universal_rebuild/docs-gen/redis.md create mode 100644 universal_rebuild/docs-gen/redis_example.md create mode 100644 universal_rebuild/docs-gen/redis_ops.md create mode 100644 universal_rebuild/docs-gen/redis_outputs.md create mode 100644 universal_rebuild/docs-gen/redis_params.md create mode 100644 universal_rebuild/docs-gen/redis_params_create.md create mode 100644 universal_rebuild/docs-gen/redis_params_modify.md create mode 100644 universal_rebuild/docs-gen/s3.md create mode 100644 universal_rebuild/docs-gen/s3_example.md create mode 100644 universal_rebuild/docs-gen/s3_ops.md create mode 100644 universal_rebuild/docs-gen/s3_outputs.md create mode 100644 universal_rebuild/docs-gen/s3_params.md create mode 100644 universal_rebuild/docs-gen/s3_params_create.md create mode 100644 universal_rebuild/docs-gen/s3_params_modify.md create mode 100644 universal_rebuild/docs-gen/s3_sub_user.md create mode 100644 universal_rebuild/docs-gen/s3_sub_user_example.md create mode 100644 universal_rebuild/docs-gen/s3bucket.md create mode 100644 universal_rebuild/docs-gen/s3bucket_example.md create mode 100644 universal_rebuild/docs-gen/s3bucket_ops.md create mode 100644 universal_rebuild/docs-gen/s3bucket_outputs.md create mode 100644 universal_rebuild/docs-gen/s3bucket_params.md create mode 100644 universal_rebuild/docs-gen/s3bucket_params_create.md create mode 100644 universal_rebuild/docs-gen/s3bucket_params_modify.md create mode 100644 universal_rebuild/docs-gen/superset.md create mode 100644 universal_rebuild/docs-gen/superset_example.md create mode 100644 universal_rebuild/docs-gen/superset_ops.md create mode 100644 universal_rebuild/docs-gen/superset_outputs.md create mode 100644 universal_rebuild/docs-gen/superset_params.md create mode 100644 universal_rebuild/docs-gen/superset_params_create.md create mode 100644 universal_rebuild/docs-gen/superset_params_modify.md create mode 100644 universal_rebuild/docs-gen/template.md create mode 100644 universal_rebuild/docs-gen/template_example.md create mode 100644 universal_rebuild/docs-gen/template_ops.md create mode 100644 universal_rebuild/docs-gen/template_outputs.md create mode 100644 universal_rebuild/docs-gen/template_params.md create mode 100644 universal_rebuild/docs-gen/template_params_create.md create mode 100644 universal_rebuild/docs-gen/template_params_modify.md create mode 100644 universal_rebuild/docs-gen/tenant.md create mode 100644 universal_rebuild/docs-gen/tenant_example.md create mode 100644 universal_rebuild/docs-gen/tenant_ops.md create mode 100644 universal_rebuild/docs-gen/tenant_outputs.md create mode 100644 universal_rebuild/docs-gen/tenant_params.md create mode 100644 universal_rebuild/docs-gen/tenant_params_create.md create mode 100644 universal_rebuild/docs-gen/tenant_params_modify.md create mode 100644 universal_rebuild/docs-gen/valo_tenant.md create mode 100644 universal_rebuild/docs-gen/valo_tenant_example.md create mode 100644 universal_rebuild/docs-gen/valo_tenant_ops.md create mode 100644 universal_rebuild/docs-gen/valo_tenant_outputs.md create mode 100644 universal_rebuild/docs-gen/valo_tenant_params.md create mode 100644 universal_rebuild/docs-gen/valo_tenant_params_create.md create mode 100644 universal_rebuild/docs-gen/valo_tenant_params_modify.md create mode 100644 universal_rebuild/docs-gen/vapp.md create mode 100644 universal_rebuild/docs-gen/vapp_example.md create mode 100644 universal_rebuild/docs-gen/vapp_ops.md create mode 100644 universal_rebuild/docs-gen/vapp_outputs.md create mode 100644 universal_rebuild/docs-gen/vapp_params.md create mode 100644 universal_rebuild/docs-gen/vapp_params_create.md create mode 100644 universal_rebuild/docs-gen/vapp_params_modify.md create mode 100644 universal_rebuild/docs-gen/vc_complex.md create mode 100644 universal_rebuild/docs-gen/vc_complex_example.md create mode 100644 universal_rebuild/docs-gen/vc_complex_ops.md create mode 100644 universal_rebuild/docs-gen/vc_complex_outputs.md create mode 100644 universal_rebuild/docs-gen/vc_complex_params.md create mode 100644 universal_rebuild/docs-gen/vc_complex_params_create.md create mode 100644 universal_rebuild/docs-gen/vc_complex_params_modify.md create mode 100644 universal_rebuild/docs-gen/vc_nsxt.md create mode 100644 universal_rebuild/docs-gen/vc_nsxt_example.md create mode 100644 universal_rebuild/docs-gen/vc_nsxt_ops.md create mode 100644 universal_rebuild/docs-gen/vc_nsxt_outputs.md create mode 100644 universal_rebuild/docs-gen/vc_nsxt_params.md create mode 100644 universal_rebuild/docs-gen/vc_nsxt_params_create.md create mode 100644 universal_rebuild/docs-gen/vc_nsxt_params_modify.md create mode 100644 universal_rebuild/docs-gen/vc_org.md create mode 100644 universal_rebuild/docs-gen/vc_org_example.md create mode 100644 universal_rebuild/docs-gen/vc_org_ops.md create mode 100644 universal_rebuild/docs-gen/vc_org_outputs.md create mode 100644 universal_rebuild/docs-gen/vc_org_params.md create mode 100644 universal_rebuild/docs-gen/vc_org_params_create.md create mode 100644 universal_rebuild/docs-gen/vc_org_params_modify.md create mode 100644 universal_rebuild/docs-gen/vc_org_saas.md create mode 100644 universal_rebuild/docs-gen/vc_org_saas_example.md create mode 100644 universal_rebuild/docs-gen/vc_org_saas_ops.md create mode 100644 universal_rebuild/docs-gen/vc_org_saas_outputs.md create mode 100644 universal_rebuild/docs-gen/vc_org_saas_params.md create mode 100644 universal_rebuild/docs-gen/vc_org_saas_params_create.md create mode 100644 universal_rebuild/docs-gen/vc_org_saas_params_modify.md create mode 100644 universal_rebuild/docs-gen/vc_org_user.md create mode 100644 universal_rebuild/docs-gen/vc_org_user_example.md create mode 100644 universal_rebuild/docs-gen/vc_vdc.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_example.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_group.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_group_example.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_group_ops.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_group_outputs.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_group_params.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_group_params_create.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_group_params_modify.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_group_vdc.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_group_vdc_example.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_ops.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_outputs.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_params.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_params_create.md create mode 100644 universal_rebuild/docs-gen/vc_vdc_params_modify.md create mode 100644 universal_rebuild/docs-gen/vc_vm.md create mode 100644 universal_rebuild/docs-gen/vc_vm_example.md create mode 100644 universal_rebuild/docs-gen/vc_vm_ops.md create mode 100644 universal_rebuild/docs-gen/vc_vm_outputs.md create mode 100644 universal_rebuild/docs-gen/vc_vm_params.md create mode 100644 universal_rebuild/docs-gen/vc_vm_params_create.md create mode 100644 universal_rebuild/docs-gen/vc_vm_params_modify.md create mode 100644 universal_rebuild/docs-gen/vc_vm_v2.md create mode 100644 universal_rebuild/docs-gen/vc_vm_v2_example.md create mode 100644 universal_rebuild/docs-gen/vc_vm_v2_ops.md create mode 100644 universal_rebuild/docs-gen/vc_vm_v2_outputs.md create mode 100644 universal_rebuild/docs-gen/vc_vm_v2_params.md create mode 100644 universal_rebuild/docs-gen/vc_vm_v2_params_create.md create mode 100644 universal_rebuild/docs-gen/vc_vm_v2_params_modify.md create mode 100644 universal_rebuild/docs-gen/vc_vm_v3.md create mode 100644 universal_rebuild/docs-gen/vc_vm_v3_example.md create mode 100644 universal_rebuild/docs-gen/vc_vm_v3_ops.md create mode 100644 universal_rebuild/docs-gen/vc_vm_v3_outputs.md create mode 100644 universal_rebuild/docs-gen/vc_vm_v3_params.md create mode 100644 universal_rebuild/docs-gen/vc_vm_v3_params_create.md create mode 100644 universal_rebuild/docs-gen/vc_vm_v3_params_modify.md create mode 100644 universal_rebuild/docs-gen/vcexternalip.md create mode 100644 universal_rebuild/docs-gen/vcexternalip_example.md create mode 100644 universal_rebuild/docs-gen/vcexternalip_ops.md create mode 100644 universal_rebuild/docs-gen/vcexternalip_outputs.md create mode 100644 universal_rebuild/docs-gen/vcexternalip_params.md create mode 100644 universal_rebuild/docs-gen/vcexternalip_params_create.md create mode 100644 universal_rebuild/docs-gen/vcexternalip_params_modify.md create mode 100644 universal_rebuild/docs-gen/vmpostgre.md create mode 100644 universal_rebuild/docs-gen/vmpostgre_example.md create mode 100644 universal_rebuild/docs-gen/vmpostgre_ops.md create mode 100644 universal_rebuild/docs-gen/vmpostgre_outputs.md create mode 100644 universal_rebuild/docs-gen/vmpostgre_params.md create mode 100644 universal_rebuild/docs-gen/vmpostgre_params_create.md create mode 100644 universal_rebuild/docs-gen/vmpostgre_params_modify.md create mode 100644 universal_rebuild/internal/resources_gen/26_vapp_reconcile_action.go create mode 100644 universal_rebuild/internal/resources_gen/98_http_reconcile_action.go create mode 100644 universal_rebuild/resources_yaml/32_vmpostgre.yaml diff --git a/universal_rebuild/docs-gen/akhq.md b/universal_rebuild/docs-gen/akhq.md new file mode 100644 index 0000000..b160ca3 --- /dev/null +++ b/universal_rebuild/docs-gen/akhq.md @@ -0,0 +1,13 @@ +# Resource nubes_akhq + +Service ID: `119` + +Service Name: Akhq + +[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md) + +## MAN + +
+# Инструкция по развертыванию Apache Kafka через платформу

---
## 1. Общая информация
AKHQ — это веб-интерфейс для работы с кластерами Apache Kafka.
Позволяет просматривать топики, consumer group'ы, сообщения, ACL, схему безопасности, состояние брокеров и метаданные.
Поддерживает работу с несколькими кластерами Kafka одновременно, включая внутренние и внешние (TLS) подключения.

## Доступные операции
- **create** — Создание ресурса AKHQ
- **suspend** — Остановка ресурса
- **resume** — Возобновление работы ресурса
- **modify** — Модификация настроек
- **delete** — Удаление ресурса

---
## 2. Параметры развертывания кластера
Ниже перечислены параметры, которые необходимо указать при создании ресурса Kafka:

* **Кластер Kafka к которому нужно настроить подключение**
Для использования AKHQ необходимо предварительно развернуть сервис Kafka. Пример: `kafka-external`.

* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `k8s-3.ext.nubes.ru`.

* **Количество узлов в сети:**
Количество узлов для работы Akhq. Пример `2`

* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `512`

* **Квота (millicore ) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `500`

* **Имя домена:**
Dns Имя по которому будет происходить обращение к сервису. Указать необходимо уникальное имя до . ( то есть если необходимо получить dns ui) Пример: `kafka-external`

---
## 4. Выходные параметры
После успешного развертывания ресурса Kafka платформа возвращает ряд параметров.
Ключевым из них является:

**connectionUrl**
Это полное доменное имя (FQDN), по которому будет доступен интерфейс AKHQ. После развёртывания подождите несколько минут — UI станет доступен по HTTPS, как только все сервисы полностью запустятся.

**Учетные данные**
Здесь представлены поля для ввода логина и пароля, с помощью которых вы сможете авторизоваться в сервисе.

---
## 5. Дополнительная информация
Учётные записи, созданные для работы с AKHQ, предоставляют доступ только для просмотра данных. Для управления Kafka, пожалуйста, используйте возможности личного кабинета.
--- +
diff --git a/universal_rebuild/docs-gen/akhq_example.md b/universal_rebuild/docs-gen/akhq_example.md new file mode 100644 index 0000000..8d86dd9 --- /dev/null +++ b/universal_rebuild/docs-gen/akhq_example.md @@ -0,0 +1,50 @@ +# Resource nubes_akhq + +Service ID: `119` + +Service Name: Akhq + +[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md) + +## Copy-ready manifest (`akhq_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_akhq" "baza" { + resource_realm = "TODO" # Выбрать платформу из списка + domain = "TODO" # Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm + kafka_uid = "TODO" # Выбрать кластер из списка + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + resource_memory = 512 # Пример: `1024` + resource_cpu = 500 # Пример: `1000` + resource_instances = 1 +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_akhq.baza.state_params["имя_ключа"] +nubes_akhq.baza.state_out["имя_ключа"] +nubes_akhq.baza.state_params_flat["имя_ключа"] +nubes_akhq.baza.state_out_flat["имя_ключа"] +nubes_akhq.baza.vault_secrets["имя_ключа"] +nubes_akhq.baza.vault_url +nubes_akhq.baza.vault_user_path +nubes_akhq.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/akhq_ops.md b/universal_rebuild/docs-gen/akhq_ops.md new file mode 100644 index 0000000..9e4364f --- /dev/null +++ b/universal_rebuild/docs-gen/akhq_ops.md @@ -0,0 +1,15 @@ +# Resource nubes_akhq + +Service ID: `119` + +Service Name: Akhq + +[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](akhq_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](akhq_params_modify.md) +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/akhq_outputs.md b/universal_rebuild/docs-gen/akhq_outputs.md new file mode 100644 index 0000000..22405f5 --- /dev/null +++ b/universal_rebuild/docs-gen/akhq_outputs.md @@ -0,0 +1,33 @@ +# Resource nubes_akhq + +Service ID: `119` + +Service Name: Akhq + +[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["connectionUrl"]` + +### `vault_secrets` ключи + +- `vault_secrets["pass"]` +- `vault_secrets["user"]` + diff --git a/universal_rebuild/docs-gen/akhq_params.md b/universal_rebuild/docs-gen/akhq_params.md new file mode 100644 index 0000000..b419cf6 --- /dev/null +++ b/universal_rebuild/docs-gen/akhq_params.md @@ -0,0 +1,12 @@ +# Resource nubes_akhq + +Service ID: `119` + +Service Name: Akhq + +[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md) + +## Parameters + +- [Create params](akhq_params_create.md) +- [Modify params](akhq_params_modify.md) diff --git a/universal_rebuild/docs-gen/akhq_params_create.md b/universal_rebuild/docs-gen/akhq_params_create.md new file mode 100644 index 0000000..687ca12 --- /dev/null +++ b/universal_rebuild/docs-gen/akhq_params_create.md @@ -0,0 +1,40 @@ +# Resource nubes_akhq + +Service ID: `119` + +Service Name: Akhq + +[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + +
IDCodeTypeDescriptionConstraints
550resource_realmstringВыбрать платформу из спискаfunc=getAvailableResourceRealms
553domainstringЕсли будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealmregex=^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
555kafka_uiduuidВыбрать кластер из спискаref_svc_id=116
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
551resource_memoryinteger512Пример: `1024`minvalue=512
552resource_cpuinteger500Пример: `1000`minvalue=500
554resource_instancesinteger1minvalue=1
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/akhq_params_modify.md b/universal_rebuild/docs-gen/akhq_params_modify.md new file mode 100644 index 0000000..1ba2657 --- /dev/null +++ b/universal_rebuild/docs-gen/akhq_params_modify.md @@ -0,0 +1,15 @@ +# Resource nubes_akhq + +Service ID: `119` + +Service Name: Akhq + +[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md) + +## Modify params + + + + + +
IDCodeTypeDescriptionConstraints
565kafka_uiduuidВыбрать кластер из спискаref_svc_id=116
diff --git a/universal_rebuild/docs-gen/clickhouse.md b/universal_rebuild/docs-gen/clickhouse.md new file mode 100644 index 0000000..b496cff --- /dev/null +++ b/universal_rebuild/docs-gen/clickhouse.md @@ -0,0 +1,13 @@ +# Resource nubes_clickhouse + +Service ID: `120` + +Service Name: ClickHouse + +[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md) + +## MAN + +
+# Инструкция по управлению кластерами и пользователями ClickHouse

---

## Общая информация

ClickHouse — это колоночная система управления базами данных, предназначенная для обработки аналитических запросов в реальном времени. Платформа позволяет создавать, удалять, приостанавливать и возобновлять кластеры ClickHouse, а также управлять базами данных и пользователями.

Кластер создаётся через оператор Altinity (`https://github.com/Altinity/clickhouse-operator`) в ресурсной платформе типа `k8s`

Кластеры могут создаваться шардированными с произвольным количеством реплик. Для обеспечения отказоустойчивости и координации обязательно включение параметра `Создать ClickHouse-Keeper`.

Кластера создаются с обязательным бекапом. Для этого необходимо предварительно создать услугу `S3 Object Storage`.
---

## Доступные операции

* **create** — Создание кластера
* **delete** — Удаление кластера
* **suspend** — Приостановка работы кластера
* **resume** — Возобновление работы кластера
* **create_database** — Создание базы данных
* **delete_database** — Удаление базы данных
* **create_user** — Создание пользователя и настройка прав доступа к базе данных
* **delete_user** — Удаление пользователя

## Процесс создания и первого подключения

1. Выполнить операцию `create` - будет создан кластер
2. Выполнить операцию `create_database` - будет создана база данных
3. Выполнить операцию `create_user` - будет создан пользователь (выбрать доступ подключения к БД, созданной в п.2)

## Примеры подключения

### Подключение через HTTP-интерфейс

```bash
# Проверка доступности кластера
curl "http://<username>:<password>@<host>:8123/" -d "SELECT 1"

# Выполнение запроса
curl "http://<username>:<password>@<host>:8123/" -d "SHOW DATABASES"
```

## Простые кейсы
*Создать БД и обычной таблицы*
```clickhouse
CREATE TABLE database.table
(
id UInt64,
value String
)
ENGINE = MergeTree()
ORDER BY id;

INSERT INTO database.table SELECT number, toString(number) FROM numbers(10000000);

SELECT count() FROM database.table;
```
Базы и таблицы не реплицируются без специального ключа (`ON CLUSTER 'clickhousek8s'`)
В случае создания в стиле, описанным выше, необходимо будет выполнять действия на всех шардах/репликах


*Создание БД и шардированной таблицы*
```clickhouse
CREATE TABLE database.localUsers
(
id UInt64,
value String
)
ENGINE = MergeTree()
ORDER BY id;

CREATE TABLE database.shardedTable
AS localUsers
ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', id);

INSERT INTO shardedTable SELECT number, toString(number) FROM numbers(10000000);

SELECT count() FROM shardedTable;
```
Важный момент - в данном примере таблицы придётся также выполнять на всех нодах ClickHouse

*Создание реплицируемой и шардированной таблицы*
```clickhouse
CREATE TABLE IF NOT EXISTS database.localUsers ON cluster 'clickhousek8s'
(
user_id UInt64,
name String,
email String
)
ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/localUsers',
'{replica}'
)
ORDER BY user_id;

CREATE TABLE IF NOT EXISTS database.users ON cluster 'clickhousek8s'
AS database.localUsers
ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', rand());

INSERT INTO database.users VALUES (1, 'Alice', 'alice@example.com');
INSERT INTO database.users VALUES (2, 'Bob', 'bob@example.com');
INSERT INTO database.users VALUES (3, 'Charlie', 'charlie@example.com');
INSERT INTO database.users VALUES (4, 'David', 'david@example.com');
INSERT INTO database.users VALUES (5, 'Gosha', 'gosha@example.com');
INSERT INTO database.users VALUES (6, 'Eve', 'eve@example.com');
INSERT INTO database.users VALUES (7, 'Frank', 'frank@example.com');
INSERT INTO database.users VALUES (8, 'Grace', 'grace@example.com');
INSERT INTO database.users VALUES (9, 'Hannah', 'hannah@example.com');
INSERT INTO database.users VALUES (10, 'Ivan', 'ivan@example.com');

SELECT * FROM database.localUsers;
SELECT * FROM database.users;

SELECT COUNT(*) AS total_users FROM database.users;
SELECT COUNT(*) AS total_users_local FROM database.localUsers;
``` +
diff --git a/universal_rebuild/docs-gen/clickhouse_database.md b/universal_rebuild/docs-gen/clickhouse_database.md new file mode 100644 index 0000000..3c6c66d --- /dev/null +++ b/universal_rebuild/docs-gen/clickhouse_database.md @@ -0,0 +1,27 @@ +# Resource nubes_clickhouse_database + +Service: `nubes_clickhouse` (ID: 120) + +[ClickHouse (основной)](clickhouse.md) | [Operations](clickhouse_ops.md) | [Database](clickhouse_database.md) | [Example](clickhouse_database_example.md) + +## Create params + +**Обязательные параметры** + +None. + +**Параметры со значением по умолчанию** + + + + + +
IDCodeTypeDefaultDescriptionConstraints
600db_namestringdb01Пример: `db01`regex=^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
+ +## Delete params + + + + + +
IDCodeTypeDescriptionConstraints
602db_namestringВСЕ ДАННЫЕ ВНУТРИ БД БУДУТ УДАЛЕНЫ
diff --git a/universal_rebuild/docs-gen/clickhouse_database_example.md b/universal_rebuild/docs-gen/clickhouse_database_example.md new file mode 100644 index 0000000..e953051 --- /dev/null +++ b/universal_rebuild/docs-gen/clickhouse_database_example.md @@ -0,0 +1,33 @@ +# Resource nubes_clickhouse_database — Example + +Service: `nubes_clickhouse` (ID: 120) + +[ClickHouse (основной)](clickhouse.md) | [Operations](clickhouse_ops.md) | [Database](clickhouse_database.md) | [Example](clickhouse_database_example.md) + +## Copy-ready manifest (`clickhouse_database_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_clickhouse должен быть создан заранее +# resource "nubes_clickhouse" "baza" { ... } + +resource "nubes_clickhouse_database" "example" { + clickhouse_id = nubes_clickhouse.baza.id + + # Параметры со значением по умолчанию + db_name = "db01" # Пример: `db01` +} +``` diff --git a/universal_rebuild/docs-gen/clickhouse_example.md b/universal_rebuild/docs-gen/clickhouse_example.md new file mode 100644 index 0000000..2d1179b --- /dev/null +++ b/universal_rebuild/docs-gen/clickhouse_example.md @@ -0,0 +1,49 @@ +# Resource nubes_clickhouse + +Service ID: `120` + +Service Name: ClickHouse + +[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md) + +## Copy-ready manifest (`clickhouse_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_clickhouse" "baza" { + startup_configuration = "TODO" + cluster_configuration = "TODO" + access_configuration = "TODO" + clickhouse_keeper_configuration = "TODO" + clickhouse_configuration = "TODO" + backup_configuration = "TODO" + autoscale_configuration = "TODO" +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_clickhouse.baza.state_params["имя_ключа"] +nubes_clickhouse.baza.state_out["имя_ключа"] +nubes_clickhouse.baza.state_params_flat["имя_ключа"] +nubes_clickhouse.baza.state_out_flat["имя_ключа"] +nubes_clickhouse.baza.vault_secrets["имя_ключа"] +nubes_clickhouse.baza.vault_url +nubes_clickhouse.baza.vault_user_path +nubes_clickhouse.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/clickhouse_ops.md b/universal_rebuild/docs-gen/clickhouse_ops.md new file mode 100644 index 0000000..a2c10d2 --- /dev/null +++ b/universal_rebuild/docs-gen/clickhouse_ops.md @@ -0,0 +1,20 @@ +# Resource nubes_clickhouse + +Service ID: `120` + +Service Name: ClickHouse + +[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](clickhouse_params_create.md) +- `create_database` — База данных создаётся на всех репликах кластера ClickHouse. См. [nubes_clickhouse_database](clickhouse_database.md) +- `create_user` — . См. [nubes_clickhouse_user](clickhouse_user.md) +- `delete` — Удаление возможно только после остановки сервиса через операцию `suspend` После выполнения операции необходимо выждать определенное кол-во времени +- `delete_database` — Необратимое действие!!! Трижды подумай, заблокируй телефон тимлида и не выполняй это действие. См. [nubes_clickhouse_database](clickhouse_database.md) +- `delete_user` — . См. [nubes_clickhouse_user](clickhouse_user.md) +- `modify` — Изменение кластера. Параметры: [Modify params](clickhouse_params_modify.md) +- `reconcile` +- `resume` +- `suspend` — Операция приводит к удалению всех подов Persistent Volume остаются нетронутыми diff --git a/universal_rebuild/docs-gen/clickhouse_outputs.md b/universal_rebuild/docs-gen/clickhouse_outputs.md new file mode 100644 index 0000000..82ea3b7 --- /dev/null +++ b/universal_rebuild/docs-gen/clickhouse_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_clickhouse + +Service ID: `120` + +Service Name: ClickHouse + +[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/clickhouse_params.md b/universal_rebuild/docs-gen/clickhouse_params.md new file mode 100644 index 0000000..c78f96d --- /dev/null +++ b/universal_rebuild/docs-gen/clickhouse_params.md @@ -0,0 +1,12 @@ +# Resource nubes_clickhouse + +Service ID: `120` + +Service Name: ClickHouse + +[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md) + +## Parameters + +- [Create params](clickhouse_params_create.md) +- [Modify params](clickhouse_params_modify.md) diff --git a/universal_rebuild/docs-gen/clickhouse_params_create.md b/universal_rebuild/docs-gen/clickhouse_params_create.md new file mode 100644 index 0000000..92fd988 --- /dev/null +++ b/universal_rebuild/docs-gen/clickhouse_params_create.md @@ -0,0 +1,39 @@ +# Resource nubes_clickhouse + +Service ID: `120` + +Service Name: ClickHouse + +[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
837startup_configurationmap-fixed
838cluster_configurationmap-fixed
839access_configurationmap-fixed
840clickhouse_keeper_configurationmap-fixed
841clickhouse_configurationmap-fixed
842backup_configurationmap-fixed
843autoscale_configurationmap-fixed
851clickhouse_files_configurationarray-map-fixedФормат:
- path: somethings3.xml
xmlConfig: '&lt;clickhouse&gt;......&lt;/clickhouse&gt;'
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. + +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/clickhouse_params_modify.md b/universal_rebuild/docs-gen/clickhouse_params_modify.md new file mode 100644 index 0000000..d53484d --- /dev/null +++ b/universal_rebuild/docs-gen/clickhouse_params_modify.md @@ -0,0 +1,21 @@ +# Resource nubes_clickhouse + +Service ID: `120` + +Service Name: ClickHouse + +[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md) + +## Modify params + + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
844cluster_configurationmap-fixed
845clickhouse_keeper_configurationmap-fixed
846access_configurationmap-fixed
847clickhouse_configurationmap-fixed
848backup_configurationmap-fixed
849autoscale_configurationmap-fixed
850clickhouse_files_configurationarray-map-fixedФормат:
- path: somethings3.xml
xmlConfig: '&lt;clickhouse&gt;......&lt;/clickhouse&gt;'
diff --git a/universal_rebuild/docs-gen/clickhouse_user.md b/universal_rebuild/docs-gen/clickhouse_user.md new file mode 100644 index 0000000..60e4c96 --- /dev/null +++ b/universal_rebuild/docs-gen/clickhouse_user.md @@ -0,0 +1,29 @@ +# Resource nubes_clickhouse_user + +Service: `nubes_clickhouse` (ID: 120) + +[ClickHouse (основной)](clickhouse.md) | [Operations](clickhouse_ops.md) | [User](clickhouse_user.md) | [Example](clickhouse_user_example.md) + +## Create params + +**Обязательные параметры** + +None. + +**Параметры со значением по умолчанию** + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
596usernamestringmyusernameПример: `myusername`regex=^(?![0-9_])[a-zA-Z_][a-zA-Z0-9_]{0,62}$; maxlength=62; minlength=2
598db_namearray-map-fixed[{}]
599access_hostsstring::/0Пример: `::/0`
+ +## Delete params + + + + + +
IDCodeTypeDescriptionConstraints
601usernameИмя пользователя, созданное через операцию `create_user`
diff --git a/universal_rebuild/docs-gen/clickhouse_user_example.md b/universal_rebuild/docs-gen/clickhouse_user_example.md new file mode 100644 index 0000000..7891a70 --- /dev/null +++ b/universal_rebuild/docs-gen/clickhouse_user_example.md @@ -0,0 +1,35 @@ +# Resource nubes_clickhouse_user — Example + +Service: `nubes_clickhouse` (ID: 120) + +[ClickHouse (основной)](clickhouse.md) | [Operations](clickhouse_ops.md) | [User](clickhouse_user.md) | [Example](clickhouse_user_example.md) + +## Copy-ready manifest (`clickhouse_user_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_clickhouse должен быть создан заранее +# resource "nubes_clickhouse" "baza" { ... } + +resource "nubes_clickhouse_user" "example" { + clickhouse_id = nubes_clickhouse.baza.id + + # Параметры со значением по умолчанию + username = "myusername" # Пример: `myusername` + db_name = [{}] + access_hosts = "::/0" # Пример: `::/0` +} +``` diff --git a/universal_rebuild/docs-gen/dnsrecord.md b/universal_rebuild/docs-gen/dnsrecord.md new file mode 100644 index 0000000..22f9734 --- /dev/null +++ b/universal_rebuild/docs-gen/dnsrecord.md @@ -0,0 +1,13 @@ +# Resource nubes_dnsrecord + +Service ID: `111` + +Service Name: DNS запись + +[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md) + +## MAN + +
+Необходима DNS зона, в которой будет создана DNS запись.
Выберите
* Зону в которой будет создана запись
* Тип записи
* Имя записи
* Значение записи +
diff --git a/universal_rebuild/docs-gen/dnsrecord_example.md b/universal_rebuild/docs-gen/dnsrecord_example.md new file mode 100644 index 0000000..055917c --- /dev/null +++ b/universal_rebuild/docs-gen/dnsrecord_example.md @@ -0,0 +1,49 @@ +# Resource nubes_dnsrecord + +Service ID: `111` + +Service Name: DNS запись + +[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md) + +## Copy-ready manifest (`dnsrecord_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_dnsrecord" "baza" { + zone_uid = "TODO" # UUID экземпляра услуги DNS-зоны + record_type = "A" # Тип DNS-записи + record_name = "TODO" # Имя записи. Имя зоны в конце проставляется автоматически + record_input = "TODO" # Значение. Необходима валидация, в зависимости от типа записи. Должно быть заменено на UUID-внешнийIP + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + record_ttl = 3600 # Time-to-Leave записи. Раз в какое время запись будет обновлена +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_dnsrecord.baza.state_params["имя_ключа"] +nubes_dnsrecord.baza.state_out["имя_ключа"] +nubes_dnsrecord.baza.state_params_flat["имя_ключа"] +nubes_dnsrecord.baza.state_out_flat["имя_ключа"] +nubes_dnsrecord.baza.vault_secrets["имя_ключа"] +nubes_dnsrecord.baza.vault_url +nubes_dnsrecord.baza.vault_user_path +nubes_dnsrecord.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/dnsrecord_ops.md b/universal_rebuild/docs-gen/dnsrecord_ops.md new file mode 100644 index 0000000..1ee6978 --- /dev/null +++ b/universal_rebuild/docs-gen/dnsrecord_ops.md @@ -0,0 +1,14 @@ +# Resource nubes_dnsrecord + +Service ID: `111` + +Service Name: DNS запись + +[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](dnsrecord_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](dnsrecord_params_modify.md) +- `reconcile` diff --git a/universal_rebuild/docs-gen/dnsrecord_outputs.md b/universal_rebuild/docs-gen/dnsrecord_outputs.md new file mode 100644 index 0000000..4d127c2 --- /dev/null +++ b/universal_rebuild/docs-gen/dnsrecord_outputs.md @@ -0,0 +1,29 @@ +# Resource nubes_dnsrecord + +Service ID: `111` + +Service Name: DNS запись + +[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["dnsServers"]` +- `state_out_flat["record"]` + diff --git a/universal_rebuild/docs-gen/dnsrecord_params.md b/universal_rebuild/docs-gen/dnsrecord_params.md new file mode 100644 index 0000000..84701f9 --- /dev/null +++ b/universal_rebuild/docs-gen/dnsrecord_params.md @@ -0,0 +1,12 @@ +# Resource nubes_dnsrecord + +Service ID: `111` + +Service Name: DNS запись + +[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md) + +## Parameters + +- [Create params](dnsrecord_params_create.md) +- [Modify params](dnsrecord_params_modify.md) diff --git a/universal_rebuild/docs-gen/dnsrecord_params_create.md b/universal_rebuild/docs-gen/dnsrecord_params_create.md new file mode 100644 index 0000000..a4a9ec3 --- /dev/null +++ b/universal_rebuild/docs-gen/dnsrecord_params_create.md @@ -0,0 +1,27 @@ +# Resource nubes_dnsrecord + +Service ID: `111` + +Service Name: DNS запись + +[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + +
IDCodeTypeDescriptionConstraints
75zone_uiduuidUUID экземпляра услуги DNS-зоныref_svc_id=109
76record_typestringТип DNS-записиvalue_list=A, AAAA, CNAME, MX, PTR, SOA, SRV, TXT, LUA, NS, SSHFP
77record_namestringИмя записи. Имя зоны в конце проставляется автоматическиunique_scope=parent
78record_inputstringЗначение. Необходима валидация, в зависимости от типа записи. Должно быть заменено на UUID-внешнийIP
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + +
IDCodeTypeDefaultDescriptionConstraints
450record_ttlinteger3600Time-to-Leave записи. Раз в какое время запись будет обновленаminvalue=30; maxvalue=604800
diff --git a/universal_rebuild/docs-gen/dnsrecord_params_modify.md b/universal_rebuild/docs-gen/dnsrecord_params_modify.md new file mode 100644 index 0000000..d3cdbdb --- /dev/null +++ b/universal_rebuild/docs-gen/dnsrecord_params_modify.md @@ -0,0 +1,15 @@ +# Resource nubes_dnsrecord + +Service ID: `111` + +Service Name: DNS запись + +[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md) + +## Modify params + + + + + +
IDCodeTypeDescriptionConstraints
256record_inputstringЗапись. Необходима валидация, в зависимости от типа записи. Должно быть заменено на UUID-внешнийIP
diff --git a/universal_rebuild/docs-gen/dnszone.md b/universal_rebuild/docs-gen/dnszone.md new file mode 100644 index 0000000..f8249dd --- /dev/null +++ b/universal_rebuild/docs-gen/dnszone.md @@ -0,0 +1,13 @@ +# Resource nubes_dnszone + +Service ID: `110` + +Service Name: DNS зона + +[Manual](dnszone.md) | [Create params](dnszone_params_create.md) | [Modify params](dnszone_params_modify.md) | [Output params](dnszone_outputs.md) | [Operations](dnszone_ops.md) | [Example](dnszone_example.md) + +## MAN + +
+## ![image](https://img.icons8.com/?size=50&id=41400&format=png) Необходимо делегировать зону у регистратора на Авторитетные DNS (Сервера зон)

ns3.ngcloud.ru
``` bash
185.247.187.83
2a10:aa80:0:5::3
```

ns4.ngcloud.ru
``` bash
81.22.46.43
2a10:aa80:0:6::3
``` +
diff --git a/universal_rebuild/docs-gen/dnszone_example.md b/universal_rebuild/docs-gen/dnszone_example.md new file mode 100644 index 0000000..a537b2f --- /dev/null +++ b/universal_rebuild/docs-gen/dnszone_example.md @@ -0,0 +1,52 @@ +# Resource nubes_dnszone + +Service ID: `110` + +Service Name: DNS зона + +[Manual](dnszone.md) | [Create params](dnszone_params_create.md) | [Modify params](dnszone_params_modify.md) | [Output params](dnszone_outputs.md) | [Operations](dnszone_ops.md) | [Example](dnszone_example.md) + +## Copy-ready manifest (`dnszone_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_dnszone" "baza" { + zone_email = "TODO" # Контактный e-mail + zone_name = "TODO" # Имя зоны + resource_realm = "TODO" # Платформа для развертывания + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + zone_kind = "NATIVE" # Тип зоны + zone_time_to_refresh = 86400 # Время ожидания ответа вторичного DNS перед запросом SOA-записи с первичных серверов + zone_time_to_retry = 7200 # Время в течение которого сервер повторно попробует синхронизировать информацию с первичных DNS-серверов + zone_time_to_expire = 3600000 # Время в течение которого вторичный DNS будет пытаться завершить синхронизацию зоны с первичным + zone_time_to_live = 86400 # Время, в течение которого информация будет кешироваться другими DNS-серверами +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_dnszone.baza.state_params["имя_ключа"] +nubes_dnszone.baza.state_out["имя_ключа"] +nubes_dnszone.baza.state_params_flat["имя_ключа"] +nubes_dnszone.baza.state_out_flat["имя_ключа"] +nubes_dnszone.baza.vault_secrets["имя_ключа"] +nubes_dnszone.baza.vault_url +nubes_dnszone.baza.vault_user_path +nubes_dnszone.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/dnszone_ops.md b/universal_rebuild/docs-gen/dnszone_ops.md new file mode 100644 index 0000000..e07344c --- /dev/null +++ b/universal_rebuild/docs-gen/dnszone_ops.md @@ -0,0 +1,12 @@ +# Resource nubes_dnszone + +Service ID: `110` + +Service Name: DNS зона + +[Manual](dnszone.md) | [Create params](dnszone_params_create.md) | [Modify params](dnszone_params_modify.md) | [Output params](dnszone_outputs.md) | [Operations](dnszone_ops.md) | [Example](dnszone_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](dnszone_params_create.md) +- `delete` diff --git a/universal_rebuild/docs-gen/dnszone_outputs.md b/universal_rebuild/docs-gen/dnszone_outputs.md new file mode 100644 index 0000000..0c3556d --- /dev/null +++ b/universal_rebuild/docs-gen/dnszone_outputs.md @@ -0,0 +1,32 @@ +# Resource nubes_dnszone + +Service ID: `110` + +Service Name: DNS зона + +[Manual](dnszone.md) | [Create params](dnszone_params_create.md) | [Modify params](dnszone_params_modify.md) | [Output params](dnszone_outputs.md) | [Operations](dnszone_ops.md) | [Example](dnszone_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["dnsServers"]` +- `state_out_flat["dnsServers.ns1.nubes.ru"]` +- `state_out_flat["dnsServers.ns2.nubes.ru"]` +- `state_out_flat["zoneSerial"]` +- `state_out_flat["zoneSoaServer"]` + diff --git a/universal_rebuild/docs-gen/dnszone_params.md b/universal_rebuild/docs-gen/dnszone_params.md new file mode 100644 index 0000000..0f1f739 --- /dev/null +++ b/universal_rebuild/docs-gen/dnszone_params.md @@ -0,0 +1,12 @@ +# Resource nubes_dnszone + +Service ID: `110` + +Service Name: DNS зона + +[Manual](dnszone.md) | [Create params](dnszone_params_create.md) | [Modify params](dnszone_params_modify.md) | [Output params](dnszone_outputs.md) | [Operations](dnszone_ops.md) | [Example](dnszone_example.md) + +## Parameters + +- [Create params](dnszone_params_create.md) +- [Modify params](dnszone_params_modify.md) diff --git a/universal_rebuild/docs-gen/dnszone_params_create.md b/universal_rebuild/docs-gen/dnszone_params_create.md new file mode 100644 index 0000000..0690a8f --- /dev/null +++ b/universal_rebuild/docs-gen/dnszone_params_create.md @@ -0,0 +1,31 @@ +# Resource nubes_dnszone + +Service ID: `110` + +Service Name: DNS зона + +[Manual](dnszone.md) | [Create params](dnszone_params_create.md) | [Modify params](dnszone_params_modify.md) | [Output params](dnszone_outputs.md) | [Operations](dnszone_ops.md) | [Example](dnszone_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + +
IDCodeTypeDescriptionConstraints
66zone_emailstringКонтактный e-mail
67zone_namestringИмя зоныregex=^([a-z0-9-]+\.)+[a-z0-9-]+$
69zone_masters_for_slavestringИспользовать если выбран тип SLAVE. IP адреса в формате через пробел для настройки Master-серверов
284resource_realmstringПлатформа для развертыванияfunc=getAvailableResourceRealms
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
68zone_kindstringNATIVEТип зоныvalue_list=NATIVE, SLAVE
70zone_time_to_refreshstring86400Время ожидания ответа вторичного DNS перед запросом SOA-записи с первичных серверов
71zone_time_to_retrystring7200Время в течение которого сервер повторно попробует синхронизировать информацию с первичных DNS-серверов
72zone_time_to_expirestring3600000Время в течение которого вторичный DNS будет пытаться завершить синхронизацию зоны с первичным
73zone_time_to_livestring86400Время, в течение которого информация будет кешироваться другими DNS-серверами
diff --git a/universal_rebuild/docs-gen/dnszone_params_modify.md b/universal_rebuild/docs-gen/dnszone_params_modify.md new file mode 100644 index 0000000..bd1dc13 --- /dev/null +++ b/universal_rebuild/docs-gen/dnszone_params_modify.md @@ -0,0 +1,11 @@ +# Resource nubes_dnszone + +Service ID: `110` + +Service Name: DNS зона + +[Manual](dnszone.md) | [Create params](dnszone_params_create.md) | [Modify params](dnszone_params_modify.md) | [Output params](dnszone_outputs.md) | [Operations](dnszone_ops.md) | [Example](dnszone_example.md) + +## Modify params + +None. diff --git a/universal_rebuild/docs-gen/dummy.md b/universal_rebuild/docs-gen/dummy.md new file mode 100644 index 0000000..53f9855 --- /dev/null +++ b/universal_rebuild/docs-gen/dummy.md @@ -0,0 +1,13 @@ +# Resource nubes_dummy + +Service ID: `1` + +Service Name: Болванка + +[Manual](dummy.md) | [Create params](dummy_params_create.md) | [Modify params](dummy_params_modify.md) | [Output params](dummy_outputs.md) | [Operations](dummy_ops.md) | [Example](dummy_example.md) + +## MAN + +
+## Болванка для тестов.

А это просто много букв, чтобы посмотреть, как ведет себя текст при переполнении контейнера.


``` json
{
"iamServiceUrl": "https://auth-api-test.ngcloud.ru/api/v1/user",
"idpResponse": {
"prefix": {
"charset": "",
"status_text": "Request Time-out",
"text": true,
"errordetail": "",
"filecontent": "Connection Timeout",
"responseheader": {},
"header": "",
"statuscode": "408 Request Time-out",
"status_code": 408,
"mimetype": "Unable to determine MIME type of file."
}
}
}
``` +
diff --git a/universal_rebuild/docs-gen/dummy_example.md b/universal_rebuild/docs-gen/dummy_example.md new file mode 100644 index 0000000..9f0ce5d --- /dev/null +++ b/universal_rebuild/docs-gen/dummy_example.md @@ -0,0 +1,50 @@ +# Resource nubes_dummy + +Service ID: `1` + +Service Name: Болванка + +[Manual](dummy.md) | [Create params](dummy_params_create.md) | [Modify params](dummy_params_modify.md) | [Output params](dummy_outputs.md) | [Operations](dummy_ops.md) | [Example](dummy_example.md) + +## Copy-ready manifest (`dummy_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_dummy" "baza" { + resource_realm = "TODO" # Платформа для развертывания + arr = "test" + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + duration_ms = 0 # перед завершением подождать (sleep) столько миллисекунд + fail_at_start = false # если true, завершить джоб, ничего не записывая в cmdb + fail_in_progress = false # если true, корректно начать выполнение джоба, но в процессе завершить аварийно, ничего не записывая в cmdb + where_fail = 1 # принимает 1,2,3. Работает с failInProgress. 1 - упасть в prepare. 2 - упасть внутри блока Data fill. 3 - упасть после vault write +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_dummy.baza.state_params["имя_ключа"] +nubes_dummy.baza.state_out["имя_ключа"] +nubes_dummy.baza.state_params_flat["имя_ключа"] +nubes_dummy.baza.state_out_flat["имя_ключа"] +nubes_dummy.baza.vault_secrets["имя_ключа"] +nubes_dummy.baza.vault_url +nubes_dummy.baza.vault_user_path +nubes_dummy.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/dummy_ops.md b/universal_rebuild/docs-gen/dummy_ops.md new file mode 100644 index 0000000..3af1a55 --- /dev/null +++ b/universal_rebuild/docs-gen/dummy_ops.md @@ -0,0 +1,17 @@ +# Resource nubes_dummy + +Service ID: `1` + +Service Name: Болванка + +[Manual](dummy.md) | [Create params](dummy_params_create.md) | [Modify params](dummy_params_modify.md) | [Output params](dummy_outputs.md) | [Operations](dummy_ops.md) | [Example](dummy_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](dummy_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](dummy_params_modify.md) +- `reconcile` +- `redeploy` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/dummy_outputs.md b/universal_rebuild/docs-gen/dummy_outputs.md new file mode 100644 index 0000000..52b99e1 --- /dev/null +++ b/universal_rebuild/docs-gen/dummy_outputs.md @@ -0,0 +1,28 @@ +# Resource nubes_dummy + +Service ID: `1` + +Service Name: Болванка + +[Manual](dummy.md) | [Create params](dummy_params_create.md) | [Modify params](dummy_params_modify.md) | [Output params](dummy_outputs.md) | [Operations](dummy_ops.md) | [Example](dummy_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `vault_secrets` ключи + +- `vault_secrets["someKey"]` + diff --git a/universal_rebuild/docs-gen/dummy_params.md b/universal_rebuild/docs-gen/dummy_params.md new file mode 100644 index 0000000..67ae088 --- /dev/null +++ b/universal_rebuild/docs-gen/dummy_params.md @@ -0,0 +1,12 @@ +# Resource nubes_dummy + +Service ID: `1` + +Service Name: Болванка + +[Manual](dummy.md) | [Create params](dummy_params_create.md) | [Modify params](dummy_params_modify.md) | [Output params](dummy_outputs.md) | [Operations](dummy_ops.md) | [Example](dummy_example.md) + +## Parameters + +- [Create params](dummy_params_create.md) +- [Modify params](dummy_params_modify.md) diff --git a/universal_rebuild/docs-gen/dummy_params_create.md b/universal_rebuild/docs-gen/dummy_params_create.md new file mode 100644 index 0000000..69e3367 --- /dev/null +++ b/universal_rebuild/docs-gen/dummy_params_create.md @@ -0,0 +1,46 @@ +# Resource nubes_dummy + +Service ID: `1` + +Service Name: Болванка + +[Manual](dummy.md) | [Create params](dummy_params_create.md) | [Modify params](dummy_params_modify.md) | [Output params](dummy_outputs.md) | [Operations](dummy_ops.md) | [Example](dummy_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
242resource_realmstringНаименование ресурсной платформы для подключенияfunc=getAvailableResourceRealms
286bodymessagestringДата, уходящая в Vault
321map_examplemap
322json_examplejsonДля тестирования интерфейса. Сюда можно писать корректный json
396nested_ref_example
647map_fixedmap-fixedНовый тип поля
654array_map_fixed_examplearray-map-fixedArray of map-fixed
863arrarrayvalue_list=test, 2, val1
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
198duration_msinteger0перед завершением подождать (sleep) столько миллисекунд
199fail_at_startbooleanfalse**Операция не будет завершена**
Она будет в постоянном статусе PENDING, однако в Jenkins Job завершится с ошибкой
value_list=false, true
200fail_in_progressbooleanfalseесли true, корректно начать выполнение джоба, но в процессе завершить аварийно, ничего не записывая в cmdbvalue_list=false, true
201where_failinteger1принимает 1,2,3. Работает с failInProgress. 1 - упасть в prepare. 2 - упасть внутри блока Data fill. 3 - упасть после vault writevalue_list=1, 2, 3
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/dummy_params_modify.md b/universal_rebuild/docs-gen/dummy_params_modify.md new file mode 100644 index 0000000..b601221 --- /dev/null +++ b/universal_rebuild/docs-gen/dummy_params_modify.md @@ -0,0 +1,21 @@ +# Resource nubes_dummy + +Service ID: `1` + +Service Name: Болванка + +[Manual](dummy.md) | [Create params](dummy_params_create.md) | [Modify params](dummy_params_modify.md) | [Output params](dummy_outputs.md) | [Operations](dummy_ops.md) | [Example](dummy_example.md) + +## Modify params + + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
287duration_msintegerперед завершением подождать (sleep) столько миллисекунд
288fail_at_startbooleanесли true, завершить джоб, ничего не записывая в cmdbvalue_list=false, true
289fail_in_progressbooleanесли true, корректно начать выполнение джоба, но в процессе завершить аварийно, ничего не записывая в cmdbvalue_list=false, true
290where_failintegerпринимает 1,2,3. Работает с failInProgress. 1 - упасть в prepare. 2 - упасть внутри блока Data fill. 3 - упасть после vault writevalue_list=1, 2, 3
291bodymessageДата, уходящая в Vault
373map_examplemap
374json_example
diff --git a/universal_rebuild/docs-gen/flask.md b/universal_rebuild/docs-gen/flask.md new file mode 100644 index 0000000..763135a --- /dev/null +++ b/universal_rebuild/docs-gen/flask.md @@ -0,0 +1,13 @@ +# Resource nubes_flask + +Service ID: `89` + +Service Name: Web-сервер с фреймворком Flask + +[Manual](flask.md) | [Create params](flask_params_create.md) | [Modify params](flask_params_modify.md) | [Output params](flask_outputs.md) | [Operations](flask_ops.md) | [Example](flask_example.md) + +## MAN + +
+# Инструкция по развертыванию Web-сервер с фреймворком Flask через платформу

## 1. Общая информация

Сервис **Web-сервер с фреймворком Flask** предназначен для развертывания веб-приложений на базе Flask.

### Доступные операции

create — включить сервис, развернуть веб-приложение с указанными параметрами.
delete — удалить сервис, только после suspend.
modify — изменить настройки сервиса и переразвернуть.
suspend — выключить веб-приложение, остановить обслуживание.
resume — включить веб-приложение после suspend.

---

## 2. Параметры развертывания

Параметры входных данных операции **create**:

### Имя домена
Описание: доменное имя для доступа к веб-приложению. Если указан FQDN, происходит проверка DNS на валидность А-записи. А-запись должна указывать на балансировщик ресурсной платформы. Если указано имя в рамках одного октета, оно будет добавлено в публичную DNS-зону.
Пример значения: строка, допустимые FQDN или имя в одном октете. Пример: example.com или myapp.

### Платформа для развертывания
Описание: кластер Kubernetes, в котором будет развернуто приложение.
Пример значения: идентификатор кластера Kubernetes.

### Квота ядра пода
Описание: количество CPU, выделяемое на под, в Milicores.
Пример значения: целое число, например 500 для 0.5 ядра.

### Квота памяти пода
Описание: количество памяти, выделяемое на под, в Megabytes.
Пример значения: целое число, например 512 для 512 MB.

### Кол-во реплик пода
Описание: количество инстансов пода для масштабирования.
Пример значения: целое число, шт, например 2.

### URL Проекта (gitpath)
Описание: полный HTTPS путь до проекта в Git-репозитории.
Пример значения: URL в формате https://github.com/myuser/myproject.git. Доступ к репозиторию должен быть публичным.

### URL HealthCheck
Описание: путь для проверки здоровья приложения внутри пода.
Пример значения: строка, путь, например /api/v1/health.

### Переменные окружения пода
Описание: структура данных, которая будет передана как переменные окружения в под.
Пример значения: ключ-значение, например {"ENV": "production"}.

---

## 3. Рекомендованные характеристики

### Тестовое окружение
- Квота ядра пода: 300m (0.3 ядра)
- Квота памяти пода: 256 MB
- Кол-во реплик пода: 1

### Промышленное окружение
- Квота ядра пода: от 1000m (1 ядро) в зависимости от нагрузки
- Квота памяти пода: от 1024 MB (1 GB) с учетом потребностей приложения
- Кол-во реплик пода: от 2 для обеспечения отказоустойчивости

---

## 4. Выходные параметры
Операция create не возвращает явных выходных параметров. Успешное выполнение операции приводит к развертыванию сервиса, доступного по указанному домену.

---

## 5. Дополнительная информация
- В корне проекта должен находиться файл requirements.txt со списком зависимостей Python.
- Исходный код веб-приложения должен располагаться в директории site.
- Запуск веб-сервера осуществляется командой python app.py.
- Используется версия Python: python:3.12-slim.
- Git-репозиторий должен быть публично доступен для платформы.
- Операция delete возможна только после suspend.
- Операция modify приводит к переразвертыванию с новыми параметрами. +
diff --git a/universal_rebuild/docs-gen/flask_example.md b/universal_rebuild/docs-gen/flask_example.md new file mode 100644 index 0000000..cb573d4 --- /dev/null +++ b/universal_rebuild/docs-gen/flask_example.md @@ -0,0 +1,49 @@ +# Resource nubes_flask + +Service ID: `89` + +Service Name: Web-сервер с фреймворком Flask + +[Manual](flask.md) | [Create params](flask_params_create.md) | [Modify params](flask_params_modify.md) | [Output params](flask_outputs.md) | [Operations](flask_ops.md) | [Example](flask_example.md) + +## Copy-ready manifest (`flask_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_flask" "baza" { + startup_configuration = "TODO" + cluster_configuration = "TODO" + access_configuration = "TODO" + app_configuration = "TODO" + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + json_env = {} +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_flask.baza.state_params["имя_ключа"] +nubes_flask.baza.state_out["имя_ключа"] +nubes_flask.baza.state_params_flat["имя_ключа"] +nubes_flask.baza.state_out_flat["имя_ключа"] +nubes_flask.baza.vault_secrets["имя_ключа"] +nubes_flask.baza.vault_url +nubes_flask.baza.vault_user_path +nubes_flask.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/flask_ops.md b/universal_rebuild/docs-gen/flask_ops.md new file mode 100644 index 0000000..a9ff50c --- /dev/null +++ b/universal_rebuild/docs-gen/flask_ops.md @@ -0,0 +1,17 @@ +# Resource nubes_flask + +Service ID: `89` + +Service Name: Web-сервер с фреймворком Flask + +[Manual](flask.md) | [Create params](flask_params_create.md) | [Modify params](flask_params_modify.md) | [Output params](flask_outputs.md) | [Operations](flask_ops.md) | [Example](flask_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](flask_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](flask_params_modify.md) +- `reconcile` +- `redeploy` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/flask_outputs.md b/universal_rebuild/docs-gen/flask_outputs.md new file mode 100644 index 0000000..3c2d51a --- /dev/null +++ b/universal_rebuild/docs-gen/flask_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_flask + +Service ID: `89` + +Service Name: Web-сервер с фреймворком Flask + +[Manual](flask.md) | [Create params](flask_params_create.md) | [Modify params](flask_params_modify.md) | [Output params](flask_outputs.md) | [Operations](flask_ops.md) | [Example](flask_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/flask_params.md b/universal_rebuild/docs-gen/flask_params.md new file mode 100644 index 0000000..ca3f639 --- /dev/null +++ b/universal_rebuild/docs-gen/flask_params.md @@ -0,0 +1,12 @@ +# Resource nubes_flask + +Service ID: `89` + +Service Name: Web-сервер с фреймворком Flask + +[Manual](flask.md) | [Create params](flask_params_create.md) | [Modify params](flask_params_modify.md) | [Output params](flask_outputs.md) | [Operations](flask_ops.md) | [Example](flask_example.md) + +## Parameters + +- [Create params](flask_params_create.md) +- [Modify params](flask_params_modify.md) diff --git a/universal_rebuild/docs-gen/flask_params_create.md b/universal_rebuild/docs-gen/flask_params_create.md new file mode 100644 index 0000000..cb3cdfb --- /dev/null +++ b/universal_rebuild/docs-gen/flask_params_create.md @@ -0,0 +1,39 @@ +# Resource nubes_flask + +Service ID: `89` + +Service Name: Web-сервер с фреймворком Flask + +[Manual](flask.md) | [Create params](flask_params_create.md) | [Modify params](flask_params_modify.md) | [Output params](flask_outputs.md) | [Operations](flask_ops.md) | [Example](flask_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + +
IDCodeTypeDescriptionConstraints
1037startup_configurationmap-fixed
1038cluster_configurationmap-fixed
1039access_configurationmap-fixed
1040app_configurationmap-fixed
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + +
IDCodeTypeDefaultDescriptionConstraints
1041json_envmap{}
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/flask_params_modify.md b/universal_rebuild/docs-gen/flask_params_modify.md new file mode 100644 index 0000000..9043feb --- /dev/null +++ b/universal_rebuild/docs-gen/flask_params_modify.md @@ -0,0 +1,17 @@ +# Resource nubes_flask + +Service ID: `89` + +Service Name: Web-сервер с фреймворком Flask + +[Manual](flask.md) | [Create params](flask_params_create.md) | [Modify params](flask_params_modify.md) | [Output params](flask_outputs.md) | [Operations](flask_ops.md) | [Example](flask_example.md) + +## Modify params + + + + + + + +
IDCodeTypeDescriptionConstraints
1042cluster_configurationmap-fixed
1043app_configurationmap-fixed
1044json_envmap
diff --git a/universal_rebuild/docs-gen/gitea.md b/universal_rebuild/docs-gen/gitea.md new file mode 100644 index 0000000..8b02101 --- /dev/null +++ b/universal_rebuild/docs-gen/gitea.md @@ -0,0 +1,13 @@ +# Resource nubes_gitea + +Service ID: `99` + +Service Name: Gitea + +[Manual](gitea.md) | [Create params](gitea_params_create.md) | [Modify params](gitea_params_modify.md) | [Output params](gitea_outputs.md) | [Operations](gitea_ops.md) | [Example](gitea_example.md) + +## MAN + +
+# Инструкция по развертыванию Gitea через платформу

---
## 1. Общая информация
Gitea — это лёгкий, быстрый и самодостаточный сервис хостинга Git-репозиториев с веб-интерфейсом.
Позволяет создавать и управлять репозиториями, организациями, командами, а также настраивать CI/CD через интеграции.
Развёртывание полностью автоматизировано платформой.

## Доступные операции
- **create** — Создание сервиса Gitea
- **delete** — Удаление сервиса Gitea
- **modify** — Модификация сервиса Gitea
- **suspend** — Остановка сервиса Gitea
- **resume** — Запуск сервиса Gitea

---
## 2. Параметры развертывания
Ниже перечислены параметры, которые необходимо указать при создании ресурса Gitea:

* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развёрнут сервис). Пример: `k8s-3.ext.nubes.ru`.

* **Количество узлов в сети:**
Количество реплик подов Gitea. Пример: `1`

* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `1024`

* **Квота (millicore) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `500`

* **Размер (gigabyte) диска для базы данных:**
Размер PVC для хранения репозиториев и данных Gitea в гигабайтах. Пример: `10`

* **FQDN / Домен:**
Доменное имя, по которому будет доступен сервис. Пример: `git.example.com`

* **Инстанс услуги PostgreSQL:**
UUID услуги k8sPgsql, в которой будет создана база данных `gitea` и пользователь `techgitea`.

* **Дополнительные параметры сервера (iniServerParams):**
JSON-объект с дополнительными параметрами секции `[server]` в `app.ini`. Пример:
```json
{"MAX_CONTENT_LENGTH": "524288000"}
```

* **Дополнительные annotations для Ingress (ingressExtraAnnotations):**
JSON-объект с дополнительными annotations для Ingress-контроллера. Пример:
```json
{"nginx.ingress.kubernetes.io/proxy-body-size": "500m"}
```

---
## 3. Особенности подключения и работы с репозиториями

### 3.1. Доступ только по HTTPS
Сервис развёртывается с **rootless-образом** Gitea. SSH-сервер внутри и он **доступен только внутри кластера Kubernetes**.

**Внешний доступ к репозиториям осуществляется исключительно по HTTPS через Ingress.**

```bash
# Пример клонирования
https://<домен>/<пользователь>/<репозиторий>.git
```

### 3.2. Настройка git для передачи логина и пароля
Для работы с приватными репозиториями через HTTPS необходимо передать учётные данные. Рекомендуется использовать один из следующих способов:

**Встроить креды в URL remote**
```bash
git remote set-url origin https://<логин>:<пароль>@<домен>/<пользователь>/<репозиторий>.git
```
> **Важно:** Логин и пароль администратора создаются автоматически при развертывании и хранятся в Vault.

### 3.3. Работа с большими файлами
По умолчанию `MAX_CONTENT_LENGTH` установлен в **500 МБ**, а Ingress пропускает pack-файлы до **500 МБ**.

Если необходимо запушить файлы близкие к лимиту, увеличьте HTTP-буфер git на стороне клиента:
```bash
git config http.postBuffer 524288000
```

Для файлов **более 500 МБ** рекомендуется использовать **Git LFS**.

---
## 4. Выходные параметры
После успешного развертывания ресурса Gitea платформа возвращает ряд параметров.

Ключевым из них является:

**connectionUrl**
Это внешний URL для доступа к веб-интерфейсу и Git-репозиториям по HTTPS. Пример:
```
https://git.example.com
```

**internalConnect**
Внутренний эндпоинт для подключения к PostgreSQL из других сервисов внутри кластера.

---
## 5. Дополнительная информация
- База данных `gitea` и пользователь `techgitea` создаются автоматически в указанной услуге PostgreSQL.
- DNS-запись и TLS-сертификат (Let's Encrypt) настраиваются автоматически на основе указанного домена.
- Для изменения параметров сервера Gitea (`app.ini`) используйте операцию **modify** с полем `iniServerParams`.
- Для добавления дополнительных Ingress-annotations используйте операцию **modify** с полем `ingressExtraAnnotations`.
--- +
diff --git a/universal_rebuild/docs-gen/gitea_complex.md b/universal_rebuild/docs-gen/gitea_complex.md new file mode 100644 index 0000000..b67da5e --- /dev/null +++ b/universal_rebuild/docs-gen/gitea_complex.md @@ -0,0 +1,13 @@ +# Resource nubes_gitea_complex + +Service ID: `114` + +Service Name: Комплексная услуга по созданию gitea + +[Manual](gitea_complex.md) | [Create params](gitea_complex_params_create.md) | [Modify params](gitea_complex_params_modify.md) | [Output params](gitea_complex_outputs.md) | [Operations](gitea_complex_ops.md) | [Example](gitea_complex_example.md) + +## MAN + +
+Комплексная услуга из ["gittea", "postgres"] +
diff --git a/universal_rebuild/docs-gen/gitea_complex_example.md b/universal_rebuild/docs-gen/gitea_complex_example.md new file mode 100644 index 0000000..363c3ee --- /dev/null +++ b/universal_rebuild/docs-gen/gitea_complex_example.md @@ -0,0 +1,42 @@ +# Resource nubes_gitea_complex + +Service ID: `114` + +Service Name: Комплексная услуга по созданию gitea + +[Manual](gitea_complex.md) | [Create params](gitea_complex_params_create.md) | [Modify params](gitea_complex_params_modify.md) | [Output params](gitea_complex_outputs.md) | [Operations](gitea_complex_ops.md) | [Example](gitea_complex_example.md) + +## Copy-ready manifest (`gitea_complex_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_gitea_complex" "baza" { +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_gitea_complex.baza.state_params["имя_ключа"] +nubes_gitea_complex.baza.state_out["имя_ключа"] +nubes_gitea_complex.baza.state_params_flat["имя_ключа"] +nubes_gitea_complex.baza.state_out_flat["имя_ключа"] +nubes_gitea_complex.baza.vault_secrets["имя_ключа"] +nubes_gitea_complex.baza.vault_url +nubes_gitea_complex.baza.vault_user_path +nubes_gitea_complex.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/gitea_complex_ops.md b/universal_rebuild/docs-gen/gitea_complex_ops.md new file mode 100644 index 0000000..4612ff3 --- /dev/null +++ b/universal_rebuild/docs-gen/gitea_complex_ops.md @@ -0,0 +1,10 @@ +# Resource nubes_gitea_complex + +Service ID: `114` + +Service Name: Комплексная услуга по созданию gitea + +[Manual](gitea_complex.md) | [Create params](gitea_complex_params_create.md) | [Modify params](gitea_complex_params_modify.md) | [Output params](gitea_complex_outputs.md) | [Operations](gitea_complex_ops.md) | [Example](gitea_complex_example.md) + +## Operations + diff --git a/universal_rebuild/docs-gen/gitea_complex_outputs.md b/universal_rebuild/docs-gen/gitea_complex_outputs.md new file mode 100644 index 0000000..f0593c8 --- /dev/null +++ b/universal_rebuild/docs-gen/gitea_complex_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_gitea_complex + +Service ID: `114` + +Service Name: Комплексная услуга по созданию gitea + +[Manual](gitea_complex.md) | [Create params](gitea_complex_params_create.md) | [Modify params](gitea_complex_params_modify.md) | [Output params](gitea_complex_outputs.md) | [Operations](gitea_complex_ops.md) | [Example](gitea_complex_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/gitea_complex_params.md b/universal_rebuild/docs-gen/gitea_complex_params.md new file mode 100644 index 0000000..ad58e7f --- /dev/null +++ b/universal_rebuild/docs-gen/gitea_complex_params.md @@ -0,0 +1,12 @@ +# Resource nubes_gitea_complex + +Service ID: `114` + +Service Name: Комплексная услуга по созданию gitea + +[Manual](gitea_complex.md) | [Create params](gitea_complex_params_create.md) | [Modify params](gitea_complex_params_modify.md) | [Output params](gitea_complex_outputs.md) | [Operations](gitea_complex_ops.md) | [Example](gitea_complex_example.md) + +## Parameters + +- [Create params](gitea_complex_params_create.md) +- [Modify params](gitea_complex_params_modify.md) diff --git a/universal_rebuild/docs-gen/gitea_complex_params_create.md b/universal_rebuild/docs-gen/gitea_complex_params_create.md new file mode 100644 index 0000000..2f57dfd --- /dev/null +++ b/universal_rebuild/docs-gen/gitea_complex_params_create.md @@ -0,0 +1,16 @@ +# Resource nubes_gitea_complex + +Service ID: `114` + +Service Name: Комплексная услуга по созданию gitea + +[Manual](gitea_complex.md) | [Create params](gitea_complex_params_create.md) | [Modify params](gitea_complex_params_modify.md) | [Output params](gitea_complex_outputs.md) | [Operations](gitea_complex_ops.md) | [Example](gitea_complex_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + +None. + +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. diff --git a/universal_rebuild/docs-gen/gitea_complex_params_modify.md b/universal_rebuild/docs-gen/gitea_complex_params_modify.md new file mode 100644 index 0000000..472dee0 --- /dev/null +++ b/universal_rebuild/docs-gen/gitea_complex_params_modify.md @@ -0,0 +1,11 @@ +# Resource nubes_gitea_complex + +Service ID: `114` + +Service Name: Комплексная услуга по созданию gitea + +[Manual](gitea_complex.md) | [Create params](gitea_complex_params_create.md) | [Modify params](gitea_complex_params_modify.md) | [Output params](gitea_complex_outputs.md) | [Operations](gitea_complex_ops.md) | [Example](gitea_complex_example.md) + +## Modify params + +None. diff --git a/universal_rebuild/docs-gen/gitea_example.md b/universal_rebuild/docs-gen/gitea_example.md new file mode 100644 index 0000000..efc4ac5 --- /dev/null +++ b/universal_rebuild/docs-gen/gitea_example.md @@ -0,0 +1,50 @@ +# Resource nubes_gitea + +Service ID: `99` + +Service Name: Gitea + +[Manual](gitea.md) | [Create params](gitea_params_create.md) | [Modify params](gitea_params_modify.md) | [Output params](gitea_outputs.md) | [Operations](gitea_ops.md) | [Example](gitea_example.md) + +## Copy-ready manifest (`gitea_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_gitea" "baza" { + psql_uid = "TODO" # UUID Услуги k8sPgsql. Пользователя techGitea, базу данных gitea создаёт автоматически + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + resource_cpu = 500 # Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро + resource_memory = 512 # Квота памяти пода (Указывается в Megabytes) + resource_disk = 1 # Квота диска (Указывается в GIGAbytes) + resource_instances = 1 # Количество узлов + domain = "web01" # Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_gitea.baza.state_params["имя_ключа"] +nubes_gitea.baza.state_out["имя_ключа"] +nubes_gitea.baza.state_params_flat["имя_ключа"] +nubes_gitea.baza.state_out_flat["имя_ключа"] +nubes_gitea.baza.vault_secrets["имя_ключа"] +nubes_gitea.baza.vault_url +nubes_gitea.baza.vault_user_path +nubes_gitea.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/gitea_ops.md b/universal_rebuild/docs-gen/gitea_ops.md new file mode 100644 index 0000000..0b22aac --- /dev/null +++ b/universal_rebuild/docs-gen/gitea_ops.md @@ -0,0 +1,15 @@ +# Resource nubes_gitea + +Service ID: `99` + +Service Name: Gitea + +[Manual](gitea.md) | [Create params](gitea_params_create.md) | [Modify params](gitea_params_modify.md) | [Output params](gitea_outputs.md) | [Operations](gitea_ops.md) | [Example](gitea_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](gitea_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](gitea_params_modify.md) +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/gitea_outputs.md b/universal_rebuild/docs-gen/gitea_outputs.md new file mode 100644 index 0000000..3944814 --- /dev/null +++ b/universal_rebuild/docs-gen/gitea_outputs.md @@ -0,0 +1,39 @@ +# Resource nubes_gitea + +Service ID: `99` + +Service Name: Gitea + +[Manual](gitea.md) | [Create params](gitea_params_create.md) | [Modify params](gitea_params_modify.md) | [Output params](gitea_outputs.md) | [Operations](gitea_ops.md) | [Example](gitea_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["connectionUrl"]` +- `state_out_flat["monitoring"]` +- `state_out_flat["monitoring.allDashboards"]` +- `state_out_flat["monitoring.base"]` +- `state_out_flat["monitoring.base.url"]` +- `state_out_flat["monitoring.loki"]` +- `state_out_flat["monitoring.loki.url"]` + +### `vault_secrets` ключи + +- `vault_secrets["adminPass"]` +- `vault_secrets["adminUser"]` + diff --git a/universal_rebuild/docs-gen/gitea_params.md b/universal_rebuild/docs-gen/gitea_params.md new file mode 100644 index 0000000..f0931ff --- /dev/null +++ b/universal_rebuild/docs-gen/gitea_params.md @@ -0,0 +1,12 @@ +# Resource nubes_gitea + +Service ID: `99` + +Service Name: Gitea + +[Manual](gitea.md) | [Create params](gitea_params_create.md) | [Modify params](gitea_params_modify.md) | [Output params](gitea_outputs.md) | [Operations](gitea_ops.md) | [Example](gitea_example.md) + +## Parameters + +- [Create params](gitea_params_create.md) +- [Modify params](gitea_params_modify.md) diff --git a/universal_rebuild/docs-gen/gitea_params_create.md b/universal_rebuild/docs-gen/gitea_params_create.md new file mode 100644 index 0000000..4f75b95 --- /dev/null +++ b/universal_rebuild/docs-gen/gitea_params_create.md @@ -0,0 +1,42 @@ +# Resource nubes_gitea + +Service ID: `99` + +Service Name: Gitea + +[Manual](gitea.md) | [Create params](gitea_params_create.md) | [Modify params](gitea_params_modify.md) | [Output params](gitea_outputs.md) | [Operations](gitea_ops.md) | [Example](gitea_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + +
IDCodeTypeDescriptionConstraints
238psql_uiduuidUUID Услуги k8sPgsql. Пользователя techGitea, базу данных gitea создаёт автоматическиref_svc_id=90
818ingress_extra_annotationsmap
821ini_server_paramsmap
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
232resource_cpuinteger500Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядроminvalue=300; maxvalue=4000
233resource_memoryinteger512Квота памяти пода (Указывается в Megabytes)minvalue=256; maxvalue=8192
234resource_diskinteger1Квота диска (Указывается в GIGAbytes)minvalue=1; maxvalue=999
235resource_instancesinteger1Количество узлов в сетиminvalue=1; maxvalue=7
237domainstringweb01Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealmregex=^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$; unique_scope=provider
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/gitea_params_modify.md b/universal_rebuild/docs-gen/gitea_params_modify.md new file mode 100644 index 0000000..d86886b --- /dev/null +++ b/universal_rebuild/docs-gen/gitea_params_modify.md @@ -0,0 +1,20 @@ +# Resource nubes_gitea + +Service ID: `99` + +Service Name: Gitea + +[Manual](gitea.md) | [Create params](gitea_params_create.md) | [Modify params](gitea_params_modify.md) | [Output params](gitea_outputs.md) | [Operations](gitea_ops.md) | [Example](gitea_example.md) + +## Modify params + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
259resource_cpuintegerКвота ядра пода (Указывается в mili). 1000Mili = 1 Ядроminvalue=500; maxvalue=4000
260resource_memoryintegerКвота памяти пода (Указывается в Megabytes)minvalue=256; maxvalue=8192
261resource_diskintegerКвота диска (Указывается в GIGAbytes)minvalue=1; maxvalue=999
262resource_instancesintegerКоличество узлов в сетиminvalue=1; maxvalue=7
819ingress_extra_annotationsmapПримеры:
- `nginx.ingress.kubernetes.io/proxy-body-size: 500m` (Размер пакета)
- `nginx.ingress.kubernetes.io/proxy-read-timeout: &quot;600&quot;` (Время ожидания при чтении)
- `nginx.ingress.kubernetes.io/proxy-send-timeout: &quot;600&quot;` (Время ожидания отправке)
820ini_server_paramsmapПримеры:
- `MAX_CONTENT_LENGTH: 524288000(~500мб)` (Размер пакета в байтах)
diff --git a/universal_rebuild/docs-gen/harbor.md b/universal_rebuild/docs-gen/harbor.md new file mode 100644 index 0000000..c0cad0a --- /dev/null +++ b/universal_rebuild/docs-gen/harbor.md @@ -0,0 +1,13 @@ +# Resource nubes_harbor + +Service ID: `82` + +Service Name: Container Registry + +[Manual](harbor.md) | [Create params](harbor_params_create.md) | [Modify params](harbor_params_modify.md) | [Output params](harbor_outputs.md) | [Operations](harbor_ops.md) | [Example](harbor_example.md) + +## MAN + +
+Расширенный реестр для управления Docker-образами с enterprise-функциями безопасности, репликации и контроля доступа.
Container Registry позволяет хранить, развертывать и управлять Docker-образами контейнеров в инфраструктуре NGcloud.
Сервис можно использовать в процессе разработки контейнеров. Например, вы можете настроить систему автоматизации на работу с реестром в Container Registry в рамках процесса непрерывной интеграции. Контейнеры идеально подходят для запуска небольших, независимых и легко изменяемых сервисов.
Чтобы начать работу, создайте реестр и загрузите в него Docker-образ
Авторизация: keycloak +
diff --git a/universal_rebuild/docs-gen/harbor_example.md b/universal_rebuild/docs-gen/harbor_example.md new file mode 100644 index 0000000..8a83bb3 --- /dev/null +++ b/universal_rebuild/docs-gen/harbor_example.md @@ -0,0 +1,50 @@ +# Resource nubes_harbor + +Service ID: `82` + +Service Name: Container Registry + +[Manual](harbor.md) | [Create params](harbor_params_create.md) | [Modify params](harbor_params_modify.md) | [Output params](harbor_outputs.md) | [Operations](harbor_ops.md) | [Example](harbor_example.md) + +## Copy-ready manifest (`harbor_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_harbor" "baza" { + resource_realm = "TODO" # Платформа для развертывания + s3_uid = "TODO" # UUID экземпляра услуги S3 + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + domain = "web01" # Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm + resource_cpu = 100 # Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро + resource_memory = 200 # Квота памяти пода (Указывается в Megabytes) + resource_instances = 1 # Количество узлов +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_harbor.baza.state_params["имя_ключа"] +nubes_harbor.baza.state_out["имя_ключа"] +nubes_harbor.baza.state_params_flat["имя_ключа"] +nubes_harbor.baza.state_out_flat["имя_ключа"] +nubes_harbor.baza.vault_secrets["имя_ключа"] +nubes_harbor.baza.vault_url +nubes_harbor.baza.vault_user_path +nubes_harbor.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/harbor_ops.md b/universal_rebuild/docs-gen/harbor_ops.md new file mode 100644 index 0000000..c97c401 --- /dev/null +++ b/universal_rebuild/docs-gen/harbor_ops.md @@ -0,0 +1,13 @@ +# Resource nubes_harbor + +Service ID: `82` + +Service Name: Container Registry + +[Manual](harbor.md) | [Create params](harbor_params_create.md) | [Modify params](harbor_params_modify.md) | [Output params](harbor_outputs.md) | [Operations](harbor_ops.md) | [Example](harbor_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](harbor_params_create.md) +- `delete` — DEV-Ветка удаления Harbor +- `modify` — Изменение кластера. Параметры: [Modify params](harbor_params_modify.md) diff --git a/universal_rebuild/docs-gen/harbor_outputs.md b/universal_rebuild/docs-gen/harbor_outputs.md new file mode 100644 index 0000000..3422bbd --- /dev/null +++ b/universal_rebuild/docs-gen/harbor_outputs.md @@ -0,0 +1,40 @@ +# Resource nubes_harbor + +Service ID: `82` + +Service Name: Container Registry + +[Manual](harbor.md) | [Create params](harbor_params_create.md) | [Modify params](harbor_params_modify.md) | [Output params](harbor_outputs.md) | [Operations](harbor_ops.md) | [Example](harbor_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["connectionUrl"]` +- `state_out_flat["monitoring"]` +- `state_out_flat["monitoring.allDashboards"]` +- `state_out_flat["monitoring.base"]` +- `state_out_flat["monitoring.base.url"]` +- `state_out_flat["monitoring.k8sregistry"]` +- `state_out_flat["monitoring.k8sregistry.url"]` +- `state_out_flat["monitoring.loki"]` +- `state_out_flat["monitoring.loki.url"]` + +### `vault_secrets` ключи + +- `vault_secrets["adminPass"]` + diff --git a/universal_rebuild/docs-gen/harbor_params.md b/universal_rebuild/docs-gen/harbor_params.md new file mode 100644 index 0000000..6819254 --- /dev/null +++ b/universal_rebuild/docs-gen/harbor_params.md @@ -0,0 +1,12 @@ +# Resource nubes_harbor + +Service ID: `82` + +Service Name: Container Registry + +[Manual](harbor.md) | [Create params](harbor_params_create.md) | [Modify params](harbor_params_modify.md) | [Output params](harbor_outputs.md) | [Operations](harbor_ops.md) | [Example](harbor_example.md) + +## Parameters + +- [Create params](harbor_params_create.md) +- [Modify params](harbor_params_modify.md) diff --git a/universal_rebuild/docs-gen/harbor_params_create.md b/universal_rebuild/docs-gen/harbor_params_create.md new file mode 100644 index 0000000..f51594a --- /dev/null +++ b/universal_rebuild/docs-gen/harbor_params_create.md @@ -0,0 +1,28 @@ +# Resource nubes_harbor + +Service ID: `82` + +Service Name: Container Registry + +[Manual](harbor.md) | [Create params](harbor_params_create.md) | [Modify params](harbor_params_modify.md) | [Output params](harbor_outputs.md) | [Operations](harbor_ops.md) | [Example](harbor_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + +
IDCodeTypeDescriptionConstraints
110resource_realmstringНаименование кластера Kubernetes для подключенияfunc=getAvailableResourceRealms
231s3_uiduuidUUID экземпляра услуги S3ref_svc_id=12
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
16domainstringweb01Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealmregex=^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
228resource_cpuinteger100Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядроminvalue=500; maxvalue=4000
229resource_memoryinteger200Квота памяти пода (Указывается в Megabytes)minvalue=512; maxvalue=8192
230resource_instancesinteger1Количество узлов в сетиminvalue=1; maxvalue=7
diff --git a/universal_rebuild/docs-gen/harbor_params_modify.md b/universal_rebuild/docs-gen/harbor_params_modify.md new file mode 100644 index 0000000..71d42a0 --- /dev/null +++ b/universal_rebuild/docs-gen/harbor_params_modify.md @@ -0,0 +1,17 @@ +# Resource nubes_harbor + +Service ID: `82` + +Service Name: Container Registry + +[Manual](harbor.md) | [Create params](harbor_params_create.md) | [Modify params](harbor_params_modify.md) | [Output params](harbor_outputs.md) | [Operations](harbor_ops.md) | [Example](harbor_example.md) + +## Modify params + + + + + + + +
IDCodeTypeDescriptionConstraints
822resource_instancesintegerminvalue=1; maxvalue=7
823resource_cpuintegerminvalue=500; maxvalue=4000
824resource_memoryintegerminvalue=512; maxvalue=8192
diff --git a/universal_rebuild/docs-gen/http.md b/universal_rebuild/docs-gen/http.md new file mode 100644 index 0000000..68075b0 --- /dev/null +++ b/universal_rebuild/docs-gen/http.md @@ -0,0 +1,13 @@ +# Resource nubes_http + +Service ID: `98` + +Service Name: Простой HTTP контейнер + +[Manual](http.md) | [Create params](http_params_create.md) | [Modify params](http_params_modify.md) | [Output params](http_outputs.md) | [Operations](http_ops.md) | [Example](http_example.md) + +## MAN + +
+Manual not available. +
diff --git a/universal_rebuild/docs-gen/http_example.md b/universal_rebuild/docs-gen/http_example.md new file mode 100644 index 0000000..a39a54b --- /dev/null +++ b/universal_rebuild/docs-gen/http_example.md @@ -0,0 +1,51 @@ +# Resource nubes_http + +Service ID: `98` + +Service Name: Простой HTTP контейнер + +[Manual](http.md) | [Create params](http_params_create.md) | [Modify params](http_params_modify.md) | [Output params](http_outputs.md) | [Operations](http_ops.md) | [Example](http_example.md) + +## Copy-ready manifest (`http_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_http" "baza" { + resource_realm = "TODO" # Платформа для развертывания + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + domain = "web01" # Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm + resource_cpu = 100 # Квота ядра пода (Указывается в mili) + resource_memory = 200 # Квота памяти пода (Указывается в Megabytes) + resource_instances = 1 # Количество узлов + registry_path = "nexus-sa.tst.nubes.ru/docker-nubes/jolt" # Путь до image, который будет установлен как deployment + ingress_annotations = {} # Формат ключ/значение Поддерживает пока простые аннотации +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_http.baza.state_params["имя_ключа"] +nubes_http.baza.state_out["имя_ключа"] +nubes_http.baza.state_params_flat["имя_ключа"] +nubes_http.baza.state_out_flat["имя_ключа"] +nubes_http.baza.vault_secrets["имя_ключа"] +nubes_http.baza.vault_url +nubes_http.baza.vault_user_path +nubes_http.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/http_ops.md b/universal_rebuild/docs-gen/http_ops.md new file mode 100644 index 0000000..fb7982b --- /dev/null +++ b/universal_rebuild/docs-gen/http_ops.md @@ -0,0 +1,17 @@ +# Resource nubes_http + +Service ID: `98` + +Service Name: Простой HTTP контейнер + +[Manual](http.md) | [Create params](http_params_create.md) | [Modify params](http_params_modify.md) | [Output params](http_outputs.md) | [Operations](http_ops.md) | [Example](http_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](http_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](http_params_modify.md) +- `reconcile` +- `redeploy` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/http_outputs.md b/universal_rebuild/docs-gen/http_outputs.md new file mode 100644 index 0000000..9baf737 --- /dev/null +++ b/universal_rebuild/docs-gen/http_outputs.md @@ -0,0 +1,34 @@ +# Resource nubes_http + +Service ID: `98` + +Service Name: Простой HTTP контейнер + +[Manual](http.md) | [Create params](http_params_create.md) | [Modify params](http_params_modify.md) | [Output params](http_outputs.md) | [Operations](http_ops.md) | [Example](http_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["connectionUrl"]` +- `state_out_flat["monitoring"]` +- `state_out_flat["monitoring.allDashboards"]` +- `state_out_flat["monitoring.base"]` +- `state_out_flat["monitoring.base.url"]` +- `state_out_flat["monitoring.loki"]` +- `state_out_flat["monitoring.loki.url"]` + diff --git a/universal_rebuild/docs-gen/http_params.md b/universal_rebuild/docs-gen/http_params.md new file mode 100644 index 0000000..07aa372 --- /dev/null +++ b/universal_rebuild/docs-gen/http_params.md @@ -0,0 +1,12 @@ +# Resource nubes_http + +Service ID: `98` + +Service Name: Простой HTTP контейнер + +[Manual](http.md) | [Create params](http_params_create.md) | [Modify params](http_params_modify.md) | [Output params](http_outputs.md) | [Operations](http_ops.md) | [Example](http_example.md) + +## Parameters + +- [Create params](http_params_create.md) +- [Modify params](http_params_modify.md) diff --git a/universal_rebuild/docs-gen/http_params_create.md b/universal_rebuild/docs-gen/http_params_create.md new file mode 100644 index 0000000..2add22b --- /dev/null +++ b/universal_rebuild/docs-gen/http_params_create.md @@ -0,0 +1,42 @@ +# Resource nubes_http + +Service ID: `98` + +Service Name: Простой HTTP контейнер + +[Manual](http.md) | [Create params](http_params_create.md) | [Modify params](http_params_modify.md) | [Output params](http_outputs.md) | [Operations](http_ops.md) | [Example](http_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + +
IDCodeTypeDescriptionConstraints
216resource_realmstringНаименование кластера Kubernetes для подключенияfunc=getAvailableResourceRealms
241json_envmapМассив переменных, будут переданы в env приложения
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
212domainstringweb01Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealmregex=^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$; unique_scope=provider
213resource_cpuinteger100Квота ядра пода (Указывается в mili)minvalue=100; maxvalue=4000
214resource_memoryinteger200Квота памяти пода (Указывается в Megabytes)minvalue=128; maxvalue=8192
215resource_instancesinteger1Количество реплик приложения. Трафик будет распределяться между подами в режиме Round-Robinminvalue=1; maxvalue=7
217registry_pathstringnexus-sa.tst.nubes.ru/docker-nubes/joltПуть до image, который будет установлен как deployment
782ingress_annotationsmap{}Формат ключ/значение
Поддерживает пока простые аннотации
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/http_params_modify.md b/universal_rebuild/docs-gen/http_params_modify.md new file mode 100644 index 0000000..75a69ec --- /dev/null +++ b/universal_rebuild/docs-gen/http_params_modify.md @@ -0,0 +1,17 @@ +# Resource nubes_http + +Service ID: `98` + +Service Name: Простой HTTP контейнер + +[Manual](http.md) | [Create params](http_params_create.md) | [Modify params](http_params_modify.md) | [Output params](http_outputs.md) | [Operations](http_ops.md) | [Example](http_example.md) + +## Modify params + + + + + + + +
IDCodeTypeDescriptionConstraints
218resource_cpuintegerminvalue=100; maxvalue=4000
219resource_memoryintegerminvalue=128; maxvalue=8192
220resource_instancesintegerКоличество узловminvalue=1; maxvalue=7
diff --git a/universal_rebuild/docs-gen/index.md b/universal_rebuild/docs-gen/index.md new file mode 100644 index 0000000..28a360a --- /dev/null +++ b/universal_rebuild/docs-gen/index.md @@ -0,0 +1,47 @@ +# Ресурсы провайдера + +| ID | Ресурс | Описание | +|-----|--------|----------| +| 1 | [nubes_dummy](dummy.md) | Болванка | +| 2 | [nubes_template](template.md) | Темплейт k8s | +| 12 | [nubes_s3](s3.md) | S3 Object Storage | +| 13 | [nubes_s3bucket](s3bucket.md) | S3 бакет | +| 19 | [nubes_vc_org](vc_org.md) | Организация в Cloud Director | +| 20 | [nubes_vc_org_saas](vc_org_saas.md) | Организация [DEPRECATED] | +| 21 | [nubes_vc_vdc](vc_vdc.md) | Виртуальный датацентр (vDC) | +| 22 | [nubes_vc_nsxt](vc_nsxt.md) | Сетевой шлюз периметра (Edge) | +| 23 | [nubes_vc_vm](vc_vm.md) | VM в Cloud Director (старый формат) (vc_vm) | +| 25 | [nubes_vcexternalip](vcexternalip.md) | Публичные IP адреса | +| 26 | [nubes_vapp](vapp.md) | Виртуальный каталог ВМ (vApp) | +| 27 | [nubes_vc_vm_v2](vc_vm_v2.md) | VM в Cloud Director (vc_vmV2) | +| 28 | [nubes_vc_vm_v3](vc_vm_v3.md) | Виртуальная машина | +| 29 | [nubes_vc_vdc_group](vc_vdc_group.md) | Группа датацентров | +| 32 | [nubes_vmpostgre](vmpostgre.md) | vc_vm_postgresql_std | +| 50 | [nubes_nextcloud](nextcloud.md) | Nextcloud | +| 81 | [nubes_superset](superset.md) | Apache Superset | +| 82 | [nubes_harbor](harbor.md) | Container Registry | +| 88 | [nubes_k8s_ziti_controller](k8s_ziti_controller.md) | k8sZitiController | +| 89 | [nubes_flask](flask.md) | Web-сервер с фреймворком Flask | +| 90 | [nubes_postgres](postgres.md) | PostgreSQL | +| 91 | [nubes_redis](redis.md) | Redis | +| 92 | [nubes_mongodb](mongodb.md) | MongoDB | +| 93 | [nubes_rabbitmq](rabbitmq.md) | RabbitMQ | +| 94 | [nubes_lucee](lucee.md) | Lucee | +| 95 | [nubes_nodejs](nodejs.md) | NodeJS | +| 96 | [nubes_pgadmin](pgadmin.md) | pgAdmin | +| 97 | [nubes_nodered](nodered.md) | NodeRed | +| 98 | [nubes_http](http.md) | Простой HTTP контейнер | +| 99 | [nubes_gitea](gitea.md) | Gitea | +| 100 | [nubes_openwhisk](openwhisk.md) | Serverless Openwhisk (openwhisk_tenant) | +| 110 | [nubes_dnszone](dnszone.md) | DNS зона | +| 111 | [nubes_dnsrecord](dnsrecord.md) | DNS запись | +| 112 | [nubes_tenant](tenant.md) | Тенант в Grafana | +| 113 | [nubes_vc_complex](vc_complex.md) | Быстрый старт | +| 114 | [nubes_gitea_complex](gitea_complex.md) | Комплексная услуга по созданию gitea | +| 115 | [nubes_mariadb](mariadb.md) | Mariadb | +| 116 | [nubes_kafka](kafka.md) | ApacheKafka | +| 117 | [nubes_nifi](nifi.md) | Nifi | +| 119 | [nubes_akhq](akhq.md) | Akhq | +| 120 | [nubes_clickhouse](clickhouse.md) | ClickHouse | +| 149 | [nubes_valo_tenant](valo_tenant.md) | VALO Cloud | +| 150 | [nubes_k8s_sthutrval_cluster](k8s_sthutrval_cluster.md) | Kubernetes кластер Штурвал | diff --git a/universal_rebuild/docs-gen/k8s_sthutrval_cluster.md b/universal_rebuild/docs-gen/k8s_sthutrval_cluster.md new file mode 100644 index 0000000..b3b0523 --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_sthutrval_cluster.md @@ -0,0 +1,13 @@ +# Resource nubes_k8s_sthutrval_cluster + +Service ID: `150` + +Service Name: Kubernetes кластер Штурвал + +[Manual](k8s_sthutrval_cluster.md) | [Create params](k8s_sthutrval_cluster_params_create.md) | [Modify params](k8s_sthutrval_cluster_params_modify.md) | [Output params](k8s_sthutrval_cluster_outputs.md) | [Operations](k8s_sthutrval_cluster_ops.md) | [Example](k8s_sthutrval_cluster_example.md) + +## MAN + +
+Перед разворачиванием убедиться, что в облаке есть 2 свободных невыделенных IP в пуле +
diff --git a/universal_rebuild/docs-gen/k8s_sthutrval_cluster_example.md b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_example.md new file mode 100644 index 0000000..2981634 --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_example.md @@ -0,0 +1,49 @@ +# Resource nubes_k8s_sthutrval_cluster + +Service ID: `150` + +Service Name: Kubernetes кластер Штурвал + +[Manual](k8s_sthutrval_cluster.md) | [Create params](k8s_sthutrval_cluster_params_create.md) | [Modify params](k8s_sthutrval_cluster_params_modify.md) | [Output params](k8s_sthutrval_cluster_outputs.md) | [Operations](k8s_sthutrval_cluster_ops.md) | [Example](k8s_sthutrval_cluster_example.md) + +## Copy-ready manifest (`k8s_sthutrval_cluster_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_k8s_sthutrval_cluster" "baza" { + startup_configuration = "TODO" + control_plane_configuration = "TODO" + access_configuration = "TODO" + cluster_configuration = "TODO" + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + worker_configuration = [{}] +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_k8s_sthutrval_cluster.baza.state_params["имя_ключа"] +nubes_k8s_sthutrval_cluster.baza.state_out["имя_ключа"] +nubes_k8s_sthutrval_cluster.baza.state_params_flat["имя_ключа"] +nubes_k8s_sthutrval_cluster.baza.state_out_flat["имя_ключа"] +nubes_k8s_sthutrval_cluster.baza.vault_secrets["имя_ключа"] +nubes_k8s_sthutrval_cluster.baza.vault_url +nubes_k8s_sthutrval_cluster.baza.vault_user_path +nubes_k8s_sthutrval_cluster.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/k8s_sthutrval_cluster_ops.md b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_ops.md new file mode 100644 index 0000000..e15a212 --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_ops.md @@ -0,0 +1,18 @@ +# Resource nubes_k8s_sthutrval_cluster + +Service ID: `150` + +Service Name: Kubernetes кластер Штурвал + +[Manual](k8s_sthutrval_cluster.md) | [Create params](k8s_sthutrval_cluster_params_create.md) | [Modify params](k8s_sthutrval_cluster_params_modify.md) | [Output params](k8s_sthutrval_cluster_outputs.md) | [Operations](k8s_sthutrval_cluster_ops.md) | [Example](k8s_sthutrval_cluster_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](k8s_sthutrval_cluster_params_create.md) +- `create_user` — . См. [nubes_k8s_sthutrval_cluster_user](k8s_sthutrval_cluster_user.md) +- `delete` +- `delete_user` — . См. [nubes_k8s_sthutrval_cluster_user](k8s_sthutrval_cluster_user.md) +- `modify` — Изменение кластера. Параметры: [Modify params](k8s_sthutrval_cluster_params_modify.md) +- `reconcile` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/k8s_sthutrval_cluster_outputs.md b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_outputs.md new file mode 100644 index 0000000..065be3b --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_outputs.md @@ -0,0 +1,33 @@ +# Resource nubes_k8s_sthutrval_cluster + +Service ID: `150` + +Service Name: Kubernetes кластер Штурвал + +[Manual](k8s_sthutrval_cluster.md) | [Create params](k8s_sthutrval_cluster_params_create.md) | [Modify params](k8s_sthutrval_cluster_params_modify.md) | [Output params](k8s_sthutrval_cluster_outputs.md) | [Operations](k8s_sthutrval_cluster_ops.md) | [Example](k8s_sthutrval_cluster_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["ingressAddress"]` +- `state_out_flat["kubernetesApiAddress"]` + +### `vault_secrets` ключи + +- `vault_secrets["kubernetesAdminConfigB64"]` + diff --git a/universal_rebuild/docs-gen/k8s_sthutrval_cluster_params.md b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_params.md new file mode 100644 index 0000000..641f838 --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_params.md @@ -0,0 +1,12 @@ +# Resource nubes_k8s_sthutrval_cluster + +Service ID: `150` + +Service Name: Kubernetes кластер Штурвал + +[Manual](k8s_sthutrval_cluster.md) | [Create params](k8s_sthutrval_cluster_params_create.md) | [Modify params](k8s_sthutrval_cluster_params_modify.md) | [Output params](k8s_sthutrval_cluster_outputs.md) | [Operations](k8s_sthutrval_cluster_ops.md) | [Example](k8s_sthutrval_cluster_example.md) + +## Parameters + +- [Create params](k8s_sthutrval_cluster_params_create.md) +- [Modify params](k8s_sthutrval_cluster_params_modify.md) diff --git a/universal_rebuild/docs-gen/k8s_sthutrval_cluster_params_create.md b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_params_create.md new file mode 100644 index 0000000..4ecc132 --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_params_create.md @@ -0,0 +1,39 @@ +# Resource nubes_k8s_sthutrval_cluster + +Service ID: `150` + +Service Name: Kubernetes кластер Штурвал + +[Manual](k8s_sthutrval_cluster.md) | [Create params](k8s_sthutrval_cluster_params_create.md) | [Modify params](k8s_sthutrval_cluster_params_modify.md) | [Output params](k8s_sthutrval_cluster_outputs.md) | [Operations](k8s_sthutrval_cluster_ops.md) | [Example](k8s_sthutrval_cluster_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + +
IDCodeTypeDescriptionConstraints
750startup_configurationmap-fixed
751control_plane_configurationmap-fixed
753access_configurationmap-fixed
755cluster_configurationmap-fixed
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + +
IDCodeTypeDefaultDescriptionConstraints
752worker_configurationarray-map-fixed[{}]
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/k8s_sthutrval_cluster_params_modify.md b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_params_modify.md new file mode 100644 index 0000000..f2f26fb --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_params_modify.md @@ -0,0 +1,18 @@ +# Resource nubes_k8s_sthutrval_cluster + +Service ID: `150` + +Service Name: Kubernetes кластер Штурвал + +[Manual](k8s_sthutrval_cluster.md) | [Create params](k8s_sthutrval_cluster_params_create.md) | [Modify params](k8s_sthutrval_cluster_params_modify.md) | [Output params](k8s_sthutrval_cluster_outputs.md) | [Operations](k8s_sthutrval_cluster_ops.md) | [Example](k8s_sthutrval_cluster_example.md) + +## Modify params + + + + + + + + +
IDCodeTypeDescriptionConstraints
756cluster_configurationmap-fixed
757control_plane_configurationmap-fixed
758worker_configurationarray-map-fixed
759access_configurationmap-fixed
diff --git a/universal_rebuild/docs-gen/k8s_sthutrval_cluster_user.md b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_user.md new file mode 100644 index 0000000..df2fe99 --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_user.md @@ -0,0 +1,27 @@ +# Resource nubes_k8s_sthutrval_cluster_user + +Service: `nubes_k8s_sthutrval_cluster` (ID: 150) + +[Kubernetes кластер Штурвал (основной)](k8s_sthutrval_cluster.md) | [Operations](k8s_sthutrval_cluster_ops.md) | [User](k8s_sthutrval_cluster_user.md) | [Example](k8s_sthutrval_cluster_user_example.md) + +## Create params + +**Обязательные параметры** + +None. + +**Параметры со значением по умолчанию** + + + + + +
IDCodeTypeDefaultDescriptionConstraints
869adminsarray-map-fixed[{}]
+ +## Delete params + + + + + +
IDCodeTypeDescriptionConstraints
870adminsarray-map-fixed
diff --git a/universal_rebuild/docs-gen/k8s_sthutrval_cluster_user_example.md b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_user_example.md new file mode 100644 index 0000000..ff417ff --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_sthutrval_cluster_user_example.md @@ -0,0 +1,33 @@ +# Resource nubes_k8s_sthutrval_cluster_user — Example + +Service: `nubes_k8s_sthutrval_cluster` (ID: 150) + +[Kubernetes кластер Штурвал (основной)](k8s_sthutrval_cluster.md) | [Operations](k8s_sthutrval_cluster_ops.md) | [User](k8s_sthutrval_cluster_user.md) | [Example](k8s_sthutrval_cluster_user_example.md) + +## Copy-ready manifest (`k8s_sthutrval_cluster_user_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_k8s_sthutrval_cluster должен быть создан заранее +# resource "nubes_k8s_sthutrval_cluster" "baza" { ... } + +resource "nubes_k8s_sthutrval_cluster_user" "example" { + k8s_sthutrval_cluster_id = nubes_k8s_sthutrval_cluster.baza.id + + # Параметры со значением по умолчанию + admins = [{}] +} +``` diff --git a/universal_rebuild/docs-gen/k8s_ziti_controller.md b/universal_rebuild/docs-gen/k8s_ziti_controller.md new file mode 100644 index 0000000..5c8b8f3 --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_ziti_controller.md @@ -0,0 +1,13 @@ +# Resource nubes_k8s_ziti_controller + +Service ID: `88` + +Service Name: k8sZitiController + +[Manual](k8s_ziti_controller.md) | [Create params](k8s_ziti_controller_params_create.md) | [Modify params](k8s_ziti_controller_params_modify.md) | [Output params](k8s_ziti_controller_outputs.md) | [Operations](k8s_ziti_controller_ops.md) | [Example](k8s_ziti_controller_example.md) + +## MAN + +
+Manual not available. +
diff --git a/universal_rebuild/docs-gen/k8s_ziti_controller_example.md b/universal_rebuild/docs-gen/k8s_ziti_controller_example.md new file mode 100644 index 0000000..6869518 --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_ziti_controller_example.md @@ -0,0 +1,50 @@ +# Resource nubes_k8s_ziti_controller + +Service ID: `88` + +Service Name: k8sZitiController + +[Manual](k8s_ziti_controller.md) | [Create params](k8s_ziti_controller_params_create.md) | [Modify params](k8s_ziti_controller_params_modify.md) | [Output params](k8s_ziti_controller_outputs.md) | [Operations](k8s_ziti_controller_ops.md) | [Example](k8s_ziti_controller_example.md) + +## Copy-ready manifest (`k8s_ziti_controller_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_k8s_ziti_controller" "baza" { + resource_realm = "TODO" # Платформа для развертывания + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + resource_cpu = 300 # Квота ядра пода (milicores) + resource_memory = 512 # Квота памяти пода (MBytes) + resource_disk = 1 # Квота диска (Указывается в GIGAbytes) + resource_instances = 1 # Количество узлов + domain = "web01" # Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_k8s_ziti_controller.baza.state_params["имя_ключа"] +nubes_k8s_ziti_controller.baza.state_out["имя_ключа"] +nubes_k8s_ziti_controller.baza.state_params_flat["имя_ключа"] +nubes_k8s_ziti_controller.baza.state_out_flat["имя_ключа"] +nubes_k8s_ziti_controller.baza.vault_secrets["имя_ключа"] +nubes_k8s_ziti_controller.baza.vault_url +nubes_k8s_ziti_controller.baza.vault_user_path +nubes_k8s_ziti_controller.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/k8s_ziti_controller_ops.md b/universal_rebuild/docs-gen/k8s_ziti_controller_ops.md new file mode 100644 index 0000000..8da7234 --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_ziti_controller_ops.md @@ -0,0 +1,12 @@ +# Resource nubes_k8s_ziti_controller + +Service ID: `88` + +Service Name: k8sZitiController + +[Manual](k8s_ziti_controller.md) | [Create params](k8s_ziti_controller_params_create.md) | [Modify params](k8s_ziti_controller_params_modify.md) | [Output params](k8s_ziti_controller_outputs.md) | [Operations](k8s_ziti_controller_ops.md) | [Example](k8s_ziti_controller_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](k8s_ziti_controller_params_create.md) +- `delete` diff --git a/universal_rebuild/docs-gen/k8s_ziti_controller_outputs.md b/universal_rebuild/docs-gen/k8s_ziti_controller_outputs.md new file mode 100644 index 0000000..6fc1fdd --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_ziti_controller_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_k8s_ziti_controller + +Service ID: `88` + +Service Name: k8sZitiController + +[Manual](k8s_ziti_controller.md) | [Create params](k8s_ziti_controller_params_create.md) | [Modify params](k8s_ziti_controller_params_modify.md) | [Output params](k8s_ziti_controller_outputs.md) | [Operations](k8s_ziti_controller_ops.md) | [Example](k8s_ziti_controller_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/k8s_ziti_controller_params.md b/universal_rebuild/docs-gen/k8s_ziti_controller_params.md new file mode 100644 index 0000000..343d93e --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_ziti_controller_params.md @@ -0,0 +1,12 @@ +# Resource nubes_k8s_ziti_controller + +Service ID: `88` + +Service Name: k8sZitiController + +[Manual](k8s_ziti_controller.md) | [Create params](k8s_ziti_controller_params_create.md) | [Modify params](k8s_ziti_controller_params_modify.md) | [Output params](k8s_ziti_controller_outputs.md) | [Operations](k8s_ziti_controller_ops.md) | [Example](k8s_ziti_controller_example.md) + +## Parameters + +- [Create params](k8s_ziti_controller_params_create.md) +- [Modify params](k8s_ziti_controller_params_modify.md) diff --git a/universal_rebuild/docs-gen/k8s_ziti_controller_params_create.md b/universal_rebuild/docs-gen/k8s_ziti_controller_params_create.md new file mode 100644 index 0000000..dac54da --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_ziti_controller_params_create.md @@ -0,0 +1,28 @@ +# Resource nubes_k8s_ziti_controller + +Service ID: `88` + +Service Name: k8sZitiController + +[Manual](k8s_ziti_controller.md) | [Create params](k8s_ziti_controller_params_create.md) | [Modify params](k8s_ziti_controller_params_modify.md) | [Output params](k8s_ziti_controller_outputs.md) | [Operations](k8s_ziti_controller_ops.md) | [Example](k8s_ziti_controller_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + +
IDCodeTypeDescriptionConstraints
298resource_realmstringПлатформа для развертыванияfunc=getAvailableResourceRealms
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
294resource_cpuinteger300Квота ядра пода (milicores)minvalue=100; maxvalue=4000
295resource_memoryinteger512Квота памяти пода (MBytes)minvalue=128; maxvalue=8192
296resource_diskinteger1Квота диска (Указывается в GIGAbytes)minvalue=1; maxvalue=999
297resource_instancesinteger1Количество узловminvalue=1; maxvalue=7
299domainstringweb01Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealmregex=^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$; unique_scope=provider
diff --git a/universal_rebuild/docs-gen/k8s_ziti_controller_params_modify.md b/universal_rebuild/docs-gen/k8s_ziti_controller_params_modify.md new file mode 100644 index 0000000..1998e6a --- /dev/null +++ b/universal_rebuild/docs-gen/k8s_ziti_controller_params_modify.md @@ -0,0 +1,11 @@ +# Resource nubes_k8s_ziti_controller + +Service ID: `88` + +Service Name: k8sZitiController + +[Manual](k8s_ziti_controller.md) | [Create params](k8s_ziti_controller_params_create.md) | [Modify params](k8s_ziti_controller_params_modify.md) | [Output params](k8s_ziti_controller_outputs.md) | [Operations](k8s_ziti_controller_ops.md) | [Example](k8s_ziti_controller_example.md) + +## Modify params + +None. diff --git a/universal_rebuild/docs-gen/kafka.md b/universal_rebuild/docs-gen/kafka.md new file mode 100644 index 0000000..34f2d04 --- /dev/null +++ b/universal_rebuild/docs-gen/kafka.md @@ -0,0 +1,13 @@ +# Resource nubes_kafka + +Service ID: `116` + +Service Name: ApacheKafka + +[Manual](kafka.md) | [Create params](kafka_params_create.md) | [Modify params](kafka_params_modify.md) | [Output params](kafka_outputs.md) | [Operations](kafka_ops.md) | [Example](kafka_example.md) + +## MAN + +
+# Инструкция по развертыванию Организация в Cloud Director через платформу

## 1. Общая информация

Сервис **Организация в Cloud Director** предназначен для управления изолированными организационными единицами (тенантами) внутри инфраструктуры Cloud Director. Он обеспечивает создание, модификацию и администрирование организаций, предоставление им облачных ресурсов, а также контроль уровня доступа. Сервис используется для организации рабочих окружений потребителей, управления жизненным циклом организаций и их сетевой инфраструктурой.

### Доступные операции

**create** — Создание новой организации с заданными характеристиками и типом доступа.
**delete** — Удаление организации после перехода в состояние suspend; приводит к удалению всех связанных сущностей.
**modify** — Изменение параметров внутри организации (на текущий момент поддерживается изменение ipSpaces).
**suspend** — Заморозка организации, ограничение возможности изменения и добавления сущностей.
**resume** — Разморозка организации, восстановление функций управления.

---

## 2. Параметры развертывания

Параметры входных данных операции **create**:

### Платформа для развертывания
Описание: платформа, на которой будет создана организация.
Пример значения: `ngcloud.ru`.

### Тип организации
Описание: тип создаваемой организации.
Варианты:
- `iaas` — организация с прямым доступом к облаку и авторизацией через Keycloak.
- `saas` — организация под управлением Nubes, без прямого доступа к облаку.

---

## 3. Рекомендованные характеристики

### Тестовое окружение
- Тип организации: `iaas` для обеспечения полного доступа к облачным ресурсам и самостоятельного управления.

### Промышленное окружение
- Тип организации: `saas` (упрощённая модель использования).

---

## 4. Выходные параметры

Услуга предоставляет следующие выходные параметры (формируются в процессе операций):

### Идентификатор организации
Уникальный идентификатор созданной организации. Используется для всех дальнейших API-операций.

### Статус организации
Отражает текущее состояние: active, suspended, modifying, deleting.

### Параметры сети
Выходные данные при наличии ipSpaces: список выделенных внешних IP, имя ip_space, количество IP.

---

## 5. Дополнительная информация

- Для конфигурации внешних IP внутри организации необходимо предварительно создать:
-- хотя бы один **Виртуальный датацентр (VDC)**;
-- хотя бы один **Сетевой шлюз периметра (Edge Gateway)**, привязанный к этой организации.
- Удаление организации возможно только через 14 дней после перевода в состояние suspend.
- Удаление организации приводит к удалению всех связанных сущностей: VDC, Edge Gateway, пулов IP, сетей, ВМок и иных объектов.
- Операция suspend не останавливает виртуальные машины, но блокирует любые изменения инфраструктуры внутри организации.
- Для iaas-организаций доступ осуществляется через Keycloak.

+
diff --git a/universal_rebuild/docs-gen/kafka_example.md b/universal_rebuild/docs-gen/kafka_example.md new file mode 100644 index 0000000..6727567 --- /dev/null +++ b/universal_rebuild/docs-gen/kafka_example.md @@ -0,0 +1,50 @@ +# Resource nubes_kafka + +Service ID: `116` + +Service Name: ApacheKafka + +[Manual](kafka.md) | [Create params](kafka_params_create.md) | [Modify params](kafka_params_modify.md) | [Output params](kafka_outputs.md) | [Operations](kafka_ops.md) | [Example](kafka_example.md) + +## Copy-ready manifest (`kafka_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_kafka" "baza" { + resource_instances = 1 # Пример: `2` + resource_memory = 1 # Пример: `2048` + resource_cpu = 1 # Пример: `2000` + resource_disk = 1 # Пример: `20` + resource_realm = "TODO" # Выбрать платформу из списка + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + need_external_address_master = false # Флаг, определяющий, нужно ли выделять внешний IP для доступа к master-брокеру. Пример: `true` или `false` +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_kafka.baza.state_params["имя_ключа"] +nubes_kafka.baza.state_out["имя_ключа"] +nubes_kafka.baza.state_params_flat["имя_ключа"] +nubes_kafka.baza.state_out_flat["имя_ключа"] +nubes_kafka.baza.vault_secrets["имя_ключа"] +nubes_kafka.baza.vault_url +nubes_kafka.baza.vault_user_path +nubes_kafka.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/kafka_ops.md b/universal_rebuild/docs-gen/kafka_ops.md new file mode 100644 index 0000000..d21d9b4 --- /dev/null +++ b/universal_rebuild/docs-gen/kafka_ops.md @@ -0,0 +1,21 @@ +# Resource nubes_kafka + +Service ID: `116` + +Service Name: ApacheKafka + +[Manual](kafka.md) | [Create params](kafka_params_create.md) | [Modify params](kafka_params_modify.md) | [Output params](kafka_outputs.md) | [Operations](kafka_ops.md) | [Example](kafka_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](kafka_params_create.md) +- `create_topic` — # Инструкция по управлению топиками Apache Kafka через платформу ## 1. Общая информация --- Топик — это основная сущность в Apache Kafka, предназначенная для приёма сообщений от продюсеров и передачи их консюмерам. Платформа позволяет создавать, удалять и изменять параметры топиков без прямого доступа к брокерам, обеспечивая удобное управление через интерфейс или API. --- ## Доступные операции - **create_topic** — Создание топика - **modify_topic** — Модификация топика - **delete_topic** — Удаление топика --- ## 2. Параметры создания топика Ниже перечислены параметры, которые необходимо указать при создании нового топика: * **Имя топика** Название топика. Должно быть уникальным в пределах кластера. Пример: `orders-events`. * **Партиции** Количество партиций топика. Рекомендуется выбирать с учётом уровня параллелизма потребителей и предполагаемой нагрузки. Пример: `6`. Здесь важно рассказать о том как происходит расчет оптимального количества Обратите внимание: уменьшить количество партиций после создания невозможно, поэтому лучше закладывать небольшой запас на будущий рост нагрузки. * **Реплики** Количество реплик для каждой партиции. Обычно равно количеству доступных брокеров или меньше. Пример: `3`. --- ## 4. Параметры модификации топика Для уже существующих топиков можно изменять параметры. Все параметры являются опциональными: * **Имя топика** Название топика. Пример: `orders-events`. * **Партиции** Новое количество партиций. Пример: `12`. * **Реплики** Новое количество реплик. Пример: `2`. --- ## 5. Рекомендации * Планируйте количество партиций с запасом — уменьшение их числа невозможно. * Количество реплик должно соответствовать требуемому уровню отказоустойчивости, но не превышать количество брокеров. * Изменение параметров топика в рабочем окружении может временно влиять на производительность. Рекомендуется проводить крупные изменения в периоды минимальной нагрузки. ---. См. [nubes_kafka_topic](kafka_topic.md) +- `create_user` — # Инструкция по управлению пользователями Apache Kafka. --- ## 1. Общая информация Пользователи в Apache Kafka используются для аутентификации и авторизации при подключении к кластеру. Платформа позволяет создавать, удалять и изменять пользователей без прямого доступа к брокерам, а также настраивать права доступа к топикам и группам. Это обеспечивает централизованное и безопасное управление доступом к ресурсам Kafka. --- ## Доступные операции - **create_user** — Создание пользователя - **modify_user** — Модификация пользователя - **delete_user** — Удаление пользователя --- ## 2. Параметры создания пользователя Ниже перечислены параметры, которые необходимо указать при создании нового пользователя: * **Имя пользователя** Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав. Пример: `username-admin` * **Топик** Название топика, к которому будут назначены права для данного пользователя. Пример: `orders-events`. Использовать маску нельзя (`orders*`), только полное название или `*`. * **Операции** Список разрешённых операций на указанном топике. Пример: `Describe, Read, Write` * **Группа** Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп. Пример: `order-consumers`. * **Разрешённые хосты** Список хостов или подсетей, с которых разрешено подключение пользователя. Пример: `192.168.1.0/24` или `*`. --- ## 3. Параметры модификации пользователя Ниже перечислены параметры, которые необходимо указать при модификации пользователя: * **Имя пользователя** Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав. Пример: `username-admin` * **Топик** Название топика, к которому будут назначены права для данного пользователя. Пример: `orders-events`. Использовать маску нельзя (`orders*`), только полное название или `*`. * **Операции** Список разрешённых операций на указанном топике. Пример: `Describe, Read, Write` * **Группа** Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп. Пример: `order-consumers`. * **Разрешённые хосты** Список хостов или подсетей, с которых разрешено подключение пользователя. Пример: `192.168.1.0/24` или `*`. --- ## 4. Параметры удалении пользователя Ниже перечислены параметры, которые необходимо указать при удалении пользователя: * **Имя пользователя** Имя удаляемого пользователя. Пример: `username-admin` ## 5. Выходные параметры После успешного создания пользователя платформа возвращает параметры, необходимые для подключения: * **ca.crt** Корневой сертификат (Certificate Authority), используемый для проверки подлинности сервера при TLS-подключении. Файл содержит публичный ключ удостоверяющего центра, которому доверяют брокеры и клиенты. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo '<содержание поля>' | base64 -d > <название>.crt ``` * **ca.p12** PKCS#12-хранилище с корневым сертификатом (Certificate Authority), используемое для проверки подлинности сервера при TLS-подключении. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo '<содержание поля>' | base64 -d > <название>.p12 ``` * **ca.password** Пароль для доступа к хранилищу `ca.p12`. Выдаеться в чистом виде. Раскодировать не нужно. * **user.crt** Клиентский сертификат, подтверждающий личность пользователя при подключении к Kafka. Используется совместно с приватным ключом `user.key` для аутентификации. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo '<содержание поля>' | base64 -d > <название>.crt ``` * **user.key** Приватный ключ пользователя, применяемый для установления защищённого TLS-соединения и подтверждения подлинности. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo '<содержание поля>' | base64 -d > <название>.key ``` * **user.p12** PKCS#12-хранилище с клиентским сертификатом и приватным ключом, предназначенное для аутентификации пользователя в Kafka. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo "<содержание поля>" | base64 -d > <название>.p12 ``` * **user.password** Пароль для доступа к хранилищу `user.p12`. Выдаеться в чистом виде. Раскодировать не нужно. Эти параметры используются для настройки TLS-подключения. --- ## 6. Пример конфигурации клиента внутри кластера Пример пода: ```yaml apiVersion: v1 kind: Pod metadata: name: kafka-4 spec: volumes: - name: work emptyDir: {} containers: - name: kcat image: quay.io/strimzi/kafka:latest-kafka-4.0.0 command: ["sleep", "5600"] volumeMounts: - name: work mountPath: /work restartPolicy: Never ``` Создаём под и сохраняем сертификаты: ```bash kubectl cp user.p12 kafka-4:/work/ kubectl cp ca.p12 kafka-4:/work/ ``` Создаём файлы конфигурации: ```bash cat > /work/user-read.properties <<'EOF' security.protocol=SSL ssl.keystore.type=PKCS12 ssl.keystore.location=/work/user.p12 ssl.keystore.password= ssl.truststore.type=PKCS12 ssl.truststore.location=/work/ca.p12 ssl.truststore.password= EOF ``` ```bash cat > /work/user-write.properties <<'EOF' security.protocol=SSL ssl.keystore.type=PKCS12 ssl.keystore.location=/work/user-write.p12 ssl.keystore.password= ssl.truststore.type=PKCS12 ssl.truststore.location=/work/ca.p12 ssl.truststore.password= EOF ``` Листинг доступных топиков: ```bash /opt/kafka/bin/kafka-topics.sh \ --bootstrap-server kafkak8s-bootstrap-external:9093 \ --command-config /work/user-read.properties \ --list ``` Запись сообщений: ```bash /opt/kafka/bin/kafka-console-producer.sh \ --bootstrap-server <адрес сервис брокера>:9093 \ --topic \ --producer.config /work/user-write.properties ``` Чтение сообщений: ```bash /opt/kafka/bin/kafka-console-consumer.sh \ --bootstrap-server <адрес сервис брокера>:9093 \ --topic \ --from-beginning \ --group \ --consumer.config /work/user-read.properties \ --max-messages 50 ``` --- ## 7. Пример внешнего подключения с использованием **kcat** **Листинг топиков** ```bash kcat -b :9093 \ -L \ -X security.protocol=SSL \ -X ssl.ca.location=./ca.crt \ -X ssl.certificate.location=./user-read.crt \ -X ssl.key.location=./user-read.key \ -X ssl.endpoint.identification.algorithm=none ``` **Запись сообщения** ```bash echo "hello from kcat" | kcat -P \ -b :9093 \ -t write-test \ -X security.protocol=SSL \ -X ssl.ca.location=./ca.crt \ -X ssl.certificate.location=./user-write.crt \ -X ssl.key.location=./user-write.key \ -X ssl.endpoint.identification.algorithm=none ``` **Чтение сообщений** ```bash kcat -C \ -b :9093 \ -t write-test \ -o beginning \ -q \ -X security.protocol=SSL \ -X ssl.ca.location=./ca.crt \ -X ssl.certificate.location=./user-read.crt \ -X ssl.key.location=./user-read.key \ -X ssl.endpoint.identification.algorithm=none ``` --- ## 9. Рекомендации * Минимизируйте набор разрешённых операций для повышения безопасности. * Используйте отдельные учётные записи для продюсеров, консюмеров и системных сервисов. * Ограничивайте доступ по IP или подсетям с помощью параметра **Разрешённые хосты**. * После изменения прав или групп пользователя рекомендуется проверить подключение и доступ к топикам. ---. См. [nubes_kafka_user](kafka_user.md) +- `delete` +- `delete_topic` — . См. [nubes_kafka_topic](kafka_topic.md) +- `delete_user` — # Инструкция по управлению пользователями Apache Kafka. --- ## 1. Общая информация Пользователи в Apache Kafka используются для аутентификации и авторизации при подключении к кластеру. Платформа позволяет создавать, удалять и изменять пользователей без прямого доступа к брокерам, а также настраивать права доступа к топикам и группам. Это обеспечивает централизованное и безопасное управление доступом к ресурсам Kafka. --- ## Доступные операции - **create_user** — Создание пользователя - **modify_user** — Модификация пользователя - **delete_user** — Удаление пользователя --- ## 2. Параметры создания пользователя Ниже перечислены параметры, которые необходимо указать при создании нового пользователя: * **Имя пользователя** Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав. Пример: `username-admin` * **Топик** Название топика, к которому будут назначены права для данного пользователя. Пример: `orders-events`. Использовать маску нельзя (`orders*`), только полное название или `*`. * **Операции** Список разрешённых операций на указанном топике. Пример: `Describe, Read, Write` * **Группа** Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп. Пример: `order-consumers`. * **Разрешённые хосты** Список хостов или подсетей, с которых разрешено подключение пользователя. Пример: `192.168.1.0/24` или `*`. --- ## 3. Параметры модификации пользователя Ниже перечислены параметры, которые необходимо указать при модификации пользователя: * **Имя пользователя** Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав. Пример: `username-admin` * **Топик** Название топика, к которому будут назначены права для данного пользователя. Пример: `orders-events`. Использовать маску нельзя (`orders*`), только полное название или `*`. * **Операции** Список разрешённых операций на указанном топике. Пример: `Describe, Read, Write` * **Группа** Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп. Пример: `order-consumers`. * **Разрешённые хосты** Список хостов или подсетей, с которых разрешено подключение пользователя. Пример: `192.168.1.0/24` или `*`. --- ## 4. Параметры удалении пользователя Ниже перечислены параметры, которые необходимо указать при удалении пользователя: * **Имя пользователя** Имя удаляемого пользователя. Пример: `username-admin` ## 5. Выходные параметры После успешного создания пользователя платформа возвращает параметры, необходимые для подключения: * **ca.crt** Корневой сертификат (Certificate Authority), используемый для проверки подлинности сервера при TLS-подключении. Файл содержит публичный ключ удостоверяющего центра, которому доверяют брокеры и клиенты. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo '<содержание поля>' | base64 -d > <название>.crt ``` * **ca.p12** PKCS#12-хранилище с корневым сертификатом (Certificate Authority), используемое для проверки подлинности сервера при TLS-подключении. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo '<содержание поля>' | base64 -d > <название>.p12 ``` * **ca.password** Пароль для доступа к хранилищу `ca.p12`. Выдаеться в чистом виде. Раскодировать не нужно. * **user.crt** Клиентский сертификат, подтверждающий личность пользователя при подключении к Kafka. Используется совместно с приватным ключом `user.key` для аутентификации. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo '<содержание поля>' | base64 -d > <название>.crt ``` * **user.key** Приватный ключ пользователя, применяемый для установления защищённого TLS-соединения и подтверждения подлинности. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo '<содержание поля>' | base64 -d > <название>.key ``` * **user.p12** PKCS#12-хранилище с клиентским сертификатом и приватным ключом, предназначенное для аутентификации пользователя в Kafka. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo "<содержание поля>" | base64 -d > <название>.p12 ``` * **user.password** Пароль для доступа к хранилищу `user.p12`. Выдаеться в чистом виде. Раскодировать не нужно. Эти параметры используются для настройки TLS-подключения. --- ## 6. Пример конфигурации клиента внутри кластера Пример пода: ```yaml apiVersion: v1 kind: Pod metadata: name: kafka-4 spec: volumes: - name: work emptyDir: {} containers: - name: kcat image: quay.io/strimzi/kafka:latest-kafka-4.0.0 command: ["sleep", "5600"] volumeMounts: - name: work mountPath: /work restartPolicy: Never ``` Создаём под и сохраняем сертификаты: ```bash kubectl cp user.p12 kafka-4:/work/ kubectl cp ca.p12 kafka-4:/work/ ``` Создаём файлы конфигурации: ```bash cat > /work/user-read.properties <<'EOF' security.protocol=SSL ssl.keystore.type=PKCS12 ssl.keystore.location=/work/user.p12 ssl.keystore.password= ssl.truststore.type=PKCS12 ssl.truststore.location=/work/ca.p12 ssl.truststore.password= EOF ``` ```bash cat > /work/user-write.properties <<'EOF' security.protocol=SSL ssl.keystore.type=PKCS12 ssl.keystore.location=/work/user-write.p12 ssl.keystore.password= ssl.truststore.type=PKCS12 ssl.truststore.location=/work/ca.p12 ssl.truststore.password= EOF ``` Листинг доступных топиков: ```bash /opt/kafka/bin/kafka-topics.sh \ --bootstrap-server kafkak8s-bootstrap-external:9093 \ --command-config /work/user-read.properties \ --list ``` Запись сообщений: ```bash /opt/kafka/bin/kafka-console-producer.sh \ --bootstrap-server <адрес сервис брокера>:9093 \ --topic \ --producer.config /work/user-write.properties ``` Чтение сообщений: ```bash /opt/kafka/bin/kafka-console-consumer.sh \ --bootstrap-server <адрес сервис брокера>:9093 \ --topic \ --from-beginning \ --group \ --consumer.config /work/user-read.properties \ --max-messages 50 ``` --- ## 7. Пример внешнего подключения с использованием **kcat** **Листинг топиков** ```bash kcat -b :9093 \ -L \ -X security.protocol=SSL \ -X ssl.ca.location=./ca.crt \ -X ssl.certificate.location=./user-read.crt \ -X ssl.key.location=./user-read.key \ -X ssl.endpoint.identification.algorithm=none ``` **Запись сообщения** ```bash echo "hello from kcat" | kcat -P \ -b :9093 \ -t write-test \ -X security.protocol=SSL \ -X ssl.ca.location=./ca.crt \ -X ssl.certificate.location=./user-write.crt \ -X ssl.key.location=./user-write.key \ -X ssl.endpoint.identification.algorithm=none ``` **Чтение сообщений** ```bash kcat -C \ -b :9093 \ -t write-test \ -o beginning \ -q \ -X security.protocol=SSL \ -X ssl.ca.location=./ca.crt \ -X ssl.certificate.location=./user-read.crt \ -X ssl.key.location=./user-read.key \ -X ssl.endpoint.identification.algorithm=none ``` --- ## 9. Рекомендации * Минимизируйте набор разрешённых операций для повышения безопасности. * Используйте отдельные учётные записи для продюсеров, консюмеров и системных сервисов. * Ограничивайте доступ по IP или подсетям с помощью параметра **Разрешённые хосты**. * После изменения прав или групп пользователя рекомендуется проверить подключение и доступ к топикам. ---. См. [nubes_kafka_user](kafka_user.md) +- `modify` — Изменение кластера. Параметры: [Modify params](kafka_params_modify.md) +- `modify_topic` — # Инструкция по управлению топиками Apache Kafka через платформу ## 1. Общая информация --- Топик — это основная сущность в Apache Kafka, предназначенная для приёма сообщений от продюсеров и передачи их консюмерам. Платформа позволяет создавать, удалять и изменять параметры топиков без прямого доступа к брокерам, обеспечивая удобное управление через интерфейс или API. --- ## Доступные операции - **create_topic** — Создание топика - **modify_topic** — Модификация топика - **delete_topic** — Удаление топика --- ## 2. Параметры создания топика Ниже перечислены параметры, которые необходимо указать при создании нового топика: * **Имя топика** Название топика. Должно быть уникальным в пределах кластера. Пример: `orders-events`. * **Партиции** Количество партиций топика. Рекомендуется выбирать с учётом уровня параллелизма потребителей и предполагаемой нагрузки. Пример: `6`. Здесь важно рассказать о том как происходит расчет оптимального количества Обратите внимание: уменьшить количество партиций после создания невозможно, поэтому лучше закладывать небольшой запас на будущий рост нагрузки. * **Реплики** Количество реплик для каждой партиции. Обычно равно количеству доступных брокеров или меньше. Пример: `3`. --- ## 4. Параметры модификации топика Для уже существующих топиков можно изменять параметры. Все параметры являются опциональными: * **Имя топика** Название топика. Пример: `orders-events`. * **Партиции** Новое количество партиций. Пример: `12`. * **Реплики** Новое количество реплик. Пример: `2`. --- ## 5. Рекомендации * Планируйте количество партиций с запасом — уменьшение их числа невозможно. * Количество реплик должно соответствовать требуемому уровню отказоустойчивости, но не превышать количество брокеров. * Изменение параметров топика в рабочем окружении может временно влиять на производительность. Рекомендуется проводить крупные изменения в периоды минимальной нагрузки. ---. См. [nubes_kafka_topic](kafka_topic.md) +- `modify_user` — # Инструкция по управлению пользователями Apache Kafka. --- ## 1. Общая информация Пользователи в Apache Kafka используются для аутентификации и авторизации при подключении к кластеру. Платформа позволяет создавать, удалять и изменять пользователей без прямого доступа к брокерам, а также настраивать права доступа к топикам и группам. Это обеспечивает централизованное и безопасное управление доступом к ресурсам Kafka. --- ## Доступные операции - **create_user** — Создание пользователя - **modify_user** — Модификация пользователя - **delete_user** — Удаление пользователя --- ## 2. Параметры создания пользователя Ниже перечислены параметры, которые необходимо указать при создании нового пользователя: * **Имя пользователя** Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав. Пример: `username-admin` * **Топик** Название топика, к которому будут назначены права для данного пользователя. Пример: `orders-events`. Использовать маску нельзя (`orders*`), только полное название или `*`. * **Операции** Список разрешённых операций на указанном топике. Пример: `Describe, Read, Write` * **Группа** Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп. Пример: `order-consumers`. * **Разрешённые хосты** Список хостов или подсетей, с которых разрешено подключение пользователя. Пример: `192.168.1.0/24` или `*`. --- ## 3. Параметры модификации пользователя Ниже перечислены параметры, которые необходимо указать при модификации пользователя: * **Имя пользователя** Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав. Пример: `username-admin` * **Топик** Название топика, к которому будут назначены права для данного пользователя. Пример: `orders-events`. Использовать маску нельзя (`orders*`), только полное название или `*`. * **Операции** Список разрешённых операций на указанном топике. Пример: `Describe, Read, Write` * **Группа** Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп. Пример: `order-consumers`. * **Разрешённые хосты** Список хостов или подсетей, с которых разрешено подключение пользователя. Пример: `192.168.1.0/24` или `*`. --- ## 4. Параметры удалении пользователя Ниже перечислены параметры, которые необходимо указать при удалении пользователя: * **Имя пользователя** Имя удаляемого пользователя. Пример: `username-admin` ## 5. Выходные параметры После успешного создания пользователя платформа возвращает параметры, необходимые для подключения: * **ca.crt** Корневой сертификат (Certificate Authority), используемый для проверки подлинности сервера при TLS-подключении. Файл содержит публичный ключ удостоверяющего центра, которому доверяют брокеры и клиенты. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo '<содержание поля>' | base64 -d > <название>.crt ``` * **ca.p12** PKCS#12-хранилище с корневым сертификатом (Certificate Authority), используемое для проверки подлинности сервера при TLS-подключении. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo '<содержание поля>' | base64 -d > <название>.p12 ``` * **ca.password** Пароль для доступа к хранилищу `ca.p12`. Выдаеться в чистом виде. Раскодировать не нужно. * **user.crt** Клиентский сертификат, подтверждающий личность пользователя при подключении к Kafka. Используется совместно с приватным ключом `user.key` для аутентификации. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo '<содержание поля>' | base64 -d > <название>.crt ``` * **user.key** Приватный ключ пользователя, применяемый для установления защищённого TLS-соединения и подтверждения подлинности. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo '<содержание поля>' | base64 -d > <название>.key ``` * **user.p12** PKCS#12-хранилище с клиентским сертификатом и приватным ключом, предназначенное для аутентификации пользователя в Kafka. Выдаеться в формате base64 для получения файла сертификата использовать команду ```bash echo "<содержание поля>" | base64 -d > <название>.p12 ``` * **user.password** Пароль для доступа к хранилищу `user.p12`. Выдаеться в чистом виде. Раскодировать не нужно. Эти параметры используются для настройки TLS-подключения. --- ## 6. Пример конфигурации клиента внутри кластера Пример пода: ```yaml apiVersion: v1 kind: Pod metadata: name: kafka-4 spec: volumes: - name: work emptyDir: {} containers: - name: kcat image: quay.io/strimzi/kafka:latest-kafka-4.0.0 command: ["sleep", "5600"] volumeMounts: - name: work mountPath: /work restartPolicy: Never ``` Создаём под и сохраняем сертификаты: ```bash kubectl cp user.p12 kafka-4:/work/ kubectl cp ca.p12 kafka-4:/work/ ``` Создаём файлы конфигурации: ```bash cat > /work/user-read.properties <<'EOF' security.protocol=SSL ssl.keystore.type=PKCS12 ssl.keystore.location=/work/user.p12 ssl.keystore.password= ssl.truststore.type=PKCS12 ssl.truststore.location=/work/ca.p12 ssl.truststore.password= EOF ``` ```bash cat > /work/user-write.properties <<'EOF' security.protocol=SSL ssl.keystore.type=PKCS12 ssl.keystore.location=/work/user-write.p12 ssl.keystore.password= ssl.truststore.type=PKCS12 ssl.truststore.location=/work/ca.p12 ssl.truststore.password= EOF ``` Листинг доступных топиков: ```bash /opt/kafka/bin/kafka-topics.sh \ --bootstrap-server kafkak8s-bootstrap-external:9093 \ --command-config /work/user-read.properties \ --list ``` Запись сообщений: ```bash /opt/kafka/bin/kafka-console-producer.sh \ --bootstrap-server <адрес сервис брокера>:9093 \ --topic \ --producer.config /work/user-write.properties ``` Чтение сообщений: ```bash /opt/kafka/bin/kafka-console-consumer.sh \ --bootstrap-server <адрес сервис брокера>:9093 \ --topic \ --from-beginning \ --group \ --consumer.config /work/user-read.properties \ --max-messages 50 ``` --- ## 7. Пример внешнего подключения с использованием **kcat** **Листинг топиков** ```bash kcat -b :9093 \ -L \ -X security.protocol=SSL \ -X ssl.ca.location=./ca.crt \ -X ssl.certificate.location=./user-read.crt \ -X ssl.key.location=./user-read.key \ -X ssl.endpoint.identification.algorithm=none ``` **Запись сообщения** ```bash echo "hello from kcat" | kcat -P \ -b :9093 \ -t write-test \ -X security.protocol=SSL \ -X ssl.ca.location=./ca.crt \ -X ssl.certificate.location=./user-write.crt \ -X ssl.key.location=./user-write.key \ -X ssl.endpoint.identification.algorithm=none ``` **Чтение сообщений** ```bash kcat -C \ -b :9093 \ -t write-test \ -o beginning \ -q \ -X security.protocol=SSL \ -X ssl.ca.location=./ca.crt \ -X ssl.certificate.location=./user-read.crt \ -X ssl.key.location=./user-read.key \ -X ssl.endpoint.identification.algorithm=none ``` --- ## 9. Рекомендации * Минимизируйте набор разрешённых операций для повышения безопасности. * Используйте отдельные учётные записи для продюсеров, консюмеров и системных сервисов. * Ограничивайте доступ по IP или подсетям с помощью параметра **Разрешённые хосты**. * После изменения прав или групп пользователя рекомендуется проверить подключение и доступ к топикам. ---. См. [nubes_kafka_user](kafka_user.md) +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/kafka_outputs.md b/universal_rebuild/docs-gen/kafka_outputs.md new file mode 100644 index 0000000..7a36056 --- /dev/null +++ b/universal_rebuild/docs-gen/kafka_outputs.md @@ -0,0 +1,54 @@ +# Resource nubes_kafka + +Service ID: `116` + +Service Name: ApacheKafka + +[Manual](kafka.md) | [Create params](kafka_params_create.md) | [Modify params](kafka_params_modify.md) | [Output params](kafka_outputs.md) | [Operations](kafka_ops.md) | [Example](kafka_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["externalConnect"]` +- `state_out_flat["externalConnect.bootstrap"]` +- `state_out_flat["externalConnect.bootstrap.fqdn"]` +- `state_out_flat["externalConnect.bootstrap.ip"]` +- `state_out_flat["externalConnect.bootstrap.isExternal"]` +- `state_out_flat["externalConnect.bootstrap.uuid"]` +- `state_out_flat["internalConnect"]` +- `state_out_flat["kafkaTopics"]` +- `state_out_flat["kafkaTopics.test-events"]` +- `state_out_flat["kafkaTopics.test-events.partitions"]` +- `state_out_flat["kafkaTopics.test-events.replicas"]` +- `state_out_flat["kafkaUsers"]` +- `state_out_flat["kafkaUsers.usertest"]` +- `state_out_flat["kafkaUsers.usertest.accessHosts"]` +- `state_out_flat["kafkaUsers.usertest.group"]` +- `state_out_flat["kafkaUsers.usertest.nameTopic"]` +- `state_out_flat["kafkaUsers.usertest.operations"]` +- `state_out_flat["monitoring"]` +- `state_out_flat["monitoring.allDashboards"]` +- `state_out_flat["monitoring.base"]` +- `state_out_flat["monitoring.base.url"]` +- `state_out_flat["monitoring.loki"]` +- `state_out_flat["monitoring.loki.url"]` + +### `vault_secrets` ключи + +- `vault_secrets["users"]` + diff --git a/universal_rebuild/docs-gen/kafka_params.md b/universal_rebuild/docs-gen/kafka_params.md new file mode 100644 index 0000000..25cb573 --- /dev/null +++ b/universal_rebuild/docs-gen/kafka_params.md @@ -0,0 +1,12 @@ +# Resource nubes_kafka + +Service ID: `116` + +Service Name: ApacheKafka + +[Manual](kafka.md) | [Create params](kafka_params_create.md) | [Modify params](kafka_params_modify.md) | [Output params](kafka_outputs.md) | [Operations](kafka_ops.md) | [Example](kafka_example.md) + +## Parameters + +- [Create params](kafka_params_create.md) +- [Modify params](kafka_params_modify.md) diff --git a/universal_rebuild/docs-gen/kafka_params_create.md b/universal_rebuild/docs-gen/kafka_params_create.md new file mode 100644 index 0000000..1a43a4e --- /dev/null +++ b/universal_rebuild/docs-gen/kafka_params_create.md @@ -0,0 +1,41 @@ +# Resource nubes_kafka + +Service ID: `116` + +Service Name: ApacheKafka + +[Manual](kafka.md) | [Create params](kafka_params_create.md) | [Modify params](kafka_params_modify.md) | [Output params](kafka_outputs.md) | [Operations](kafka_ops.md) | [Example](kafka_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
461resource_instancesintegerПример: `2`minvalue=1; value_list=1, 2, 3, 4, 5
462resource_memoryintegerПример: `2048`minvalue=1000
463resource_cpuintegerПример: `2000`minvalue=1000
464resource_diskintegerПример: `20`
466ip_space_name_masterstringЕсли включен предыдущий параметр, то поле необходимо заполнить. Пример: `internet-no-antiddos-v1`
469resource_realmstringВыбрать платформу из спискаfunc=getAvailableResourceRealms
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + +
IDCodeTypeDefaultDescriptionConstraints
465need_external_address_masterbooleanfalseФлаг, определяющий, нужно ли выделять внешний IP для доступа к master-брокеру. Пример: `true` или `false`value_list=false, true
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/kafka_params_modify.md b/universal_rebuild/docs-gen/kafka_params_modify.md new file mode 100644 index 0000000..e6ff431 --- /dev/null +++ b/universal_rebuild/docs-gen/kafka_params_modify.md @@ -0,0 +1,20 @@ +# Resource nubes_kafka + +Service ID: `116` + +Service Name: ApacheKafka + +[Manual](kafka.md) | [Create params](kafka_params_create.md) | [Modify params](kafka_params_modify.md) | [Output params](kafka_outputs.md) | [Operations](kafka_ops.md) | [Example](kafka_example.md) + +## Modify params + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
501resource_instancesintegerПример: `2`value_list=1, 2, 3, 4, 5
502resource_memoryintegerПример: `2048`minvalue=1000
503resource_cpuПример: `2000`minvalue=1000
504resource_diskintegerПример: `20`
505need_external_address_masterbooleanФлаг, определяющий, нужно ли выделять внешний IP для доступа к master-брокеру. Пример: `true` или `false`value_list=false, true
506ip_space_name_masterstringЕсли включен предыдущий параметр, то поле необходимо заполнить. Пример: `internet-no-antiddos-v1`
diff --git a/universal_rebuild/docs-gen/kafka_topic.md b/universal_rebuild/docs-gen/kafka_topic.md new file mode 100644 index 0000000..e56d01e --- /dev/null +++ b/universal_rebuild/docs-gen/kafka_topic.md @@ -0,0 +1,35 @@ +# Resource nubes_kafka_topic + +Service: `nubes_kafka` (ID: 116) + +[ApacheKafka (основной)](kafka.md) | [Operations](kafka_ops.md) | [Topic](kafka_topic.md) | [Example](kafka_topic_example.md) + +## Create params + +**Обязательные параметры** + + + + + + + +
IDCodeTypeDescriptionConstraints
523name_topicstringПример: `orders-events`
524partitionsintegerЧисло партиций можно увеличить, но уменьшить их нельзя.
525replicasintegerКоличество реплик не может привышать количество реплик брокера
+ +## Modify params + + + + + + + +
IDCodeTypeDescriptionConstraints
526name_topicstringПример: `orders-events`
527partitionsЧисло партиций на кластер ≤ 100 × (число брокеров) × (фактор репликации). Пример `50`
528replicasКоличество партиций ≤ (число брокеров). Пример `2`
+ +## Delete params + + + + + +
IDCodeTypeDescriptionConstraints
529name_topicstringНеобходимо выбрать топик, который необходимо удалить
diff --git a/universal_rebuild/docs-gen/kafka_topic_example.md b/universal_rebuild/docs-gen/kafka_topic_example.md new file mode 100644 index 0000000..179feae --- /dev/null +++ b/universal_rebuild/docs-gen/kafka_topic_example.md @@ -0,0 +1,33 @@ +# Resource nubes_kafka_topic — Example + +Service: `nubes_kafka` (ID: 116) + +[ApacheKafka (основной)](kafka.md) | [Operations](kafka_ops.md) | [Topic](kafka_topic.md) | [Example](kafka_topic_example.md) + +## Copy-ready manifest (`kafka_topic_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_kafka должен быть создан заранее +# resource "nubes_kafka" "baza" { ... } + +resource "nubes_kafka_topic" "example" { + kafka_id = nubes_kafka.baza.id + name_topic = "TODO" # Пример: `orders-events` + partitions = 1 # Число партиций можно увеличить, но уменьшить их нельзя. + replicas = 1 # Количество реплик не может привышать количество реплик брокера +} +``` diff --git a/universal_rebuild/docs-gen/kafka_user.md b/universal_rebuild/docs-gen/kafka_user.md new file mode 100644 index 0000000..46a21d0 --- /dev/null +++ b/universal_rebuild/docs-gen/kafka_user.md @@ -0,0 +1,39 @@ +# Resource nubes_kafka_user + +Service: `nubes_kafka` (ID: 116) + +[ApacheKafka (основной)](kafka.md) | [Operations](kafka_ops.md) | [User](kafka_user.md) | [Example](kafka_user_example.md) + +## Create params + +**Обязательные параметры** + + + + + + + + + +
IDCodeTypeDescriptionConstraints
530usernamestringПример: `username-admin`
531name_topicstringПример: `orders-events`. Использовать маску нельзя(`orders*`), только полное название или `*`
532operationsstringПример: `Create, Describe, Read, Write`
533groupstringПример: `order-consumers` или `*`
534access_hostsstringПример: `192.168.1.0/24` или `*`
+ +## Modify params + + + + + + + + + +
IDCodeTypeDescriptionConstraints
535name_topicstringПример: `orders-events`. Использовать маску нельзя(`orders*`), только полное название или `*`
536operationsstringПример: `Create, Describe, Read, Write`
537groupstringПример: `order-consumers` или `*`
538access_hostsstringПример: `192.168.1.0/24` или `*`
539usernamestringПример: `username-admin`
+ +## Delete params + + + + + +
IDCodeTypeDescriptionConstraints
540usernamestringПример: `username-admin`
diff --git a/universal_rebuild/docs-gen/kafka_user_example.md b/universal_rebuild/docs-gen/kafka_user_example.md new file mode 100644 index 0000000..9e73f3a --- /dev/null +++ b/universal_rebuild/docs-gen/kafka_user_example.md @@ -0,0 +1,35 @@ +# Resource nubes_kafka_user — Example + +Service: `nubes_kafka` (ID: 116) + +[ApacheKafka (основной)](kafka.md) | [Operations](kafka_ops.md) | [User](kafka_user.md) | [Example](kafka_user_example.md) + +## Copy-ready manifest (`kafka_user_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_kafka должен быть создан заранее +# resource "nubes_kafka" "baza" { ... } + +resource "nubes_kafka_user" "example" { + kafka_id = nubes_kafka.baza.id + username = "TODO" # Пример: `username-admin` + name_topic = "TODO" # Пример: `orders-events`. Использовать маску нельзя(`orders*`), только полное название или `*` + operations = "TODO" # Пример: `Create, Describe, Read, Write` + group = "TODO" # Пример: `order-consumers` или `*` + access_hosts = "TODO" # Пример: `192.168.1.0/24` или `*` +} +``` diff --git a/universal_rebuild/docs-gen/lucee.md b/universal_rebuild/docs-gen/lucee.md new file mode 100644 index 0000000..ca3542d --- /dev/null +++ b/universal_rebuild/docs-gen/lucee.md @@ -0,0 +1,13 @@ +# Resource nubes_lucee + +Service ID: `94` + +Service Name: Lucee + +[Manual](lucee.md) | [Create params](lucee_params_create.md) | [Modify params](lucee_params_modify.md) | [Output params](lucee_outputs.md) | [Operations](lucee_ops.md) | [Example](lucee_example.md) + +## MAN + +
+Manual not available. +
diff --git a/universal_rebuild/docs-gen/lucee_example.md b/universal_rebuild/docs-gen/lucee_example.md new file mode 100644 index 0000000..2595b8a --- /dev/null +++ b/universal_rebuild/docs-gen/lucee_example.md @@ -0,0 +1,49 @@ +# Resource nubes_lucee + +Service ID: `94` + +Service Name: Lucee + +[Manual](lucee.md) | [Create params](lucee_params_create.md) | [Modify params](lucee_params_modify.md) | [Output params](lucee_outputs.md) | [Operations](lucee_ops.md) | [Example](lucee_example.md) + +## Copy-ready manifest (`lucee_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_lucee" "baza" { + startup_configuration = "TODO" + cluster_configuration = "TODO" + access_configuration = "TODO" + app_configuration = "TODO" + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + json_env = {} # Передаётся в формате КЛЮЧ:ЗНАЧЕНИЕ +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_lucee.baza.state_params["имя_ключа"] +nubes_lucee.baza.state_out["имя_ключа"] +nubes_lucee.baza.state_params_flat["имя_ключа"] +nubes_lucee.baza.state_out_flat["имя_ключа"] +nubes_lucee.baza.vault_secrets["имя_ключа"] +nubes_lucee.baza.vault_url +nubes_lucee.baza.vault_user_path +nubes_lucee.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/lucee_ops.md b/universal_rebuild/docs-gen/lucee_ops.md new file mode 100644 index 0000000..a2e0373 --- /dev/null +++ b/universal_rebuild/docs-gen/lucee_ops.md @@ -0,0 +1,18 @@ +# Resource nubes_lucee + +Service ID: `94` + +Service Name: Lucee + +[Manual](lucee.md) | [Create params](lucee_params_create.md) | [Modify params](lucee_params_modify.md) | [Output params](lucee_outputs.md) | [Operations](lucee_ops.md) | [Example](lucee_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](lucee_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](lucee_params_modify.md) +- `reconcile` +- `redeploy` +- `restart` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/lucee_outputs.md b/universal_rebuild/docs-gen/lucee_outputs.md new file mode 100644 index 0000000..838f21d --- /dev/null +++ b/universal_rebuild/docs-gen/lucee_outputs.md @@ -0,0 +1,34 @@ +# Resource nubes_lucee + +Service ID: `94` + +Service Name: Lucee + +[Manual](lucee.md) | [Create params](lucee_params_create.md) | [Modify params](lucee_params_modify.md) | [Output params](lucee_outputs.md) | [Operations](lucee_ops.md) | [Example](lucee_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["connectionUrl"]` +- `state_out_flat["monitoring"]` +- `state_out_flat["monitoring.allDashboards"]` +- `state_out_flat["monitoring.base"]` +- `state_out_flat["monitoring.base.url"]` +- `state_out_flat["monitoring.loki"]` +- `state_out_flat["monitoring.loki.url"]` + diff --git a/universal_rebuild/docs-gen/lucee_params.md b/universal_rebuild/docs-gen/lucee_params.md new file mode 100644 index 0000000..730e3b2 --- /dev/null +++ b/universal_rebuild/docs-gen/lucee_params.md @@ -0,0 +1,12 @@ +# Resource nubes_lucee + +Service ID: `94` + +Service Name: Lucee + +[Manual](lucee.md) | [Create params](lucee_params_create.md) | [Modify params](lucee_params_modify.md) | [Output params](lucee_outputs.md) | [Operations](lucee_ops.md) | [Example](lucee_example.md) + +## Parameters + +- [Create params](lucee_params_create.md) +- [Modify params](lucee_params_modify.md) diff --git a/universal_rebuild/docs-gen/lucee_params_create.md b/universal_rebuild/docs-gen/lucee_params_create.md new file mode 100644 index 0000000..755d619 --- /dev/null +++ b/universal_rebuild/docs-gen/lucee_params_create.md @@ -0,0 +1,39 @@ +# Resource nubes_lucee + +Service ID: `94` + +Service Name: Lucee + +[Manual](lucee.md) | [Create params](lucee_params_create.md) | [Modify params](lucee_params_modify.md) | [Output params](lucee_outputs.md) | [Operations](lucee_ops.md) | [Example](lucee_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + +
IDCodeTypeDescriptionConstraints
1019startup_configurationmap-fixed
1020cluster_configurationmap-fixed
1021access_configurationmap-fixed
1022app_configurationmap-fixed
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + +
IDCodeTypeDefaultDescriptionConstraints
1023json_envmap{}Передаётся в формате КЛЮЧ:ЗНАЧЕНИЕ
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/lucee_params_modify.md b/universal_rebuild/docs-gen/lucee_params_modify.md new file mode 100644 index 0000000..4bda31b --- /dev/null +++ b/universal_rebuild/docs-gen/lucee_params_modify.md @@ -0,0 +1,17 @@ +# Resource nubes_lucee + +Service ID: `94` + +Service Name: Lucee + +[Manual](lucee.md) | [Create params](lucee_params_create.md) | [Modify params](lucee_params_modify.md) | [Output params](lucee_outputs.md) | [Operations](lucee_ops.md) | [Example](lucee_example.md) + +## Modify params + + + + + + + +
IDCodeTypeDescriptionConstraints
1024cluster_configurationmap-fixed
1025app_configurationmap-fixed
1026json_envmapПередаётся в формате КЛЮЧ:ЗНАЧЕНИЕ
diff --git a/universal_rebuild/docs-gen/mariadb.md b/universal_rebuild/docs-gen/mariadb.md new file mode 100644 index 0000000..9161094 --- /dev/null +++ b/universal_rebuild/docs-gen/mariadb.md @@ -0,0 +1,13 @@ +# Resource nubes_mariadb + +Service ID: `115` + +Service Name: Mariadb + +[Manual](mariadb.md) | [Create params](mariadb_params_create.md) | [Modify params](mariadb_params_modify.md) | [Output params](mariadb_outputs.md) | [Operations](mariadb_ops.md) | [Example](mariadb_example.md) + +## MAN + +
+Mariadb кластер. Ресурсная платформа: k8s. Автоматизация: k8s operator.
Автоматическое резервное копирование, ручное восстановление. +
diff --git a/universal_rebuild/docs-gen/mariadb_database.md b/universal_rebuild/docs-gen/mariadb_database.md new file mode 100644 index 0000000..092f130 --- /dev/null +++ b/universal_rebuild/docs-gen/mariadb_database.md @@ -0,0 +1,27 @@ +# Resource nubes_mariadb_database + +Service: `nubes_mariadb` (ID: 115) + +[Mariadb (основной)](mariadb.md) | [Operations](mariadb_ops.md) | [Database](mariadb_database.md) | [Example](mariadb_database_example.md) + +## Create params + +**Обязательные параметры** + +None. + +**Параметры со значением по умолчанию** + + + + + +
IDCodeTypeDefaultDescriptionConstraints
734db_namestringdb-Пример: `db01`regex=^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
+ +## Delete params + + + + + +
IDCodeTypeDescriptionConstraints
745db_namestringВСЕ ДАННЫЕ ВНУТРИ БД БУДУТ УДАЛЕНЫ
diff --git a/universal_rebuild/docs-gen/mariadb_database_example.md b/universal_rebuild/docs-gen/mariadb_database_example.md new file mode 100644 index 0000000..89bbb86 --- /dev/null +++ b/universal_rebuild/docs-gen/mariadb_database_example.md @@ -0,0 +1,33 @@ +# Resource nubes_mariadb_database — Example + +Service: `nubes_mariadb` (ID: 115) + +[Mariadb (основной)](mariadb.md) | [Operations](mariadb_ops.md) | [Database](mariadb_database.md) | [Example](mariadb_database_example.md) + +## Copy-ready manifest (`mariadb_database_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_mariadb должен быть создан заранее +# resource "nubes_mariadb" "baza" { ... } + +resource "nubes_mariadb_database" "example" { + mariadb_id = nubes_mariadb.baza.id + + # Параметры со значением по умолчанию + db_name = "db-" # Пример: `db01` +} +``` diff --git a/universal_rebuild/docs-gen/mariadb_example.md b/universal_rebuild/docs-gen/mariadb_example.md new file mode 100644 index 0000000..626c4b5 --- /dev/null +++ b/universal_rebuild/docs-gen/mariadb_example.md @@ -0,0 +1,48 @@ +# Resource nubes_mariadb + +Service ID: `115` + +Service Name: Mariadb + +[Manual](mariadb.md) | [Create params](mariadb_params_create.md) | [Modify params](mariadb_params_modify.md) | [Output params](mariadb_outputs.md) | [Operations](mariadb_ops.md) | [Example](mariadb_example.md) + +## Copy-ready manifest (`mariadb_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_mariadb" "baza" { + startup_configuration = "TODO" + cluster_configuration = "TODO" + access_configuration = "TODO" + mariadb_configuration = "TODO" + backup_configuration = "TODO" + autoscale_configuration = "TODO" +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_mariadb.baza.state_params["имя_ключа"] +nubes_mariadb.baza.state_out["имя_ключа"] +nubes_mariadb.baza.state_params_flat["имя_ключа"] +nubes_mariadb.baza.state_out_flat["имя_ключа"] +nubes_mariadb.baza.vault_secrets["имя_ключа"] +nubes_mariadb.baza.vault_url +nubes_mariadb.baza.vault_user_path +nubes_mariadb.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/mariadb_ops.md b/universal_rebuild/docs-gen/mariadb_ops.md new file mode 100644 index 0000000..5ae1622 --- /dev/null +++ b/universal_rebuild/docs-gen/mariadb_ops.md @@ -0,0 +1,20 @@ +# Resource nubes_mariadb + +Service ID: `115` + +Service Name: Mariadb + +[Manual](mariadb.md) | [Create params](mariadb_params_create.md) | [Modify params](mariadb_params_modify.md) | [Output params](mariadb_outputs.md) | [Operations](mariadb_ops.md) | [Example](mariadb_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](mariadb_params_create.md) +- `create_database` — . См. [nubes_mariadb_database](mariadb_database.md) +- `create_user` — . См. [nubes_mariadb_user](mariadb_user.md) +- `delete` +- `delete_database` — . См. [nubes_mariadb_database](mariadb_database.md) +- `delete_user` — . См. [nubes_mariadb_user](mariadb_user.md) +- `modify` — Изменение кластера. Параметры: [Modify params](mariadb_params_modify.md) +- `reconcile` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/mariadb_outputs.md b/universal_rebuild/docs-gen/mariadb_outputs.md new file mode 100644 index 0000000..38f0606 --- /dev/null +++ b/universal_rebuild/docs-gen/mariadb_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_mariadb + +Service ID: `115` + +Service Name: Mariadb + +[Manual](mariadb.md) | [Create params](mariadb_params_create.md) | [Modify params](mariadb_params_modify.md) | [Output params](mariadb_outputs.md) | [Operations](mariadb_ops.md) | [Example](mariadb_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/mariadb_params.md b/universal_rebuild/docs-gen/mariadb_params.md new file mode 100644 index 0000000..1d0477b --- /dev/null +++ b/universal_rebuild/docs-gen/mariadb_params.md @@ -0,0 +1,12 @@ +# Resource nubes_mariadb + +Service ID: `115` + +Service Name: Mariadb + +[Manual](mariadb.md) | [Create params](mariadb_params_create.md) | [Modify params](mariadb_params_modify.md) | [Output params](mariadb_outputs.md) | [Operations](mariadb_ops.md) | [Example](mariadb_example.md) + +## Parameters + +- [Create params](mariadb_params_create.md) +- [Modify params](mariadb_params_modify.md) diff --git a/universal_rebuild/docs-gen/mariadb_params_create.md b/universal_rebuild/docs-gen/mariadb_params_create.md new file mode 100644 index 0000000..2bc0c0a --- /dev/null +++ b/universal_rebuild/docs-gen/mariadb_params_create.md @@ -0,0 +1,37 @@ +# Resource nubes_mariadb + +Service ID: `115` + +Service Name: Mariadb + +[Manual](mariadb.md) | [Create params](mariadb_params_create.md) | [Modify params](mariadb_params_modify.md) | [Output params](mariadb_outputs.md) | [Operations](mariadb_ops.md) | [Example](mariadb_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
877startup_configurationmap-fixed
878cluster_configurationmap-fixed
879access_configurationmap-fixed
880mariadb_configurationmap-fixed
881backup_configurationmap-fixed
882autoscale_configurationmap-fixed
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. + +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/mariadb_params_modify.md b/universal_rebuild/docs-gen/mariadb_params_modify.md new file mode 100644 index 0000000..65a66e7 --- /dev/null +++ b/universal_rebuild/docs-gen/mariadb_params_modify.md @@ -0,0 +1,19 @@ +# Resource nubes_mariadb + +Service ID: `115` + +Service Name: Mariadb + +[Manual](mariadb.md) | [Create params](mariadb_params_create.md) | [Modify params](mariadb_params_modify.md) | [Output params](mariadb_outputs.md) | [Operations](mariadb_ops.md) | [Example](mariadb_example.md) + +## Modify params + + + + + + + + + +
IDCodeTypeDescriptionConstraints
883cluster_configurationmap-fixed
884access_configurationmap-fixed
885mariadb_configurationmap-fixed
886backup_configurationmap-fixed
887autoscale_configurationmap-fixed
diff --git a/universal_rebuild/docs-gen/mariadb_user.md b/universal_rebuild/docs-gen/mariadb_user.md new file mode 100644 index 0000000..c590f5e --- /dev/null +++ b/universal_rebuild/docs-gen/mariadb_user.md @@ -0,0 +1,33 @@ +# Resource nubes_mariadb_user + +Service: `nubes_mariadb` (ID: 115) + +[Mariadb (основной)](mariadb.md) | [Operations](mariadb_ops.md) | [User](mariadb_user.md) | [Example](mariadb_user_example.md) + +## Create params + +**Обязательные параметры** + + + + + +
IDCodeTypeDescriptionConstraints
736passwordstringСекрет будет записан в хранилище секретов и не будет отображаться публичноmaxlength=62; minlength=8
+ +**Параметры со значением по умолчанию** + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
735usernamestringuserПример: `myusername`regex=^(?![0-9_])[a-zA-Z_][a-zA-Z0-9_]{0,62}$; maxlength=62; minlength=2
737db_namearray-map-fixed[{}]Если базы не существует - при выполнении операции вернётся ошибка
738access_hostsstring%Пример: `%`
+ +## Delete params + + + + + +
IDCodeTypeDescriptionConstraints
744usernamestringИмя пользователя, созданное через операцию `create_user`
diff --git a/universal_rebuild/docs-gen/mariadb_user_example.md b/universal_rebuild/docs-gen/mariadb_user_example.md new file mode 100644 index 0000000..d939133 --- /dev/null +++ b/universal_rebuild/docs-gen/mariadb_user_example.md @@ -0,0 +1,36 @@ +# Resource nubes_mariadb_user — Example + +Service: `nubes_mariadb` (ID: 115) + +[Mariadb (основной)](mariadb.md) | [Operations](mariadb_ops.md) | [User](mariadb_user.md) | [Example](mariadb_user_example.md) + +## Copy-ready manifest (`mariadb_user_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_mariadb должен быть создан заранее +# resource "nubes_mariadb" "baza" { ... } + +resource "nubes_mariadb_user" "example" { + mariadb_id = nubes_mariadb.baza.id + password = "TODO" # Секрет будет записан в хранилище секретов и не будет отображаться публично + + # Параметры со значением по умолчанию + username = "user" # Пример: `myusername` + db_name = [{}] # Необходимо указать массив существующих баз + access_hosts = "%" # Пример: `%` +} +``` diff --git a/universal_rebuild/docs-gen/mongodb.md b/universal_rebuild/docs-gen/mongodb.md new file mode 100644 index 0000000..3502e9e --- /dev/null +++ b/universal_rebuild/docs-gen/mongodb.md @@ -0,0 +1,13 @@ +# Resource nubes_mongodb + +Service ID: `92` + +Service Name: MongoDB + +[Manual](mongodb.md) | [Create params](mongodb_params_create.md) | [Modify params](mongodb_params_modify.md) | [Output params](mongodb_outputs.md) | [Operations](mongodb_ops.md) | [Example](mongodb_example.md) + +## MAN + +
+# Инструкция по развертыванию MongoDB через платформу

## 1. Общая информация

MongoDB — документоориентированная распределённая база данных, обеспечивающая высокую доступность, горизонтальное масштабирование и гибкую модель хранения.

### Доступные операции с кластером

* **create** — создание базы
* **delete** — удаление базы данных
* **suspend** — остановка базы данных
* **resume** — запуск базы данных
* **modify** — изменение базы данных

### Доступные операции с пользователями

* **create_user** — создание пользователя
* **modify_user** — модификация пользователя
* **delete_user** — удаление пользователя

---

## 2. Параметры развертывания базы данных

Эти параметры необходимо указать при создании базы данных.

### Платформа для развертывания

Среда, в которой будет развернут кластер. Выбирается из предложенного списка.

### Количество узлов

Количество реплик в кластере MongoDB.
Оптимально выбирать нечётное значение, так как это обеспечивает корректный процесс выбора ведущего узла и сохраняет работоспособность базы данных даже при отказе одной из нод.

> **Примечание:** уменьшение количества узлов после создания кластера не рекомендуется.

### Квота памяти пода (MB)

Объём памяти для одного пода в мегабайтах.
Пример: `2048`

### Квота CPU пода (mCPU)

CPU-квота для пода в миликорах (1000 mCPU = 1 vCPU).
Пример: `1000`

### Размер диска для базы данных (GB)

Объём диска для хранения данных в гигабайтах.
Пример: `20`

### Имя ipSpace для публикации внешнего IP

Имя ipSpace, через который будет выделен внешний IP для доступа к master-узлу.
Укажите `no-needed`, если внешний адрес не требуется.
Пример: `internet-no-antiddos-v1`

### Список разрешённых IP-адресов

Список IP-адресов или подсетей, с которых разрешён доступ к кластеру.
Если оставить пустым — доступ открыт для всех источников.
Пример: `["10.0.0.0/24", "192.168.1.10/32"]`

---

## 3. Параметры модификации базы данных

Все параметры, которые вы указываете при модификации, являются необязательными — система автоматически подставит ранее сохранённые значения, и при необходимости вы можете изменить их на нужные.

### Количество узлов

Количество реплик в кластере MongoDB.
Оптимально выбирать нечётное значение, так как это обеспечивает корректный процесс выбора ведущего узла и сохраняет работоспособность базы данных даже при отказе одной из нод.

> **Примечание:** уменьшение количества узлов после создания кластера не рекомендуется.

### Квота памяти пода (MB)

Объём памяти для одного пода в мегабайтах.
Пример: `2048`

### Квота CPU пода (mCPU)

CPU-квота для пода в миликорах (1000 mCPU = 1 vCPU).
Пример: `1000`

### Размер диска для базы данных (GB)

Объём диска для хранения данных указывается в гигабайтах. Его можно увеличить при необходимости, однако уменьшить уже выделенный размер невозможно.
Пример: `20`

### Имя ipSpace для публикации внешнего IP

Имя ipSpace, через который будет выделен внешний IP для доступа к master-узлу.
Укажите `no-needed`, если внешний адрес не требуется.
Пример: `internet-no-antiddos-v1`

### Список разрешённых IP-адресов

Список IP-адресов или подсетей, с которых разрешён доступ к кластеру.
Если оставить пустым — доступ открыт для всех источников.
Пример: `["10.0.0.0/24", "192.168.1.10/32"]`

---

## 3. Параметры создания пользователя

### Имя пользователя

Указывается имя пользователя (любой регистр).
Пример: `readApp`

### Имя базы данных

Название базы, в которой будет создан пользователь.
Если база отсутствует, она будет создана автоматически.
Пример: `Apps_9392`

### Имя роли

* **read** — доступ только на чтение
* **readWrite** — чтение и изменение данных
* **dbOwner** — полный контроль над базой данных

---

## 4. Параметры модификации пользователя

### Имя пользователя

Необходимо выбрать существующего пользователя.
Если список пуст, требуется предварительно создать пользователя.

### Имя базы данных

База данных, к которой относится пользователь.
Если база отсутствует, она будет создана автоматически.
Пример: `Apps_9392`

### Имя роли

* **read**
* **readWrite**
* **dbOwner**

---

## 5. Параметры удаления пользователя

### Имя пользователя

Выберите пользователя из списка для удаления.

---

## 6. Выходные параметры

После успешного развертывания базы данных платформа возвращает ключевые параметры.

### internalConnect

Внутренний эндпоинт для подключения к кластеру из сервисов, работающих в той же сети.
Используется для внутренних интеграций и системных сервисов.

### externalConnect

Внешний FQDN для подключения к кластеру извне.
Порт подключения — **27017**.

---

## 7. Пример подключения

Перед подключением необходимо установить **mongosh**.

Команда подключения к базе данных:

```
mongosh "mongodb://<username>:<password>@<endpoint_db>:27017/<dbName>"
```

Где:

* `<username>` — имя пользователя
* `<password>` — пароль
* `<endpoint_db>` — internalConnect или externalConnect
* `<dbName>` — имя базы данных

## 8. Дополнительная информация

Сейчас соединение с базой работает без шифрования, и доступ к кластеру осуществляется только по логину и паролю. +
diff --git a/universal_rebuild/docs-gen/mongodb_example.md b/universal_rebuild/docs-gen/mongodb_example.md new file mode 100644 index 0000000..08ec67f --- /dev/null +++ b/universal_rebuild/docs-gen/mongodb_example.md @@ -0,0 +1,50 @@ +# Resource nubes_mongodb + +Service ID: `92` + +Service Name: MongoDB + +[Manual](mongodb.md) | [Create params](mongodb_params_create.md) | [Modify params](mongodb_params_modify.md) | [Output params](mongodb_outputs.md) | [Operations](mongodb_ops.md) | [Example](mongodb_example.md) + +## Copy-ready manifest (`mongodb_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_mongodb" "baza" { + resource_instances = 1 # Пример: `2` + resource_memory = 1 # Пример: `2048` + resource_cpu = 1 # Пример: `1000` + resource_disk = 1 # Пример: `20` + resource_realm = "TODO" # Выбрать платформу из списка + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + master_access_list = [] # Список IP-адресов, с которых разрешён доступ. Если оставить пустым — доступ открыт всем. +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_mongodb.baza.state_params["имя_ключа"] +nubes_mongodb.baza.state_out["имя_ключа"] +nubes_mongodb.baza.state_params_flat["имя_ключа"] +nubes_mongodb.baza.state_out_flat["имя_ключа"] +nubes_mongodb.baza.vault_secrets["имя_ключа"] +nubes_mongodb.baza.vault_url +nubes_mongodb.baza.vault_user_path +nubes_mongodb.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/mongodb_ops.md b/universal_rebuild/docs-gen/mongodb_ops.md new file mode 100644 index 0000000..fb06e5b --- /dev/null +++ b/universal_rebuild/docs-gen/mongodb_ops.md @@ -0,0 +1,18 @@ +# Resource nubes_mongodb + +Service ID: `92` + +Service Name: MongoDB + +[Manual](mongodb.md) | [Create params](mongodb_params_create.md) | [Modify params](mongodb_params_modify.md) | [Output params](mongodb_outputs.md) | [Operations](mongodb_ops.md) | [Example](mongodb_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](mongodb_params_create.md) +- `create_user` — . См. [nubes_mongodb_user](mongodb_user.md) +- `delete` +- `delete_user` — . См. [nubes_mongodb_user](mongodb_user.md) +- `modify` — Изменение кластера. Параметры: [Modify params](mongodb_params_modify.md) +- `modify_user` — . См. [nubes_mongodb_user](mongodb_user.md) +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/mongodb_outputs.md b/universal_rebuild/docs-gen/mongodb_outputs.md new file mode 100644 index 0000000..2a6b2dc --- /dev/null +++ b/universal_rebuild/docs-gen/mongodb_outputs.md @@ -0,0 +1,34 @@ +# Resource nubes_mongodb + +Service ID: `92` + +Service Name: MongoDB + +[Manual](mongodb.md) | [Create params](mongodb_params_create.md) | [Modify params](mongodb_params_modify.md) | [Output params](mongodb_outputs.md) | [Operations](mongodb_ops.md) | [Example](mongodb_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["internalConnect"]` +- `state_out_flat["monitoring"]` +- `state_out_flat["monitoring.allDashboards"]` +- `state_out_flat["monitoring.base"]` +- `state_out_flat["monitoring.base.url"]` +- `state_out_flat["monitoring.loki"]` +- `state_out_flat["monitoring.loki.url"]` + diff --git a/universal_rebuild/docs-gen/mongodb_params.md b/universal_rebuild/docs-gen/mongodb_params.md new file mode 100644 index 0000000..b595ec1 --- /dev/null +++ b/universal_rebuild/docs-gen/mongodb_params.md @@ -0,0 +1,12 @@ +# Resource nubes_mongodb + +Service ID: `92` + +Service Name: MongoDB + +[Manual](mongodb.md) | [Create params](mongodb_params_create.md) | [Modify params](mongodb_params_modify.md) | [Output params](mongodb_outputs.md) | [Operations](mongodb_ops.md) | [Example](mongodb_example.md) + +## Parameters + +- [Create params](mongodb_params_create.md) +- [Modify params](mongodb_params_modify.md) diff --git a/universal_rebuild/docs-gen/mongodb_params_create.md b/universal_rebuild/docs-gen/mongodb_params_create.md new file mode 100644 index 0000000..4cfcb00 --- /dev/null +++ b/universal_rebuild/docs-gen/mongodb_params_create.md @@ -0,0 +1,41 @@ +# Resource nubes_mongodb + +Service ID: `92` + +Service Name: MongoDB + +[Manual](mongodb.md) | [Create params](mongodb_params_create.md) | [Modify params](mongodb_params_modify.md) | [Output params](mongodb_outputs.md) | [Operations](mongodb_ops.md) | [Example](mongodb_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
487resource_instancesintegerПример: `2`minvalue=1; maxvalue=7
588resource_memoryintegerПример: `2048`minvalue=512
589resource_cpuintegerПример: `1000`
590resource_diskintegerПример: `20`
595resource_realmstringВыбрать платформу из спискаfunc=getAvailableResourceRealms
646ip_space_name_masterstringЕсли включен предыдущий параметр, то поле необходимо заполнить. Пример: `internet-no-antiddos-v1`
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + +
IDCodeTypeDefaultDescriptionConstraints
889master_access_listjson[]Передаётся как массив строк. Пример: [&quot;192.168.0.0&quot;, &quot;192.168.0.1&quot;]
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/mongodb_params_modify.md b/universal_rebuild/docs-gen/mongodb_params_modify.md new file mode 100644 index 0000000..9bff5f5 --- /dev/null +++ b/universal_rebuild/docs-gen/mongodb_params_modify.md @@ -0,0 +1,20 @@ +# Resource nubes_mongodb + +Service ID: `92` + +Service Name: MongoDB + +[Manual](mongodb.md) | [Create params](mongodb_params_create.md) | [Modify params](mongodb_params_modify.md) | [Output params](mongodb_outputs.md) | [Operations](mongodb_ops.md) | [Example](mongodb_example.md) + +## Modify params + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
648resource_instancesintegerПример: `2`
649resource_memoryintegerПример: `2048`minvalue=512
650resource_cpuintegerПример: `1000`minvalue=500
651resource_diskintegerПример: `20`
653ip_space_name_masterstringЕсли включен предыдущий параметр, то поле необходимо заполнить. Пример: `internet-no-antiddos-v1`
890master_access_listjsonПередаётся как массив строк. Пример: [&quot;192.168.0.0&quot;, &quot;192.168.0.1&quot;]
diff --git a/universal_rebuild/docs-gen/mongodb_user.md b/universal_rebuild/docs-gen/mongodb_user.md new file mode 100644 index 0000000..ece4f31 --- /dev/null +++ b/universal_rebuild/docs-gen/mongodb_user.md @@ -0,0 +1,35 @@ +# Resource nubes_mongodb_user + +Service: `nubes_mongodb` (ID: 92) + +[MongoDB (основной)](mongodb.md) | [Operations](mongodb_ops.md) | [User](mongodb_user.md) | [Example](mongodb_user_example.md) + +## Create params + +**Обязательные параметры** + + + + + + + +
IDCodeTypeDescriptionConstraints
635usernamestring
636db_namestring
643rolestringvalue_list=dbOwner, read, readWrite
+ +## Modify params + + + + + + + +
IDCodeTypeDescriptionConstraints
640usernamestring
641db_namestring
642rolestringvalue_list=dbOwner, read, readWrite
+ +## Delete params + + + + + +
IDCodeTypeDescriptionConstraints
644usernamestring
diff --git a/universal_rebuild/docs-gen/mongodb_user_example.md b/universal_rebuild/docs-gen/mongodb_user_example.md new file mode 100644 index 0000000..06d8568 --- /dev/null +++ b/universal_rebuild/docs-gen/mongodb_user_example.md @@ -0,0 +1,33 @@ +# Resource nubes_mongodb_user — Example + +Service: `nubes_mongodb` (ID: 92) + +[MongoDB (основной)](mongodb.md) | [Operations](mongodb_ops.md) | [User](mongodb_user.md) | [Example](mongodb_user_example.md) + +## Copy-ready manifest (`mongodb_user_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_mongodb должен быть создан заранее +# resource "nubes_mongodb" "baza" { ... } + +resource "nubes_mongodb_user" "example" { + mongodb_id = nubes_mongodb.baza.id + username = "TODO" + db_name = "TODO" + role = "dbOwner" +} +``` diff --git a/universal_rebuild/docs-gen/nextcloud.md b/universal_rebuild/docs-gen/nextcloud.md new file mode 100644 index 0000000..a494623 --- /dev/null +++ b/universal_rebuild/docs-gen/nextcloud.md @@ -0,0 +1,13 @@ +# Resource nubes_nextcloud + +Service ID: `50` + +Service Name: Nextcloud + +[Manual](nextcloud.md) | [Create params](nextcloud_params_create.md) | [Modify params](nextcloud_params_modify.md) | [Output params](nextcloud_outputs.md) | [Operations](nextcloud_ops.md) | [Example](nextcloud_example.md) + +## MAN + +
+Ресурсная платформа: k8s. Автоматизация: helm chart +
diff --git a/universal_rebuild/docs-gen/nextcloud_backup.md b/universal_rebuild/docs-gen/nextcloud_backup.md new file mode 100644 index 0000000..4145cbb --- /dev/null +++ b/universal_rebuild/docs-gen/nextcloud_backup.md @@ -0,0 +1,19 @@ +# Resource nubes_nextcloud_backup + +Service: `nubes_nextcloud` (ID: 50) + +[Nextcloud (основной)](nextcloud.md) | [Operations](nextcloud_ops.md) | [Backup](nextcloud_backup.md) | [Example](nextcloud_backup_example.md) + +## Create params + +**Обязательные параметры** + + + + + +
IDCodeTypeDescriptionConstraints
1077startup_configurationmap-fixed
+ +## Delete params + +None. diff --git a/universal_rebuild/docs-gen/nextcloud_backup_example.md b/universal_rebuild/docs-gen/nextcloud_backup_example.md new file mode 100644 index 0000000..1fd91a7 --- /dev/null +++ b/universal_rebuild/docs-gen/nextcloud_backup_example.md @@ -0,0 +1,31 @@ +# Resource nubes_nextcloud_backup — Example + +Service: `nubes_nextcloud` (ID: 50) + +[Nextcloud (основной)](nextcloud.md) | [Operations](nextcloud_ops.md) | [Backup](nextcloud_backup.md) | [Example](nextcloud_backup_example.md) + +## Copy-ready manifest (`nextcloud_backup_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_nextcloud должен быть создан заранее +# resource "nubes_nextcloud" "baza" { ... } + +resource "nubes_nextcloud_backup" "example" { + nextcloud_id = nubes_nextcloud.baza.id + startup_configuration = "TODO" +} +``` diff --git a/universal_rebuild/docs-gen/nextcloud_example.md b/universal_rebuild/docs-gen/nextcloud_example.md new file mode 100644 index 0000000..6122245 --- /dev/null +++ b/universal_rebuild/docs-gen/nextcloud_example.md @@ -0,0 +1,46 @@ +# Resource nubes_nextcloud + +Service ID: `50` + +Service Name: Nextcloud + +[Manual](nextcloud.md) | [Create params](nextcloud_params_create.md) | [Modify params](nextcloud_params_modify.md) | [Output params](nextcloud_outputs.md) | [Operations](nextcloud_ops.md) | [Example](nextcloud_example.md) + +## Copy-ready manifest (`nextcloud_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_nextcloud" "baza" { + startup_configuration = "TODO" + cluster_configuration = "TODO" + access_configuration = "TODO" + app_configuration = "TODO" +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_nextcloud.baza.state_params["имя_ключа"] +nubes_nextcloud.baza.state_out["имя_ключа"] +nubes_nextcloud.baza.state_params_flat["имя_ключа"] +nubes_nextcloud.baza.state_out_flat["имя_ключа"] +nubes_nextcloud.baza.vault_secrets["имя_ключа"] +nubes_nextcloud.baza.vault_url +nubes_nextcloud.baza.vault_user_path +nubes_nextcloud.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/nextcloud_ops.md b/universal_rebuild/docs-gen/nextcloud_ops.md new file mode 100644 index 0000000..47b0bce --- /dev/null +++ b/universal_rebuild/docs-gen/nextcloud_ops.md @@ -0,0 +1,19 @@ +# Resource nubes_nextcloud + +Service ID: `50` + +Service Name: Nextcloud + +[Manual](nextcloud.md) | [Create params](nextcloud_params_create.md) | [Modify params](nextcloud_params_modify.md) | [Output params](nextcloud_outputs.md) | [Operations](nextcloud_ops.md) | [Example](nextcloud_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](nextcloud_params_create.md) +- `create_backup` — Перед запуском обязательно надо перевести экземпляр Nextcloud в статус 'suspended'. См. [nubes_nextcloud_backup](nextcloud_backup.md) +- `delete` — DEV-Ветка удаления Nextcloud +- `modify` — Изменение кластера. Параметры: [Modify params](nextcloud_params_modify.md) +- `reconcile` +- `recovery` +- `restart` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/nextcloud_outputs.md b/universal_rebuild/docs-gen/nextcloud_outputs.md new file mode 100644 index 0000000..1a8707b --- /dev/null +++ b/universal_rebuild/docs-gen/nextcloud_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_nextcloud + +Service ID: `50` + +Service Name: Nextcloud + +[Manual](nextcloud.md) | [Create params](nextcloud_params_create.md) | [Modify params](nextcloud_params_modify.md) | [Output params](nextcloud_outputs.md) | [Operations](nextcloud_ops.md) | [Example](nextcloud_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/nextcloud_params.md b/universal_rebuild/docs-gen/nextcloud_params.md new file mode 100644 index 0000000..2c1eb71 --- /dev/null +++ b/universal_rebuild/docs-gen/nextcloud_params.md @@ -0,0 +1,12 @@ +# Resource nubes_nextcloud + +Service ID: `50` + +Service Name: Nextcloud + +[Manual](nextcloud.md) | [Create params](nextcloud_params_create.md) | [Modify params](nextcloud_params_modify.md) | [Output params](nextcloud_outputs.md) | [Operations](nextcloud_ops.md) | [Example](nextcloud_example.md) + +## Parameters + +- [Create params](nextcloud_params_create.md) +- [Modify params](nextcloud_params_modify.md) diff --git a/universal_rebuild/docs-gen/nextcloud_params_create.md b/universal_rebuild/docs-gen/nextcloud_params_create.md new file mode 100644 index 0000000..c6723ab --- /dev/null +++ b/universal_rebuild/docs-gen/nextcloud_params_create.md @@ -0,0 +1,35 @@ +# Resource nubes_nextcloud + +Service ID: `50` + +Service Name: Nextcloud + +[Manual](nextcloud.md) | [Create params](nextcloud_params_create.md) | [Modify params](nextcloud_params_modify.md) | [Output params](nextcloud_outputs.md) | [Operations](nextcloud_ops.md) | [Example](nextcloud_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + +
IDCodeTypeDescriptionConstraints
1055startup_configurationmap-fixed
1056cluster_configurationmap-fixed
1057access_configurationmap-fixed
1058app_configurationmap-fixed
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. + +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/nextcloud_params_modify.md b/universal_rebuild/docs-gen/nextcloud_params_modify.md new file mode 100644 index 0000000..47d56d1 --- /dev/null +++ b/universal_rebuild/docs-gen/nextcloud_params_modify.md @@ -0,0 +1,16 @@ +# Resource nubes_nextcloud + +Service ID: `50` + +Service Name: Nextcloud + +[Manual](nextcloud.md) | [Create params](nextcloud_params_create.md) | [Modify params](nextcloud_params_modify.md) | [Output params](nextcloud_outputs.md) | [Operations](nextcloud_ops.md) | [Example](nextcloud_example.md) + +## Modify params + + + + + + +
IDCodeTypeDescriptionConstraints
1059cluster_configurationmap-fixed
1060app_configurationmap-fixed
diff --git a/universal_rebuild/docs-gen/nifi.md b/universal_rebuild/docs-gen/nifi.md new file mode 100644 index 0000000..cf2c590 --- /dev/null +++ b/universal_rebuild/docs-gen/nifi.md @@ -0,0 +1,13 @@ +# Resource nubes_nifi + +Service ID: `117` + +Service Name: Nifi + +[Manual](nifi.md) | [Create params](nifi_params_create.md) | [Modify params](nifi_params_modify.md) | [Output params](nifi_outputs.md) | [Operations](nifi_ops.md) | [Example](nifi_example.md) + +## MAN + +
+Manual not available. +
diff --git a/universal_rebuild/docs-gen/nifi_example.md b/universal_rebuild/docs-gen/nifi_example.md new file mode 100644 index 0000000..200ecc0 --- /dev/null +++ b/universal_rebuild/docs-gen/nifi_example.md @@ -0,0 +1,46 @@ +# Resource nubes_nifi + +Service ID: `117` + +Service Name: Nifi + +[Manual](nifi.md) | [Create params](nifi_params_create.md) | [Modify params](nifi_params_modify.md) | [Output params](nifi_outputs.md) | [Operations](nifi_ops.md) | [Example](nifi_example.md) + +## Copy-ready manifest (`nifi_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_nifi" "baza" { + kafka_uid = "TODO" # Выбрать кластер из списка + partitions = 1 # Число партиций на кластер ≤ 100 × (число брокеров) × (фактор репликации). Пример `50` + replicas = 1 # Количество партиций ≤ (число брокеров). Пример `2` + name_topic = "TODO" # Пример: `orders-events` +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_nifi.baza.state_params["имя_ключа"] +nubes_nifi.baza.state_out["имя_ключа"] +nubes_nifi.baza.state_params_flat["имя_ключа"] +nubes_nifi.baza.state_out_flat["имя_ключа"] +nubes_nifi.baza.vault_secrets["имя_ключа"] +nubes_nifi.baza.vault_url +nubes_nifi.baza.vault_user_path +nubes_nifi.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/nifi_ops.md b/universal_rebuild/docs-gen/nifi_ops.md new file mode 100644 index 0000000..a896c6a --- /dev/null +++ b/universal_rebuild/docs-gen/nifi_ops.md @@ -0,0 +1,13 @@ +# Resource nubes_nifi + +Service ID: `117` + +Service Name: Nifi + +[Manual](nifi.md) | [Create params](nifi_params_create.md) | [Modify params](nifi_params_modify.md) | [Output params](nifi_outputs.md) | [Operations](nifi_ops.md) | [Example](nifi_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](nifi_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](nifi_params_modify.md) diff --git a/universal_rebuild/docs-gen/nifi_outputs.md b/universal_rebuild/docs-gen/nifi_outputs.md new file mode 100644 index 0000000..976b25e --- /dev/null +++ b/universal_rebuild/docs-gen/nifi_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_nifi + +Service ID: `117` + +Service Name: Nifi + +[Manual](nifi.md) | [Create params](nifi_params_create.md) | [Modify params](nifi_params_modify.md) | [Output params](nifi_outputs.md) | [Operations](nifi_ops.md) | [Example](nifi_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/nifi_params.md b/universal_rebuild/docs-gen/nifi_params.md new file mode 100644 index 0000000..4dcadac --- /dev/null +++ b/universal_rebuild/docs-gen/nifi_params.md @@ -0,0 +1,12 @@ +# Resource nubes_nifi + +Service ID: `117` + +Service Name: Nifi + +[Manual](nifi.md) | [Create params](nifi_params_create.md) | [Modify params](nifi_params_modify.md) | [Output params](nifi_outputs.md) | [Operations](nifi_ops.md) | [Example](nifi_example.md) + +## Parameters + +- [Create params](nifi_params_create.md) +- [Modify params](nifi_params_modify.md) diff --git a/universal_rebuild/docs-gen/nifi_params_create.md b/universal_rebuild/docs-gen/nifi_params_create.md new file mode 100644 index 0000000..d5c4baa --- /dev/null +++ b/universal_rebuild/docs-gen/nifi_params_create.md @@ -0,0 +1,23 @@ +# Resource nubes_nifi + +Service ID: `117` + +Service Name: Nifi + +[Manual](nifi.md) | [Create params](nifi_params_create.md) | [Modify params](nifi_params_modify.md) | [Output params](nifi_outputs.md) | [Operations](nifi_ops.md) | [Example](nifi_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + +
IDCodeTypeDescriptionConstraints
471kafka_uiduuidВыбрать кластер из спискаref_svc_id=116
472partitionsintegerОбратите внимание: уменьшить количество партиций после создания невозможно, поэтому лучше закладывать небольшой запас на будущий рост нагрузки.
473replicasintegerКоличество партиций ≤ (число брокеров). Пример `2`
474name_topicstringПример: `orders-events`
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. diff --git a/universal_rebuild/docs-gen/nifi_params_modify.md b/universal_rebuild/docs-gen/nifi_params_modify.md new file mode 100644 index 0000000..7f34ef0 --- /dev/null +++ b/universal_rebuild/docs-gen/nifi_params_modify.md @@ -0,0 +1,16 @@ +# Resource nubes_nifi + +Service ID: `117` + +Service Name: Nifi + +[Manual](nifi.md) | [Create params](nifi_params_create.md) | [Modify params](nifi_params_modify.md) | [Output params](nifi_outputs.md) | [Operations](nifi_ops.md) | [Example](nifi_example.md) + +## Modify params + + + + + + +
IDCodeTypeDescriptionConstraints
477partitionsintegerОбратите внимание: уменьшить количество партиций после создания невозможно, поэтому лучше закладывать небольшой запас на будущий рост нагрузки.
478replicasintegerКоличество партиций ≤ (число брокеров). Пример `2`
diff --git a/universal_rebuild/docs-gen/nodejs.md b/universal_rebuild/docs-gen/nodejs.md new file mode 100644 index 0000000..a1c6804 --- /dev/null +++ b/universal_rebuild/docs-gen/nodejs.md @@ -0,0 +1,13 @@ +# Resource nubes_nodejs + +Service ID: `95` + +Service Name: NodeJS + +[Manual](nodejs.md) | [Create params](nodejs_params_create.md) | [Modify params](nodejs_params_modify.md) | [Output params](nodejs_outputs.md) | [Operations](nodejs_ops.md) | [Example](nodejs_example.md) + +## MAN + +
+Развертывает контейнер в k8s кластере с node, который можно использовать для запуска своих приложений.
Приложение должно быть доступно по ссылки в git репозитории, которая является входным параметром. +
diff --git a/universal_rebuild/docs-gen/nodejs_example.md b/universal_rebuild/docs-gen/nodejs_example.md new file mode 100644 index 0000000..6591faf --- /dev/null +++ b/universal_rebuild/docs-gen/nodejs_example.md @@ -0,0 +1,49 @@ +# Resource nubes_nodejs + +Service ID: `95` + +Service Name: NodeJS + +[Manual](nodejs.md) | [Create params](nodejs_params_create.md) | [Modify params](nodejs_params_modify.md) | [Output params](nodejs_outputs.md) | [Operations](nodejs_ops.md) | [Example](nodejs_example.md) + +## Copy-ready manifest (`nodejs_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_nodejs" "baza" { + startup_configuration = "TODO" + cluster_configuration = "TODO" + access_configuration = "TODO" + app_configuration = "TODO" + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + json_env = {} # Передаётся в формате КЛЮЧ:ЗНАЧЕНИЕ +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_nodejs.baza.state_params["имя_ключа"] +nubes_nodejs.baza.state_out["имя_ключа"] +nubes_nodejs.baza.state_params_flat["имя_ключа"] +nubes_nodejs.baza.state_out_flat["имя_ключа"] +nubes_nodejs.baza.vault_secrets["имя_ключа"] +nubes_nodejs.baza.vault_url +nubes_nodejs.baza.vault_user_path +nubes_nodejs.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/nodejs_ops.md b/universal_rebuild/docs-gen/nodejs_ops.md new file mode 100644 index 0000000..46c51e1 --- /dev/null +++ b/universal_rebuild/docs-gen/nodejs_ops.md @@ -0,0 +1,17 @@ +# Resource nubes_nodejs + +Service ID: `95` + +Service Name: NodeJS + +[Manual](nodejs.md) | [Create params](nodejs_params_create.md) | [Modify params](nodejs_params_modify.md) | [Output params](nodejs_outputs.md) | [Operations](nodejs_ops.md) | [Example](nodejs_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](nodejs_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](nodejs_params_modify.md) +- `reconcile` +- `redeploy` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/nodejs_outputs.md b/universal_rebuild/docs-gen/nodejs_outputs.md new file mode 100644 index 0000000..5fa8a14 --- /dev/null +++ b/universal_rebuild/docs-gen/nodejs_outputs.md @@ -0,0 +1,34 @@ +# Resource nubes_nodejs + +Service ID: `95` + +Service Name: NodeJS + +[Manual](nodejs.md) | [Create params](nodejs_params_create.md) | [Modify params](nodejs_params_modify.md) | [Output params](nodejs_outputs.md) | [Operations](nodejs_ops.md) | [Example](nodejs_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["connectionUrl"]` +- `state_out_flat["monitoring"]` +- `state_out_flat["monitoring.allDashboards"]` +- `state_out_flat["monitoring.base"]` +- `state_out_flat["monitoring.base.url"]` +- `state_out_flat["monitoring.loki"]` +- `state_out_flat["monitoring.loki.url"]` + diff --git a/universal_rebuild/docs-gen/nodejs_params.md b/universal_rebuild/docs-gen/nodejs_params.md new file mode 100644 index 0000000..daf96ca --- /dev/null +++ b/universal_rebuild/docs-gen/nodejs_params.md @@ -0,0 +1,12 @@ +# Resource nubes_nodejs + +Service ID: `95` + +Service Name: NodeJS + +[Manual](nodejs.md) | [Create params](nodejs_params_create.md) | [Modify params](nodejs_params_modify.md) | [Output params](nodejs_outputs.md) | [Operations](nodejs_ops.md) | [Example](nodejs_example.md) + +## Parameters + +- [Create params](nodejs_params_create.md) +- [Modify params](nodejs_params_modify.md) diff --git a/universal_rebuild/docs-gen/nodejs_params_create.md b/universal_rebuild/docs-gen/nodejs_params_create.md new file mode 100644 index 0000000..6151786 --- /dev/null +++ b/universal_rebuild/docs-gen/nodejs_params_create.md @@ -0,0 +1,39 @@ +# Resource nubes_nodejs + +Service ID: `95` + +Service Name: NodeJS + +[Manual](nodejs.md) | [Create params](nodejs_params_create.md) | [Modify params](nodejs_params_modify.md) | [Output params](nodejs_outputs.md) | [Operations](nodejs_ops.md) | [Example](nodejs_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + +
IDCodeTypeDescriptionConstraints
1028startup_configurationmap-fixed
1029cluster_configurationmap-fixed
1030access_configurationmap-fixed
1031app_configurationmap-fixed
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + +
IDCodeTypeDefaultDescriptionConstraints
1032json_envmap{}Передаётся в формате КЛЮЧ:ЗНАЧЕНИЕ
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/nodejs_params_modify.md b/universal_rebuild/docs-gen/nodejs_params_modify.md new file mode 100644 index 0000000..b0158e2 --- /dev/null +++ b/universal_rebuild/docs-gen/nodejs_params_modify.md @@ -0,0 +1,17 @@ +# Resource nubes_nodejs + +Service ID: `95` + +Service Name: NodeJS + +[Manual](nodejs.md) | [Create params](nodejs_params_create.md) | [Modify params](nodejs_params_modify.md) | [Output params](nodejs_outputs.md) | [Operations](nodejs_ops.md) | [Example](nodejs_example.md) + +## Modify params + + + + + + + +
IDCodeTypeDescriptionConstraints
1033cluster_configurationmap-fixed
1034app_configurationmap-fixed
1035json_envmapПередаётся в формате КЛЮЧ:ЗНАЧЕНИЕ
diff --git a/universal_rebuild/docs-gen/nodered.md b/universal_rebuild/docs-gen/nodered.md new file mode 100644 index 0000000..54ecff3 --- /dev/null +++ b/universal_rebuild/docs-gen/nodered.md @@ -0,0 +1,13 @@ +# Resource nubes_nodered + +Service ID: `97` + +Service Name: NodeRed + +[Manual](nodered.md) | [Create params](nodered_params_create.md) | [Modify params](nodered_params_modify.md) | [Output params](nodered_outputs.md) | [Operations](nodered_ops.md) | [Example](nodered_example.md) + +## MAN + +
+Manual not available. +
diff --git a/universal_rebuild/docs-gen/nodered_example.md b/universal_rebuild/docs-gen/nodered_example.md new file mode 100644 index 0000000..c780843 --- /dev/null +++ b/universal_rebuild/docs-gen/nodered_example.md @@ -0,0 +1,50 @@ +# Resource nubes_nodered + +Service ID: `97` + +Service Name: NodeRed + +[Manual](nodered.md) | [Create params](nodered_params_create.md) | [Modify params](nodered_params_modify.md) | [Output params](nodered_outputs.md) | [Operations](nodered_ops.md) | [Example](nodered_example.md) + +## Copy-ready manifest (`nodered_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_nodered" "baza" { + resource_realm = "TODO" # Платформа для развертывания + domain = "TODO" # Наименование поддомена, будет добавлено в k8stemplate.dev.nubes.ru + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + resource_cpu = 500 # Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро + resource_memory = 512 # Квота памяти пода (Указывается в Megabytes) + resource_disk = 1 # Квота диска (Указывается в GIGAbytes) + resource_instances = 1 # Количество узлов +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_nodered.baza.state_params["имя_ключа"] +nubes_nodered.baza.state_out["имя_ключа"] +nubes_nodered.baza.state_params_flat["имя_ключа"] +nubes_nodered.baza.state_out_flat["имя_ключа"] +nubes_nodered.baza.vault_secrets["имя_ключа"] +nubes_nodered.baza.vault_url +nubes_nodered.baza.vault_user_path +nubes_nodered.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/nodered_ops.md b/universal_rebuild/docs-gen/nodered_ops.md new file mode 100644 index 0000000..2d6074e --- /dev/null +++ b/universal_rebuild/docs-gen/nodered_ops.md @@ -0,0 +1,12 @@ +# Resource nubes_nodered + +Service ID: `97` + +Service Name: NodeRed + +[Manual](nodered.md) | [Create params](nodered_params_create.md) | [Modify params](nodered_params_modify.md) | [Output params](nodered_outputs.md) | [Operations](nodered_ops.md) | [Example](nodered_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](nodered_params_create.md) +- `delete` diff --git a/universal_rebuild/docs-gen/nodered_outputs.md b/universal_rebuild/docs-gen/nodered_outputs.md new file mode 100644 index 0000000..74e4213 --- /dev/null +++ b/universal_rebuild/docs-gen/nodered_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_nodered + +Service ID: `97` + +Service Name: NodeRed + +[Manual](nodered.md) | [Create params](nodered_params_create.md) | [Modify params](nodered_params_modify.md) | [Output params](nodered_outputs.md) | [Operations](nodered_ops.md) | [Example](nodered_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/nodered_params.md b/universal_rebuild/docs-gen/nodered_params.md new file mode 100644 index 0000000..60a797d --- /dev/null +++ b/universal_rebuild/docs-gen/nodered_params.md @@ -0,0 +1,12 @@ +# Resource nubes_nodered + +Service ID: `97` + +Service Name: NodeRed + +[Manual](nodered.md) | [Create params](nodered_params_create.md) | [Modify params](nodered_params_modify.md) | [Output params](nodered_outputs.md) | [Operations](nodered_ops.md) | [Example](nodered_example.md) + +## Parameters + +- [Create params](nodered_params_create.md) +- [Modify params](nodered_params_modify.md) diff --git a/universal_rebuild/docs-gen/nodered_params_create.md b/universal_rebuild/docs-gen/nodered_params_create.md new file mode 100644 index 0000000..f976ccb --- /dev/null +++ b/universal_rebuild/docs-gen/nodered_params_create.md @@ -0,0 +1,28 @@ +# Resource nubes_nodered + +Service ID: `97` + +Service Name: NodeRed + +[Manual](nodered.md) | [Create params](nodered_params_create.md) | [Modify params](nodered_params_modify.md) | [Output params](nodered_outputs.md) | [Operations](nodered_ops.md) | [Example](nodered_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + +
IDCodeTypeDescriptionConstraints
196resource_realmstringНаименование кластера Kubernetes для подключенияfunc=getAvailableResourceRealms
197domainstringНаименование поддомена, будет добавлено в k8stemplate.dev.nubes.ruregex=^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$; unique_scope=provider
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
193resource_cpuinteger500Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядроminvalue=100; maxvalue=4000
194resource_memoryinteger512Квота памяти пода (Указывается в Megabytes)minvalue=128; maxvalue=8192
195resource_diskinteger1Квота диска (Указывается в GIGAbytes)minvalue=1; maxvalue=999
323resource_instancesinteger1Количество узловminvalue=1; maxvalue=7
diff --git a/universal_rebuild/docs-gen/nodered_params_modify.md b/universal_rebuild/docs-gen/nodered_params_modify.md new file mode 100644 index 0000000..be00f3b --- /dev/null +++ b/universal_rebuild/docs-gen/nodered_params_modify.md @@ -0,0 +1,11 @@ +# Resource nubes_nodered + +Service ID: `97` + +Service Name: NodeRed + +[Manual](nodered.md) | [Create params](nodered_params_create.md) | [Modify params](nodered_params_modify.md) | [Output params](nodered_outputs.md) | [Operations](nodered_ops.md) | [Example](nodered_example.md) + +## Modify params + +None. diff --git a/universal_rebuild/docs-gen/openwhisk.md b/universal_rebuild/docs-gen/openwhisk.md new file mode 100644 index 0000000..059ed46 --- /dev/null +++ b/universal_rebuild/docs-gen/openwhisk.md @@ -0,0 +1,13 @@ +# Resource nubes_openwhisk + +Service ID: `100` + +Service Name: Serverless Openwhisk (openwhisk_tenant) + +[Manual](openwhisk.md) | [Create params](openwhisk_params_create.md) | [Modify params](openwhisk_params_modify.md) | [Output params](openwhisk_outputs.md) | [Operations](openwhisk_ops.md) | [Example](openwhisk_example.md) + +## MAN + +
+Добавление и удаления пользователя для работы с Openwhisk +
diff --git a/universal_rebuild/docs-gen/openwhisk_example.md b/universal_rebuild/docs-gen/openwhisk_example.md new file mode 100644 index 0000000..9787419 --- /dev/null +++ b/universal_rebuild/docs-gen/openwhisk_example.md @@ -0,0 +1,42 @@ +# Resource nubes_openwhisk + +Service ID: `100` + +Service Name: Serverless Openwhisk (openwhisk_tenant) + +[Manual](openwhisk.md) | [Create params](openwhisk_params_create.md) | [Modify params](openwhisk_params_modify.md) | [Output params](openwhisk_outputs.md) | [Operations](openwhisk_ops.md) | [Example](openwhisk_example.md) + +## Copy-ready manifest (`openwhisk_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_openwhisk" "baza" { +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_openwhisk.baza.state_params["имя_ключа"] +nubes_openwhisk.baza.state_out["имя_ключа"] +nubes_openwhisk.baza.state_params_flat["имя_ключа"] +nubes_openwhisk.baza.state_out_flat["имя_ключа"] +nubes_openwhisk.baza.vault_secrets["имя_ключа"] +nubes_openwhisk.baza.vault_url +nubes_openwhisk.baza.vault_user_path +nubes_openwhisk.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/openwhisk_ops.md b/universal_rebuild/docs-gen/openwhisk_ops.md new file mode 100644 index 0000000..e931c78 --- /dev/null +++ b/universal_rebuild/docs-gen/openwhisk_ops.md @@ -0,0 +1,10 @@ +# Resource nubes_openwhisk + +Service ID: `100` + +Service Name: Serverless Openwhisk (openwhisk_tenant) + +[Manual](openwhisk.md) | [Create params](openwhisk_params_create.md) | [Modify params](openwhisk_params_modify.md) | [Output params](openwhisk_outputs.md) | [Operations](openwhisk_ops.md) | [Example](openwhisk_example.md) + +## Operations + diff --git a/universal_rebuild/docs-gen/openwhisk_outputs.md b/universal_rebuild/docs-gen/openwhisk_outputs.md new file mode 100644 index 0000000..e2cdfe5 --- /dev/null +++ b/universal_rebuild/docs-gen/openwhisk_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_openwhisk + +Service ID: `100` + +Service Name: Serverless Openwhisk (openwhisk_tenant) + +[Manual](openwhisk.md) | [Create params](openwhisk_params_create.md) | [Modify params](openwhisk_params_modify.md) | [Output params](openwhisk_outputs.md) | [Operations](openwhisk_ops.md) | [Example](openwhisk_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/openwhisk_params.md b/universal_rebuild/docs-gen/openwhisk_params.md new file mode 100644 index 0000000..1a9b0e5 --- /dev/null +++ b/universal_rebuild/docs-gen/openwhisk_params.md @@ -0,0 +1,12 @@ +# Resource nubes_openwhisk + +Service ID: `100` + +Service Name: Serverless Openwhisk (openwhisk_tenant) + +[Manual](openwhisk.md) | [Create params](openwhisk_params_create.md) | [Modify params](openwhisk_params_modify.md) | [Output params](openwhisk_outputs.md) | [Operations](openwhisk_ops.md) | [Example](openwhisk_example.md) + +## Parameters + +- [Create params](openwhisk_params_create.md) +- [Modify params](openwhisk_params_modify.md) diff --git a/universal_rebuild/docs-gen/openwhisk_params_create.md b/universal_rebuild/docs-gen/openwhisk_params_create.md new file mode 100644 index 0000000..f6d47cf --- /dev/null +++ b/universal_rebuild/docs-gen/openwhisk_params_create.md @@ -0,0 +1,16 @@ +# Resource nubes_openwhisk + +Service ID: `100` + +Service Name: Serverless Openwhisk (openwhisk_tenant) + +[Manual](openwhisk.md) | [Create params](openwhisk_params_create.md) | [Modify params](openwhisk_params_modify.md) | [Output params](openwhisk_outputs.md) | [Operations](openwhisk_ops.md) | [Example](openwhisk_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + +None. + +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. diff --git a/universal_rebuild/docs-gen/openwhisk_params_modify.md b/universal_rebuild/docs-gen/openwhisk_params_modify.md new file mode 100644 index 0000000..7791043 --- /dev/null +++ b/universal_rebuild/docs-gen/openwhisk_params_modify.md @@ -0,0 +1,11 @@ +# Resource nubes_openwhisk + +Service ID: `100` + +Service Name: Serverless Openwhisk (openwhisk_tenant) + +[Manual](openwhisk.md) | [Create params](openwhisk_params_create.md) | [Modify params](openwhisk_params_modify.md) | [Output params](openwhisk_outputs.md) | [Operations](openwhisk_ops.md) | [Example](openwhisk_example.md) + +## Modify params + +None. diff --git a/universal_rebuild/docs-gen/pgadmin.md b/universal_rebuild/docs-gen/pgadmin.md new file mode 100644 index 0000000..5c2feaf --- /dev/null +++ b/universal_rebuild/docs-gen/pgadmin.md @@ -0,0 +1,13 @@ +# Resource nubes_pgadmin + +Service ID: `96` + +Service Name: pgAdmin + +[Manual](pgadmin.md) | [Create params](pgadmin_params_create.md) | [Modify params](pgadmin_params_modify.md) | [Output params](pgadmin_outputs.md) | [Operations](pgadmin_ops.md) | [Example](pgadmin_example.md) + +## MAN + +
+Инструмент с графическим интерфейсом для управления базами данных PostgreSQL +
diff --git a/universal_rebuild/docs-gen/pgadmin_example.md b/universal_rebuild/docs-gen/pgadmin_example.md new file mode 100644 index 0000000..c0cc9b8 --- /dev/null +++ b/universal_rebuild/docs-gen/pgadmin_example.md @@ -0,0 +1,51 @@ +# Resource nubes_pgadmin + +Service ID: `96` + +Service Name: pgAdmin + +[Manual](pgadmin.md) | [Create params](pgadmin_params_create.md) | [Modify params](pgadmin_params_modify.md) | [Output params](pgadmin_outputs.md) | [Operations](pgadmin_ops.md) | [Example](pgadmin_example.md) + +## Copy-ready manifest (`pgadmin_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_pgadmin" "baza" { + resource_realm = "TODO" # Платформа для развертывания + login = "TODO" # Логин для подключения к pgAdmin, в формате email (login@email.net) + password = "TODO" # Пароль для подключения к pgAdmin + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + domain = "web01" # Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm + resource_cpu = 500 # Квота ядра пода (milicores). 1000Mili = 1 Ядро + resource_memory = 512 # Квота памяти пода (MBytes) + resource_disk = 1 # Квота диска (Указывается в GIGAbytes) +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_pgadmin.baza.state_params["имя_ключа"] +nubes_pgadmin.baza.state_out["имя_ключа"] +nubes_pgadmin.baza.state_params_flat["имя_ключа"] +nubes_pgadmin.baza.state_out_flat["имя_ключа"] +nubes_pgadmin.baza.vault_secrets["имя_ключа"] +nubes_pgadmin.baza.vault_url +nubes_pgadmin.baza.vault_user_path +nubes_pgadmin.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/pgadmin_ops.md b/universal_rebuild/docs-gen/pgadmin_ops.md new file mode 100644 index 0000000..7449f5e --- /dev/null +++ b/universal_rebuild/docs-gen/pgadmin_ops.md @@ -0,0 +1,16 @@ +# Resource nubes_pgadmin + +Service ID: `96` + +Service Name: pgAdmin + +[Manual](pgadmin.md) | [Create params](pgadmin_params_create.md) | [Modify params](pgadmin_params_modify.md) | [Output params](pgadmin_outputs.md) | [Operations](pgadmin_ops.md) | [Example](pgadmin_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](pgadmin_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](pgadmin_params_modify.md) +- `redeploy` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/pgadmin_outputs.md b/universal_rebuild/docs-gen/pgadmin_outputs.md new file mode 100644 index 0000000..a88297a --- /dev/null +++ b/universal_rebuild/docs-gen/pgadmin_outputs.md @@ -0,0 +1,34 @@ +# Resource nubes_pgadmin + +Service ID: `96` + +Service Name: pgAdmin + +[Manual](pgadmin.md) | [Create params](pgadmin_params_create.md) | [Modify params](pgadmin_params_modify.md) | [Output params](pgadmin_outputs.md) | [Operations](pgadmin_ops.md) | [Example](pgadmin_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["connectionUrl"]` +- `state_out_flat["monitoring"]` +- `state_out_flat["monitoring.allDashboards"]` +- `state_out_flat["monitoring.base"]` +- `state_out_flat["monitoring.base.url"]` +- `state_out_flat["monitoring.loki"]` +- `state_out_flat["monitoring.loki.url"]` + diff --git a/universal_rebuild/docs-gen/pgadmin_params.md b/universal_rebuild/docs-gen/pgadmin_params.md new file mode 100644 index 0000000..3afd95c --- /dev/null +++ b/universal_rebuild/docs-gen/pgadmin_params.md @@ -0,0 +1,12 @@ +# Resource nubes_pgadmin + +Service ID: `96` + +Service Name: pgAdmin + +[Manual](pgadmin.md) | [Create params](pgadmin_params_create.md) | [Modify params](pgadmin_params_modify.md) | [Output params](pgadmin_outputs.md) | [Operations](pgadmin_ops.md) | [Example](pgadmin_example.md) + +## Parameters + +- [Create params](pgadmin_params_create.md) +- [Modify params](pgadmin_params_modify.md) diff --git a/universal_rebuild/docs-gen/pgadmin_params_create.md b/universal_rebuild/docs-gen/pgadmin_params_create.md new file mode 100644 index 0000000..f87da9c --- /dev/null +++ b/universal_rebuild/docs-gen/pgadmin_params_create.md @@ -0,0 +1,41 @@ +# Resource nubes_pgadmin + +Service ID: `96` + +Service Name: pgAdmin + +[Manual](pgadmin.md) | [Create params](pgadmin_params_create.md) | [Modify params](pgadmin_params_modify.md) | [Output params](pgadmin_outputs.md) | [Operations](pgadmin_ops.md) | [Example](pgadmin_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + +
IDCodeTypeDescriptionConstraints
169resource_realmstringНаименование кластера Kubernetes для подключенияfunc=getAvailableResourceRealms
170loginstringЛогин для подключения к pgAdmin, в формате email (login@email.net)regex=^([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)$; maxlength=255; minlength=3
171passwordstringПароль для подключения к pgAdmin
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
164domainstringweb01Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealmregex=^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$; unique_scope=provider
165resource_cpuinteger500Квота ядра пода (milicores). 1000Mili = 1 Ядроminvalue=500; maxvalue=4000
166resource_memoryinteger512Квота памяти пода (MBytes)minvalue=512; maxvalue=8192
167resource_diskinteger1Квота диска (Указывается в GIGAbytes)minvalue=1; maxvalue=999
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/pgadmin_params_modify.md b/universal_rebuild/docs-gen/pgadmin_params_modify.md new file mode 100644 index 0000000..28c4957 --- /dev/null +++ b/universal_rebuild/docs-gen/pgadmin_params_modify.md @@ -0,0 +1,17 @@ +# Resource nubes_pgadmin + +Service ID: `96` + +Service Name: pgAdmin + +[Manual](pgadmin.md) | [Create params](pgadmin_params_create.md) | [Modify params](pgadmin_params_modify.md) | [Output params](pgadmin_outputs.md) | [Operations](pgadmin_ops.md) | [Example](pgadmin_example.md) + +## Modify params + + + + + + + +
IDCodeTypeDescriptionConstraints
172resource_cpuintegerКвота ядра пода (Указывается в mili). 1000Mili = 1 Ядроminvalue=500; maxvalue=4000
173resource_memoryintegerКвота памяти пода (MBytes)minvalue=512; maxvalue=8192
174resource_diskintegerКвота диска (Указывается в GIGAbytes)minvalue=1; maxvalue=999
diff --git a/universal_rebuild/docs-gen/postgres.md b/universal_rebuild/docs-gen/postgres.md new file mode 100644 index 0000000..61e7668 --- /dev/null +++ b/universal_rebuild/docs-gen/postgres.md @@ -0,0 +1,13 @@ +# Resource nubes_postgres + +Service ID: `90` + +Service Name: PostgreSQL + +[Manual](postgres.md) | [Create params](postgres_params_create.md) | [Modify params](postgres_params_modify.md) | [Output params](postgres_outputs.md) | [Operations](postgres_ops.md) | [Example](postgres_example.md) + +## MAN + +
+# Инструкция по развертыванию PostgreSQL через платформу

---
## 1. Общая информация

PostgreSQL — это надёжная объектно-реляционная СУБД с открытым исходным кодом, поддерживающая расширенный набор функций, транзакции и хранение сложных типов данных. Развёртывание полностью автоматизировано платформой на базе Zalando Postgres Operator с использованием Kubernetes.

## Доступные операции

- **create** — Создание кластера
- **delete** — Удаление кластера
- **modify** — Модификация кластера
- **suspend** — Остановка кластера
- **resume** — Запуск кластера
- **restart** — Перезапуск кластера
- **recovery** — Восстановление из резервной копии

- **create_user** — Создание пользователя
- **delete_user** — Удаление пользователя

- **create_database** — Создание базы данных
- **delete_database** — Удаление базы данных


---
## 2. Параметры развертывания кластера

Ниже перечислены параметры, которые необходимо указать при создании ресурса PostgreSQL:

* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `k8s-3.ext.nubes.ru`.

* **Количество узлов в сети:**
Количество инстансов (реплик) в кластере PostgreSQL. Пример: `2` (master + slave).

* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `2048`

* **Квота (millicore) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `1000`

* **Размер (gigabyte) диска для базы данных:**
Размер диска для хранения данных в гигабайтах. Пример: `20`

* **Выделяет внешний IP для доступа к master:**
Флаг, определяющий, нужно ли выделять внешний IP для доступа к master. Пример: `true` или `false`

* **Имя ipSpace для публикации внешнего IP master:**
Если включен предыдущий параметр, то поле необходимо заполнить. Пример: `internet-no-antiddos-v1`

* **Выделяет внешний IP для доступа к slave:**
Флаг для выделения внешнего IP для slave (реплики чтения). Работает, если slave присутствует в кластере.

* **Имя ipSpace для публикации внешнего IP slave:**
Если включен параметр для slave, то поле необходимо заполнить.

* **UUID экземпляра услуги S3:**
UUID экземпляра S3 для хранения резервных копий.

* **Версия PostgreSQL:**
Версия PostgreSQL для развертывания. Пример: `16`

* **Расписание бэкапов (ext_BACKUP_SCHEDULE):**
Необязательный. Cron-выражение для времени запуска бэкапов. По умолчанию: `0 0 * * *` (ежедневно в полночь).

* **Количество сохраняемых бэкапов (ext_BACKUP_NUM_TO_RETAIN):**
Необязательный. Количество сохраняемых бэкапов. По умолчанию: `7`

* **PgPooler (master / slave):**
Флаги включения PgBouncer для подключений на запись и чтение. При включении создаётся отдельный под.

* **Разрешить подключение без SSL (allowNoSSL):**
По умолчанию подключение с sslmode=require. При `true` разрешается подключение без SSL.

* **Автоскейлинг PV (autoScale):**
Включает автоскейлинг тома. Требует настройки autoScalePercentage, autoScaleTechWindow, autoScaleQuotaGb.

* **Дополнительные параметры PostgreSQL (jsonParameters):**
JSON с переменными конфигурации PostgreSQL. Документация: https://www.postgresql.org/docs/current/runtime-config.html

---
## 3. Выходные параметры

После успешного развертывания ресурса PostgreSQL платформа возвращает ряд параметров.

#### externalConnect

Внешние эндпоинты для подключения к кластеру:
- **master** — для операций записи (host: `write.${namespace}`, port: 5432)
- **slave** — для операций чтения (host: `read.${namespace}`, port: 5432)

Пример ответа платформы:

```json
{
"slave": {
"ip": "",
"fqdn": "",
"uuid": "",
"isExternal": false
},
"master": {
"ip": "<ip>",
"fqdn": "write.<namespace>.<cluster-domain>",
"uuid": "<uuid>",
"isExternal": false
}
}
```

Поля: `ip` — внешний IP; `fqdn` — полное имя хоста; `uuid` — идентификатор; `isExternal` — признак внешнего доступа.

#### internalConnect

Внутренние эндпоинты (FQDN) для подключения из других сервисов внутри той же сети Kubernetes.

Пример ответа платформы:

```json
{
"slave": "",
"master": {
"slave": "",
"master": {
"slave": "",
"master": "postgresqlk8s-master.<namespace>.svc.cluster.local"
}
}
}
```

Для подключения используйте значение `master.master.master` (host для записи) или соответствующее значение slave (host для чтения).

Для подключения используется порт **5432**.

---
## 4. Управление пользователями

### create_user — Создание пользователя

* **Имя пользователя (username):**
Имя создаваемого пользователя. Используется для подключения к базе и настройки прав.
Пример: `myapp_user`

* **Роль (role):**
Тип роли пользователя. Допустимые значения:
- `app_user` — базовые права для DML-операций (SELECT, INSERT, UPDATE, DELETE)
- `ddl_user` — расширенные права: createdb, createrole (управление базами и ролями)

Защищённые имена, которые нельзя использовать: `admin`, `postgres`, `standby`.

### delete_user — Удаление пользователя

* **Имя пользователя (username):**
Имя удаляемого пользователя. Пример: `myapp_user`

Пользователя нельзя удалить, если он является владельцем базы данных. Сначала удалите или передайте владение базами данных другому пользователю.

---
## 5. Управление базами данных

### create_database — Создание базы данных

* **Имя базы данных (dbName):**
Название создаваемой базы данных. Пример: `myapp_db`

* **Владелец базы данных (dbOwner):**
Имя пользователя-владельца базы. Должен существовать в кластере (создан через create_user). Пример: `myapp_user`

### delete_database — Удаление базы данных

* **Имя базы данных (dbName):**
Название удаляемой базы данных. Пример: `myapp_db`
+
diff --git a/universal_rebuild/docs-gen/postgres_backup.md b/universal_rebuild/docs-gen/postgres_backup.md new file mode 100644 index 0000000..96074ea --- /dev/null +++ b/universal_rebuild/docs-gen/postgres_backup.md @@ -0,0 +1,13 @@ +# Resource nubes_postgres_backup + +Service: `nubes_postgres` (ID: 90) + +[PostgreSQL (основной)](postgres.md) | [Operations](postgres_ops.md) | [Backup](postgres_backup.md) | [Example](postgres_backup_example.md) + +## Create params + +None. + +## Delete params + +None. diff --git a/universal_rebuild/docs-gen/postgres_backup_example.md b/universal_rebuild/docs-gen/postgres_backup_example.md new file mode 100644 index 0000000..6b89b8d --- /dev/null +++ b/universal_rebuild/docs-gen/postgres_backup_example.md @@ -0,0 +1,30 @@ +# Resource nubes_postgres_backup — Example + +Service: `nubes_postgres` (ID: 90) + +[PostgreSQL (основной)](postgres.md) | [Operations](postgres_ops.md) | [Backup](postgres_backup.md) | [Example](postgres_backup_example.md) + +## Copy-ready manifest (`postgres_backup_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_postgres должен быть создан заранее +# resource "nubes_postgres" "baza" { ... } + +resource "nubes_postgres_backup" "example" { + postgres_id = nubes_postgres.baza.id +} +``` diff --git a/universal_rebuild/docs-gen/postgres_database.md b/universal_rebuild/docs-gen/postgres_database.md new file mode 100644 index 0000000..af1dd78 --- /dev/null +++ b/universal_rebuild/docs-gen/postgres_database.md @@ -0,0 +1,24 @@ +# Resource nubes_postgres_database + +Service: `nubes_postgres` (ID: 90) + +[PostgreSQL (основной)](postgres.md) | [Operations](postgres_ops.md) | [Database](postgres_database.md) | [Example](postgres_database_example.md) + +## Create params + +**Обязательные параметры** + + + + + + +
IDCodeTypeDescriptionConstraints
741db_namestringregex=^[A-Za-z0-9]+$
742db_ownerstring
+ +## Delete params + + + + + +
IDCodeTypeDescriptionConstraints
743db_namestring
diff --git a/universal_rebuild/docs-gen/postgres_database_example.md b/universal_rebuild/docs-gen/postgres_database_example.md new file mode 100644 index 0000000..ce5e739 --- /dev/null +++ b/universal_rebuild/docs-gen/postgres_database_example.md @@ -0,0 +1,32 @@ +# Resource nubes_postgres_database — Example + +Service: `nubes_postgres` (ID: 90) + +[PostgreSQL (основной)](postgres.md) | [Operations](postgres_ops.md) | [Database](postgres_database.md) | [Example](postgres_database_example.md) + +## Copy-ready manifest (`postgres_database_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_postgres должен быть создан заранее +# resource "nubes_postgres" "baza" { ... } + +resource "nubes_postgres_database" "example" { + postgres_id = nubes_postgres.baza.id + db_name = "TODO" + db_owner = "TODO" +} +``` diff --git a/universal_rebuild/docs-gen/postgres_example.md b/universal_rebuild/docs-gen/postgres_example.md new file mode 100644 index 0000000..8f9ef75 --- /dev/null +++ b/universal_rebuild/docs-gen/postgres_example.md @@ -0,0 +1,48 @@ +# Resource nubes_postgres + +Service ID: `90` + +Service Name: PostgreSQL + +[Manual](postgres.md) | [Create params](postgres_params_create.md) | [Modify params](postgres_params_modify.md) | [Output params](postgres_outputs.md) | [Operations](postgres_ops.md) | [Example](postgres_example.md) + +## Copy-ready manifest (`postgres_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_postgres" "baza" { + cluster_configuration = "TODO" + startup_configuration = "TODO" + access_configuration = "TODO" + postgres_configuration = "TODO" + backup_configuration = "TODO" + autoscale_configuration = "TODO" +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_postgres.baza.state_params["имя_ключа"] +nubes_postgres.baza.state_out["имя_ключа"] +nubes_postgres.baza.state_params_flat["имя_ключа"] +nubes_postgres.baza.state_out_flat["имя_ключа"] +nubes_postgres.baza.vault_secrets["имя_ключа"] +nubes_postgres.baza.vault_url +nubes_postgres.baza.vault_user_path +nubes_postgres.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/postgres_ops.md b/universal_rebuild/docs-gen/postgres_ops.md new file mode 100644 index 0000000..cc2703c --- /dev/null +++ b/universal_rebuild/docs-gen/postgres_ops.md @@ -0,0 +1,23 @@ +# Resource nubes_postgres + +Service ID: `90` + +Service Name: PostgreSQL + +[Manual](postgres.md) | [Create params](postgres_params_create.md) | [Modify params](postgres_params_modify.md) | [Output params](postgres_outputs.md) | [Operations](postgres_ops.md) | [Example](postgres_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](postgres_params_create.md) +- `create_backup` — . См. [nubes_postgres_backup](postgres_backup.md) +- `create_database` — . См. [nubes_postgres_database](postgres_database.md) +- `create_user` — . См. [nubes_postgres_user](postgres_user.md) +- `delete` +- `delete_database` — . См. [nubes_postgres_database](postgres_database.md) +- `delete_user` — . См. [nubes_postgres_user](postgres_user.md) +- `modify` — Изменение кластера. Параметры: [Modify params](postgres_params_modify.md) +- `reconcile` +- `recovery` +- `restart` — ВНИМАНИЕ - Рестарт предполагает УДАЛЕНИЕ подов. Может быть полная поломка. Крайне осторожно запускать при работе +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/postgres_outputs.md b/universal_rebuild/docs-gen/postgres_outputs.md new file mode 100644 index 0000000..f07b697 --- /dev/null +++ b/universal_rebuild/docs-gen/postgres_outputs.md @@ -0,0 +1,65 @@ +# Resource nubes_postgres + +Service ID: `90` + +Service Name: PostgreSQL + +[Manual](postgres.md) | [Create params](postgres_params_create.md) | [Modify params](postgres_params_modify.md) | [Output params](postgres_outputs.md) | [Operations](postgres_ops.md) | [Example](postgres_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["externalConnect"]` +- `state_out_flat["externalConnect.master"]` +- `state_out_flat["externalConnect.master.fqdn"]` +- `state_out_flat["externalConnect.master.ip"]` +- `state_out_flat["externalConnect.master.isExternal"]` +- `state_out_flat["externalConnect.master.uuid"]` +- `state_out_flat["externalConnect.slave"]` +- `state_out_flat["externalConnect.slave.fqdn"]` +- `state_out_flat["externalConnect.slave.ip"]` +- `state_out_flat["externalConnect.slave.isExternal"]` +- `state_out_flat["externalConnect.slave.uuid"]` +- `state_out_flat["internalConnect"]` +- `state_out_flat["internalConnect.master"]` +- `state_out_flat["internalConnect.slave"]` +- `state_out_flat["monitoring"]` +- `state_out_flat["monitoring.allDashboards"]` +- `state_out_flat["monitoring.base"]` +- `state_out_flat["monitoring.base.url"]` +- `state_out_flat["monitoring.k8spostgresql"]` +- `state_out_flat["monitoring.k8spostgresql.url"]` +- `state_out_flat["monitoring.k8spostgresqlbackup"]` +- `state_out_flat["monitoring.k8spostgresqlbackup.url"]` +- `state_out_flat["monitoring.loki"]` +- `state_out_flat["monitoring.loki.url"]` + +### `vault_secrets` ключи + +- `vault_secrets["adminPass"]` +- `vault_secrets["adminUser"]` +- `vault_secrets["standbyPass"]` +- `vault_secrets["standbyUser"]` + +### Пример для связки с Lucee/NodeJS + +```hcl +testds_connectionString = "jdbc:postgresql://${nubes_postgres.db2.state_out_flat["internalConnect.master"]}:5432/postgres?sslmode=require" +testds_username = nubes_postgres.db2.vault_secrets["adminUser"] +testds_password = nubes_postgres.db2.vault_secrets["adminPass"] +``` diff --git a/universal_rebuild/docs-gen/postgres_params.md b/universal_rebuild/docs-gen/postgres_params.md new file mode 100644 index 0000000..b44e9f4 --- /dev/null +++ b/universal_rebuild/docs-gen/postgres_params.md @@ -0,0 +1,12 @@ +# Resource nubes_postgres + +Service ID: `90` + +Service Name: PostgreSQL + +[Manual](postgres.md) | [Create params](postgres_params_create.md) | [Modify params](postgres_params_modify.md) | [Output params](postgres_outputs.md) | [Operations](postgres_ops.md) | [Example](postgres_example.md) + +## Parameters + +- [Create params](postgres_params_create.md) +- [Modify params](postgres_params_modify.md) diff --git a/universal_rebuild/docs-gen/postgres_params_create.md b/universal_rebuild/docs-gen/postgres_params_create.md new file mode 100644 index 0000000..8957e32 --- /dev/null +++ b/universal_rebuild/docs-gen/postgres_params_create.md @@ -0,0 +1,38 @@ +# Resource nubes_postgres + +Service ID: `90` + +Service Name: PostgreSQL + +[Manual](postgres.md) | [Create params](postgres_params_create.md) | [Modify params](postgres_params_modify.md) | [Output params](postgres_outputs.md) | [Operations](postgres_ops.md) | [Example](postgres_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
788cluster_configurationmap-fixed
789startup_configurationmap-fixed
790access_configurationmap-fixed
791postgres_configurationmap-fixed
792postgres_confarray-map-fixed
793backup_configurationmap-fixed
794autoscale_configurationmap-fixed
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. + +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/postgres_params_modify.md b/universal_rebuild/docs-gen/postgres_params_modify.md new file mode 100644 index 0000000..5a67a37 --- /dev/null +++ b/universal_rebuild/docs-gen/postgres_params_modify.md @@ -0,0 +1,20 @@ +# Resource nubes_postgres + +Service ID: `90` + +Service Name: PostgreSQL + +[Manual](postgres.md) | [Create params](postgres_params_create.md) | [Modify params](postgres_params_modify.md) | [Output params](postgres_outputs.md) | [Operations](postgres_ops.md) | [Example](postgres_example.md) + +## Modify params + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
795cluster_configurationmap-fixed
796access_configurationmap-fixed
797postgres_configurationmap-fixed
798postgres_confarray-map-fixed
799backup_configurationmap-fixed
800autoscale_configurationmap-fixed
diff --git a/universal_rebuild/docs-gen/postgres_user.md b/universal_rebuild/docs-gen/postgres_user.md new file mode 100644 index 0000000..e82e589 --- /dev/null +++ b/universal_rebuild/docs-gen/postgres_user.md @@ -0,0 +1,24 @@ +# Resource nubes_postgres_user + +Service: `nubes_postgres` (ID: 90) + +[PostgreSQL (основной)](postgres.md) | [Operations](postgres_ops.md) | [User](postgres_user.md) | [Example](postgres_user_example.md) + +## Create params + +**Обязательные параметры** + + + + + + +
IDCodeTypeDescriptionConstraints
733usernamestringregex=^[A-Za-z0-9]+$; maxlength=62; minlength=2
740rolestring`app_user` — стандартный пользователь с базовым набором прав
`ddl_user` — пользователь с расширенными правами, включая управление ролями и базами данных
value_list=app_user, ddl_user
+ +## Delete params + + + + + +
IDCodeTypeDescriptionConstraints
739usernamestringПример: `username-admin`
diff --git a/universal_rebuild/docs-gen/postgres_user_example.md b/universal_rebuild/docs-gen/postgres_user_example.md new file mode 100644 index 0000000..3c3ab2d --- /dev/null +++ b/universal_rebuild/docs-gen/postgres_user_example.md @@ -0,0 +1,32 @@ +# Resource nubes_postgres_user — Example + +Service: `nubes_postgres` (ID: 90) + +[PostgreSQL (основной)](postgres.md) | [Operations](postgres_ops.md) | [User](postgres_user.md) | [Example](postgres_user_example.md) + +## Copy-ready manifest (`postgres_user_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_postgres должен быть создан заранее +# resource "nubes_postgres" "baza" { ... } + +resource "nubes_postgres_user" "example" { + postgres_id = nubes_postgres.baza.id + username = "TODO" + role = "app_user" # Выбрать роль из списка +} +``` diff --git a/universal_rebuild/docs-gen/rabbitmq.md b/universal_rebuild/docs-gen/rabbitmq.md new file mode 100644 index 0000000..d0e5af3 --- /dev/null +++ b/universal_rebuild/docs-gen/rabbitmq.md @@ -0,0 +1,13 @@ +# Resource nubes_rabbitmq + +Service ID: `93` + +Service Name: RabbitMQ + +[Manual](rabbitmq.md) | [Create params](rabbitmq_params_create.md) | [Modify params](rabbitmq_params_modify.md) | [Output params](rabbitmq_outputs.md) | [Operations](rabbitmq_ops.md) | [Example](rabbitmq_example.md) + +## MAN + +
+# Инструкция по развертыванию RabbitMQ через платформу

---
## 1. Общая информация
RabbitMQ — это брокер сообщений с открытым исходным кодом, который обеспечивает надёжную доставку сообщений между приложениями.
Позволяет надёжно передавать сообщения между сервисами и системами, интегрироваться с внешними решениями и использовать как внутренние, так и защищённые TLS-подключения. Развёртывание полностью автоматизировано платформой.

## Доступные операции
- **create** — Создание кластера
- **modify** — Изменение параметров кластера
- **delete** — Удаление кластера
- **suspend** — Остановка кластера
- **resume** — Запуск кластера


---
## 2. Параметры развертывания кластера
Ниже перечислены параметры, которые необходимо указать при создании ресурса RabbitMQ:

* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `k8s-3.ext.nubes.ru`.

* **Количество узлов в сети:**
Количество реплик в кластере RabbitMQ. При значении больше 1 создаётся кластер с репликацией для обеспечения высокой доступности.
Пример: `1` (single node) или `3` (кластер с репликацией)

* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `2048`

* **Квота (millicore) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `1000`

* **Размер (gigabyte) диска для базы данных:**
Размер диска для хранения данных RabbitMQ в гигабайтах. Пример: `50`

* **Выделяет внешний IP для доступа к master:**
Флаг, определяющий, нужно ли выделять внешний IP для доступа к master-узлу. При включении создаётся Service типа LoadBalancer и настраивается VIP на порту 5672.
Пример: `true` или `false`

* **Имя ipSpace для публикации внешнего IP master:**
Если включен предыдущий параметр, то поле необходимо заполнить. Пример: `internet-no-antiddos-v1`


---
## 3. Модификация кластера
Операция **modify** позволяет изменить параметры существующего кластера RabbitMQ.

**Изменяемые параметры:**
* **Квота (megabyte) памяти пода** — можно увеличить или уменьшить
* **Квота (millicore) ядра пода** — можно увеличить или уменьшить
* **Размер (gigabyte) диска для базы данных** — можно только увеличить (уменьшение не поддерживается)
* **Количество узлов в сети** — можно только увеличить (уменьшение не поддерживается)
* **Выделяет внешний IP для доступа к master** — можно включить или выключить
* **Имя ipSpace для публикации внешнего IP master** — можно изменить при включенном внешнем IP

**Ограничения:**
* Уменьшение размера диска не поддерживается
* Уменьшение количества реплик не поддерживается

---
## 4. Выходные параметры
После успешного развертывания ресурса RabbitMQ платформа возвращает ряд параметров в разделе "Поля состояния (сгенерированные значения)":

**clusterDomain**
Домен кластера Kubernetes, в котором развернут RabbitMQ.
Пример: `cluster.local`

**inernalConnect**
Внутренние эндпоинты для подключения к кластеру RabbitMQ из других сервисов, развернутых внутри той же сети.
Содержит:
* **master** — FQDN для подключения к кластеру. Пример: `rabbitmqk8s.{namespace}.svc.{clusterDomain}`

**externalConnect**
Внешние эндпоинты для подключения к кластеру RabbitMQ извне.
Содержит объекты с полями:
* **admin** — доступ к веб-интерфейсу управления:
* `fqdn` — полное доменное имя для веб-интерфейса. Пример: `admin.{namespace}.{domain}`
* `ip` — IP-адрес
* **master** — доступ к AMQP протоколу (если включен внешний IP):
* `fqdn` — полное доменное имя для AMQP. Пример: `write.{namespace}.{domain}`
* `ip` — IP-адрес

**monitoring**
Информация о дашбордах мониторинга:
* **allDashboards** — URL для доступа ко всем дашбордам Grafana

Для подключения используются следующие порты:

* **5672** — AMQP протокол (внутренний и внешний доступ, если включен внешний IP)
* **15672** — веб-интерфейс управления (доступен через Ingress по HTTPS)

**Учётные данные**
Данные для подключения к RabbitMQ доступны в разделе "Учётные данные":
* **adminUser** — имя пользователя администратора
* **adminPass** — пароль администратора


---
## 5. Примеры подключения через консоль (rabbitmqadmin)

### Работа с очередями через rabbitmqadmin

Для работы с RabbitMQ через консоль используется утилита `rabbitmqadmin`. Установите её или используйте образ с предустановленной утилитой.

Задайте переменные окружения с учётными данными:

```bash
export RABBITMQ_USERNAME=<adminUser>
export RABBITMQ_PASSWORD=<adminPass>
export RABBIT_HOST=<host>
```

Где:
* `<adminUser>` и `<adminPass>` — учётные данные из раздела "Учётные данные"
* `<host>` — адрес для подключения:
* Для внешнего подключения: `externalConnect.admin.fqdn` или `externalConnect.master.fqdn`

**Создание очереди:**

```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
declare queue name=healthcheck durable=false
```

**Листинг очередей:**

```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
list queues
```

**Отправка сообщения:**

```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
publish exchange=amq.default routing_key=healthcheck payload="ping-$(date +%s)"
```

**Чтение сообщения:**

```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
get queue=healthcheck ackmode=ack_requeue_false
```

---
## 6. Дополнительная информация
Для подключения к кластеру RabbitMQ используйте полученные эндпоинты из раздела "Поля состояния (сгенерированные значения)" и учётные данные из раздела "Учётные данные".

Веб-интерфейс управления доступен по адресу, указанному в параметре `externalConnect.admin.fqdn` через HTTPS.

Для внутреннего подключения используйте адрес из `inernalConnect.master` на порту 5672.

--- +
diff --git a/universal_rebuild/docs-gen/rabbitmq_example.md b/universal_rebuild/docs-gen/rabbitmq_example.md new file mode 100644 index 0000000..0a039c2 --- /dev/null +++ b/universal_rebuild/docs-gen/rabbitmq_example.md @@ -0,0 +1,50 @@ +# Resource nubes_rabbitmq + +Service ID: `93` + +Service Name: RabbitMQ + +[Manual](rabbitmq.md) | [Create params](rabbitmq_params_create.md) | [Modify params](rabbitmq_params_modify.md) | [Output params](rabbitmq_outputs.md) | [Operations](rabbitmq_ops.md) | [Example](rabbitmq_example.md) + +## Copy-ready manifest (`rabbitmq_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_rabbitmq" "baza" { + resource_realm = "TODO" # Выбрать платформу из списка + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + resource_cpu = 1000 # Пример: `2000` + resource_memory = 1124 # Пример: `2048` + resource_disk = 30 # Пример: `20` + resource_instances = 1 # Пример: `1` + need_external_address_master = false # Флаг, определяющий, нужно ли выделять внешний IP для доступа к master. Пример: `true` или `false` +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_rabbitmq.baza.state_params["имя_ключа"] +nubes_rabbitmq.baza.state_out["имя_ключа"] +nubes_rabbitmq.baza.state_params_flat["имя_ключа"] +nubes_rabbitmq.baza.state_out_flat["имя_ключа"] +nubes_rabbitmq.baza.vault_secrets["имя_ключа"] +nubes_rabbitmq.baza.vault_url +nubes_rabbitmq.baza.vault_user_path +nubes_rabbitmq.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/rabbitmq_ops.md b/universal_rebuild/docs-gen/rabbitmq_ops.md new file mode 100644 index 0000000..fe63cf6 --- /dev/null +++ b/universal_rebuild/docs-gen/rabbitmq_ops.md @@ -0,0 +1,15 @@ +# Resource nubes_rabbitmq + +Service ID: `93` + +Service Name: RabbitMQ + +[Manual](rabbitmq.md) | [Create params](rabbitmq_params_create.md) | [Modify params](rabbitmq_params_modify.md) | [Output params](rabbitmq_outputs.md) | [Operations](rabbitmq_ops.md) | [Example](rabbitmq_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](rabbitmq_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](rabbitmq_params_modify.md) +- `resume` +- `suspend` — Пока не работает из за того что RabbitmqCluster нельзя занулить diff --git a/universal_rebuild/docs-gen/rabbitmq_outputs.md b/universal_rebuild/docs-gen/rabbitmq_outputs.md new file mode 100644 index 0000000..30d870e --- /dev/null +++ b/universal_rebuild/docs-gen/rabbitmq_outputs.md @@ -0,0 +1,48 @@ +# Resource nubes_rabbitmq + +Service ID: `93` + +Service Name: RabbitMQ + +[Manual](rabbitmq.md) | [Create params](rabbitmq_params_create.md) | [Modify params](rabbitmq_params_modify.md) | [Output params](rabbitmq_outputs.md) | [Operations](rabbitmq_ops.md) | [Example](rabbitmq_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["clusterDomain"]` +- `state_out_flat["externalConnect"]` +- `state_out_flat["externalConnect.admin"]` +- `state_out_flat["externalConnect.admin.fqdn"]` +- `state_out_flat["externalConnect.admin.ip"]` +- `state_out_flat["externalConnect.admin.isExternal"]` +- `state_out_flat["externalConnect.admin.uuid"]` +- `state_out_flat["inernalConnect"]` +- `state_out_flat["inernalConnect.master"]` +- `state_out_flat["inernalConnect.slave"]` +- `state_out_flat["monitoring"]` +- `state_out_flat["monitoring.allDashboards"]` +- `state_out_flat["monitoring.base"]` +- `state_out_flat["monitoring.base.url"]` +- `state_out_flat["monitoring.loki"]` +- `state_out_flat["monitoring.loki.url"]` + +### `vault_secrets` ключи + +- `vault_secrets["adminPass"]` +- `vault_secrets["adminUser"]` + diff --git a/universal_rebuild/docs-gen/rabbitmq_params.md b/universal_rebuild/docs-gen/rabbitmq_params.md new file mode 100644 index 0000000..b743d18 --- /dev/null +++ b/universal_rebuild/docs-gen/rabbitmq_params.md @@ -0,0 +1,12 @@ +# Resource nubes_rabbitmq + +Service ID: `93` + +Service Name: RabbitMQ + +[Manual](rabbitmq.md) | [Create params](rabbitmq_params_create.md) | [Modify params](rabbitmq_params_modify.md) | [Output params](rabbitmq_outputs.md) | [Operations](rabbitmq_ops.md) | [Example](rabbitmq_example.md) + +## Parameters + +- [Create params](rabbitmq_params_create.md) +- [Modify params](rabbitmq_params_modify.md) diff --git a/universal_rebuild/docs-gen/rabbitmq_params_create.md b/universal_rebuild/docs-gen/rabbitmq_params_create.md new file mode 100644 index 0000000..1a1b21f --- /dev/null +++ b/universal_rebuild/docs-gen/rabbitmq_params_create.md @@ -0,0 +1,41 @@ +# Resource nubes_rabbitmq + +Service ID: `93` + +Service Name: RabbitMQ + +[Manual](rabbitmq.md) | [Create params](rabbitmq_params_create.md) | [Modify params](rabbitmq_params_modify.md) | [Output params](rabbitmq_outputs.md) | [Operations](rabbitmq_ops.md) | [Example](rabbitmq_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + +
IDCodeTypeDescriptionConstraints
119resource_realmstringВыбрать платформу из спискаfunc=getAvailableResourceRealms
543ip_space_name_masterstringПример: `internet-no-antiddos-v1`
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
116resource_cpuinteger1000Пример: `2000`minvalue=500; maxvalue=4000
117resource_memoryinteger1124Пример: `2048`minvalue=512; maxvalue=8192
118resource_diskinteger30Пример: `20`minvalue=5; maxvalue=999
224resource_instancesinteger1Пример: `1`minvalue=1; maxvalue=7
225need_external_address_masterbooleanfalseФлаг, определяющий, нужно ли выделять внешний IP для доступа к master. Пример: `true` или `false`value_list=false, true
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/rabbitmq_params_modify.md b/universal_rebuild/docs-gen/rabbitmq_params_modify.md new file mode 100644 index 0000000..6df624c --- /dev/null +++ b/universal_rebuild/docs-gen/rabbitmq_params_modify.md @@ -0,0 +1,20 @@ +# Resource nubes_rabbitmq + +Service ID: `93` + +Service Name: RabbitMQ + +[Manual](rabbitmq.md) | [Create params](rabbitmq_params_create.md) | [Modify params](rabbitmq_params_modify.md) | [Output params](rabbitmq_outputs.md) | [Operations](rabbitmq_ops.md) | [Example](rabbitmq_example.md) + +## Modify params + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
304resource_cpuintegerПример: `2000`minvalue=500; maxvalue=4000
305resource_memoryintegerПример: `2048`minvalue=512; maxvalue=8192
306resource_diskintegerПример: `20`minvalue=1; maxvalue=999
307resource_instancesintegerПример: `1`minvalue=1; maxvalue=7
308need_external_address_masterbooleanВыделяет внешний (белый) IP для доступа к mastervalue_list=false, true
545ip_space_name_masterstringПример: `internet-no-antiddos-v1`
diff --git a/universal_rebuild/docs-gen/redis.md b/universal_rebuild/docs-gen/redis.md new file mode 100644 index 0000000..4dfd2ea --- /dev/null +++ b/universal_rebuild/docs-gen/redis.md @@ -0,0 +1,13 @@ +# Resource nubes_redis + +Service ID: `91` + +Service Name: Redis + +[Manual](redis.md) | [Create params](redis_params_create.md) | [Modify params](redis_params_modify.md) | [Output params](redis_outputs.md) | [Operations](redis_ops.md) | [Example](redis_example.md) + +## MAN + +
+Redis кластер. Под кеши.
Ресурсная платформа: k8s.
Автоматизация: k8s operator
port 6379 +
diff --git a/universal_rebuild/docs-gen/redis_example.md b/universal_rebuild/docs-gen/redis_example.md new file mode 100644 index 0000000..32ab170 --- /dev/null +++ b/universal_rebuild/docs-gen/redis_example.md @@ -0,0 +1,45 @@ +# Resource nubes_redis + +Service ID: `91` + +Service Name: Redis + +[Manual](redis.md) | [Create params](redis_params_create.md) | [Modify params](redis_params_modify.md) | [Output params](redis_outputs.md) | [Operations](redis_ops.md) | [Example](redis_example.md) + +## Copy-ready manifest (`redis_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_redis" "baza" { + startup_configuration = "TODO" + cluster_configuration = "TODO" + access_configuration = "TODO" +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_redis.baza.state_params["имя_ключа"] +nubes_redis.baza.state_out["имя_ключа"] +nubes_redis.baza.state_params_flat["имя_ключа"] +nubes_redis.baza.state_out_flat["имя_ключа"] +nubes_redis.baza.vault_secrets["имя_ключа"] +nubes_redis.baza.vault_url +nubes_redis.baza.vault_user_path +nubes_redis.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/redis_ops.md b/universal_rebuild/docs-gen/redis_ops.md new file mode 100644 index 0000000..4156679 --- /dev/null +++ b/universal_rebuild/docs-gen/redis_ops.md @@ -0,0 +1,16 @@ +# Resource nubes_redis + +Service ID: `91` + +Service Name: Redis + +[Manual](redis.md) | [Create params](redis_params_create.md) | [Modify params](redis_params_modify.md) | [Output params](redis_outputs.md) | [Operations](redis_ops.md) | [Example](redis_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](redis_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](redis_params_modify.md) +- `reconcile` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/redis_outputs.md b/universal_rebuild/docs-gen/redis_outputs.md new file mode 100644 index 0000000..c735f67 --- /dev/null +++ b/universal_rebuild/docs-gen/redis_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_redis + +Service ID: `91` + +Service Name: Redis + +[Manual](redis.md) | [Create params](redis_params_create.md) | [Modify params](redis_params_modify.md) | [Output params](redis_outputs.md) | [Operations](redis_ops.md) | [Example](redis_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/redis_params.md b/universal_rebuild/docs-gen/redis_params.md new file mode 100644 index 0000000..131dd5e --- /dev/null +++ b/universal_rebuild/docs-gen/redis_params.md @@ -0,0 +1,12 @@ +# Resource nubes_redis + +Service ID: `91` + +Service Name: Redis + +[Manual](redis.md) | [Create params](redis_params_create.md) | [Modify params](redis_params_modify.md) | [Output params](redis_outputs.md) | [Operations](redis_ops.md) | [Example](redis_example.md) + +## Parameters + +- [Create params](redis_params_create.md) +- [Modify params](redis_params_modify.md) diff --git a/universal_rebuild/docs-gen/redis_params_create.md b/universal_rebuild/docs-gen/redis_params_create.md new file mode 100644 index 0000000..2eff875 --- /dev/null +++ b/universal_rebuild/docs-gen/redis_params_create.md @@ -0,0 +1,34 @@ +# Resource nubes_redis + +Service ID: `91` + +Service Name: Redis + +[Manual](redis.md) | [Create params](redis_params_create.md) | [Modify params](redis_params_modify.md) | [Output params](redis_outputs.md) | [Operations](redis_ops.md) | [Example](redis_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + +
IDCodeTypeDescriptionConstraints
1061startup_configurationmap-fixed
1062cluster_configurationmap-fixed
1063access_configurationmap-fixed
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. + +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/redis_params_modify.md b/universal_rebuild/docs-gen/redis_params_modify.md new file mode 100644 index 0000000..b4ed8a0 --- /dev/null +++ b/universal_rebuild/docs-gen/redis_params_modify.md @@ -0,0 +1,16 @@ +# Resource nubes_redis + +Service ID: `91` + +Service Name: Redis + +[Manual](redis.md) | [Create params](redis_params_create.md) | [Modify params](redis_params_modify.md) | [Output params](redis_outputs.md) | [Operations](redis_ops.md) | [Example](redis_example.md) + +## Modify params + + + + + + +
IDCodeTypeDescriptionConstraints
1064cluster_configurationmap-fixed
1065access_configurationmap-fixed
diff --git a/universal_rebuild/docs-gen/s3.md b/universal_rebuild/docs-gen/s3.md new file mode 100644 index 0000000..15a87a0 --- /dev/null +++ b/universal_rebuild/docs-gen/s3.md @@ -0,0 +1,13 @@ +# Resource nubes_s3 + +Service ID: `12` + +Service Name: S3 Object Storage + +[Manual](s3.md) | [Create params](s3_params_create.md) | [Modify params](s3_params_modify.md) | [Output params](s3_outputs.md) | [Operations](s3_ops.md) | [Example](s3_example.md) + +## MAN + +
+Руководство доступно по ссылке:
https://docs.s3.msk-1.ngcloud.ru/s3/s3.description.html +
diff --git a/universal_rebuild/docs-gen/s3_example.md b/universal_rebuild/docs-gen/s3_example.md new file mode 100644 index 0000000..fc69b64 --- /dev/null +++ b/universal_rebuild/docs-gen/s3_example.md @@ -0,0 +1,44 @@ +# Resource nubes_s3 + +Service ID: `12` + +Service Name: S3 Object Storage + +[Manual](s3.md) | [Create params](s3_params_create.md) | [Modify params](s3_params_modify.md) | [Output params](s3_outputs.md) | [Operations](s3_ops.md) | [Example](s3_example.md) + +## Copy-ready manifest (`s3_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_s3" "baza" { + resource_realm = "TODO" # Платформа для развертывания + display_name = "TODO" # Человеко-читаемое имя (транслит из Elma) - передаётся имя клиента +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_s3.baza.state_params["имя_ключа"] +nubes_s3.baza.state_out["имя_ключа"] +nubes_s3.baza.state_params_flat["имя_ключа"] +nubes_s3.baza.state_out_flat["имя_ключа"] +nubes_s3.baza.vault_secrets["имя_ключа"] +nubes_s3.baza.vault_url +nubes_s3.baza.vault_user_path +nubes_s3.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/s3_ops.md b/universal_rebuild/docs-gen/s3_ops.md new file mode 100644 index 0000000..655b982 --- /dev/null +++ b/universal_rebuild/docs-gen/s3_ops.md @@ -0,0 +1,18 @@ +# Resource nubes_s3 + +Service ID: `12` + +Service Name: S3 Object Storage + +[Manual](s3.md) | [Create params](s3_params_create.md) | [Modify params](s3_params_modify.md) | [Output params](s3_outputs.md) | [Operations](s3_ops.md) | [Example](s3_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](s3_params_create.md) +- `create_sub_user` — . См. [nubes_s3_sub_user](s3_sub_user.md) +- `delete` +- `delete_sub_user` — . См. [nubes_s3_sub_user](s3_sub_user.md) +- `modify` — Изменение кластера. Параметры: [Modify params](s3_params_modify.md) +- `reconcile` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/s3_outputs.md b/universal_rebuild/docs-gen/s3_outputs.md new file mode 100644 index 0000000..e1cdeb2 --- /dev/null +++ b/universal_rebuild/docs-gen/s3_outputs.md @@ -0,0 +1,42 @@ +# Resource nubes_s3 + +Service ID: `12` + +Service Name: S3 Object Storage + +[Manual](s3.md) | [Create params](s3_params_create.md) | [Modify params](s3_params_modify.md) | [Output params](s3_outputs.md) | [Operations](s3_ops.md) | [Example](s3_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["dtEndTrial"]` +- `state_out_flat["dtStartTrial"]` +- `state_out_flat["isTrial"]` +- `state_out_flat["monitoring"]` +- `state_out_flat["monitoring.allDashboards"]` +- `state_out_flat["monitoring.s3ceph"]` +- `state_out_flat["monitoring.s3ceph.url"]` +- `state_out_flat["urlConnect"]` + +### `vault_secrets` ключи + +- `vault_secrets["1325_access_key"]` +- `vault_secrets["1325_secret_key"]` +- `vault_secrets["1325_technicalS3Backup_access_key"]` +- `vault_secrets["1325_technicalS3Backup_secret_key"]` + diff --git a/universal_rebuild/docs-gen/s3_params.md b/universal_rebuild/docs-gen/s3_params.md new file mode 100644 index 0000000..d61aced --- /dev/null +++ b/universal_rebuild/docs-gen/s3_params.md @@ -0,0 +1,12 @@ +# Resource nubes_s3 + +Service ID: `12` + +Service Name: S3 Object Storage + +[Manual](s3.md) | [Create params](s3_params_create.md) | [Modify params](s3_params_modify.md) | [Output params](s3_outputs.md) | [Operations](s3_ops.md) | [Example](s3_example.md) + +## Parameters + +- [Create params](s3_params_create.md) +- [Modify params](s3_params_modify.md) diff --git a/universal_rebuild/docs-gen/s3_params_create.md b/universal_rebuild/docs-gen/s3_params_create.md new file mode 100644 index 0000000..b9a9364 --- /dev/null +++ b/universal_rebuild/docs-gen/s3_params_create.md @@ -0,0 +1,33 @@ +# Resource nubes_s3 + +Service ID: `12` + +Service Name: S3 Object Storage + +[Manual](s3.md) | [Create params](s3_params_create.md) | [Modify params](s3_params_modify.md) | [Output params](s3_outputs.md) | [Operations](s3_ops.md) | [Example](s3_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + +
IDCodeTypeDescriptionConstraints
163resource_realmкластер S3 для подключенияfunc=getAvailableResourceRealms
320display_namestringЧеловеко-читаемое имя (транслит из Elma) - передаётся имя клиентаregex=^[a-zA-Z0-9_]{1,61}[a-zA-Z0-9]$
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. + +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/s3_params_modify.md b/universal_rebuild/docs-gen/s3_params_modify.md new file mode 100644 index 0000000..d5a1da0 --- /dev/null +++ b/universal_rebuild/docs-gen/s3_params_modify.md @@ -0,0 +1,17 @@ +# Resource nubes_s3 + +Service ID: `12` + +Service Name: S3 Object Storage + +[Manual](s3.md) | [Create params](s3_params_create.md) | [Modify params](s3_params_modify.md) | [Output params](s3_outputs.md) | [Operations](s3_ops.md) | [Example](s3_example.md) + +## Modify params + + + + + + + +
IDCodeTypeDescriptionConstraints
50max_size_gb_per_userintegermaxSizeGb. Передаём рукамиminvalue=1; maxvalue=50000
51max_objects_per_bucketintegerКвота на бакет. Кол-во объектов. Передаём рукамиminvalue=1; maxvalue=10000000
52max_buckets_per_userintegerКвота на пользователя. Количество бакетов пользователя. Передаём рукамиminvalue=1; maxvalue=1000
diff --git a/universal_rebuild/docs-gen/s3_sub_user.md b/universal_rebuild/docs-gen/s3_sub_user.md new file mode 100644 index 0000000..1975010 --- /dev/null +++ b/universal_rebuild/docs-gen/s3_sub_user.md @@ -0,0 +1,24 @@ +# Resource nubes_s3_sub_user + +Service: `nubes_s3` (ID: 12) + +[S3 Object Storage (основной)](s3.md) | [Operations](s3_ops.md) | [Sub_user](s3_sub_user.md) | [Example](s3_sub_user_example.md) + +## Create params + +**Обязательные параметры** + + + + + + +
IDCodeTypeDescriptionConstraints
60sub_user_namestring
61sub_user_accessstringvalue_list=read, write, readwrite, full
+ +## Delete params + + + + + +
IDCodeTypeDescriptionConstraints
63sub_user_namestringsubUserName. По идее услуга уже создана - должен передаваться из ЛК
diff --git a/universal_rebuild/docs-gen/s3_sub_user_example.md b/universal_rebuild/docs-gen/s3_sub_user_example.md new file mode 100644 index 0000000..b1baf20 --- /dev/null +++ b/universal_rebuild/docs-gen/s3_sub_user_example.md @@ -0,0 +1,32 @@ +# Resource nubes_s3_sub_user — Example + +Service: `nubes_s3` (ID: 12) + +[S3 Object Storage (основной)](s3.md) | [Operations](s3_ops.md) | [Sub_user](s3_sub_user.md) | [Example](s3_sub_user_example.md) + +## Copy-ready manifest (`s3_sub_user_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_s3 должен быть создан заранее +# resource "nubes_s3" "baza" { ... } + +resource "nubes_s3_sub_user" "example" { + s3_id = nubes_s3.baza.id + sub_user_name = "TODO" + sub_user_access = "read" +} +``` diff --git a/universal_rebuild/docs-gen/s3bucket.md b/universal_rebuild/docs-gen/s3bucket.md new file mode 100644 index 0000000..27d17d7 --- /dev/null +++ b/universal_rebuild/docs-gen/s3bucket.md @@ -0,0 +1,13 @@ +# Resource nubes_s3bucket + +Service ID: `13` + +Service Name: S3 бакет + +[Manual](s3bucket.md) | [Create params](s3bucket_params_create.md) | [Modify params](s3bucket_params_modify.md) | [Output params](s3bucket_outputs.md) | [Operations](s3bucket_ops.md) | [Example](s3bucket_example.md) + +## MAN + +
+Manual not available. +
diff --git a/universal_rebuild/docs-gen/s3bucket_example.md b/universal_rebuild/docs-gen/s3bucket_example.md new file mode 100644 index 0000000..d31fe8b --- /dev/null +++ b/universal_rebuild/docs-gen/s3bucket_example.md @@ -0,0 +1,51 @@ +# Resource nubes_s3bucket + +Service ID: `13` + +Service Name: S3 бакет + +[Manual](s3bucket.md) | [Create params](s3bucket_params_create.md) | [Modify params](s3bucket_params_modify.md) | [Output params](s3bucket_outputs.md) | [Operations](s3bucket_ops.md) | [Example](s3bucket_example.md) + +## Copy-ready manifest (`s3bucket_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_s3bucket" "baza" { + s3_user_uid = "TODO" # UID Корневой услуги S3. На основе него будет создан бакет. + bucket_name = "TODO" # Имя бакета s3 + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + max_size = -1 # Максимальный размер бакета s3. Если поставить -1, будет безлимит. Размер указывается в Bytes + read_all = false # Публичный доступ на чтение позволяет любому пользователю интернета скачивать объекты из бакета. + list_all = false # Публичный доступ к листингу позволяет любому пользователю интернета получить список объектов в бакете. + cors_all = false # Публичный доступ к чтению настроек позволяет любому пользователю интернета читать конфигурации CORS + placement = "HOT" # Класс хранилища, который используется по умолчанию при загрузке объектов. Чем холоднее, тем дешевле место, но дороже обращения +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_s3bucket.baza.state_params["имя_ключа"] +nubes_s3bucket.baza.state_out["имя_ключа"] +nubes_s3bucket.baza.state_params_flat["имя_ключа"] +nubes_s3bucket.baza.state_out_flat["имя_ключа"] +nubes_s3bucket.baza.vault_secrets["имя_ключа"] +nubes_s3bucket.baza.vault_url +nubes_s3bucket.baza.vault_user_path +nubes_s3bucket.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/s3bucket_ops.md b/universal_rebuild/docs-gen/s3bucket_ops.md new file mode 100644 index 0000000..61b2abb --- /dev/null +++ b/universal_rebuild/docs-gen/s3bucket_ops.md @@ -0,0 +1,12 @@ +# Resource nubes_s3bucket + +Service ID: `13` + +Service Name: S3 бакет + +[Manual](s3bucket.md) | [Create params](s3bucket_params_create.md) | [Modify params](s3bucket_params_modify.md) | [Output params](s3bucket_outputs.md) | [Operations](s3bucket_ops.md) | [Example](s3bucket_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](s3bucket_params_create.md) +- `delete` diff --git a/universal_rebuild/docs-gen/s3bucket_outputs.md b/universal_rebuild/docs-gen/s3bucket_outputs.md new file mode 100644 index 0000000..f62a754 --- /dev/null +++ b/universal_rebuild/docs-gen/s3bucket_outputs.md @@ -0,0 +1,28 @@ +# Resource nubes_s3bucket + +Service ID: `13` + +Service Name: S3 бакет + +[Manual](s3bucket.md) | [Create params](s3bucket_params_create.md) | [Modify params](s3bucket_params_modify.md) | [Output params](s3bucket_outputs.md) | [Operations](s3bucket_ops.md) | [Example](s3bucket_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["httpConnect"]` + diff --git a/universal_rebuild/docs-gen/s3bucket_params.md b/universal_rebuild/docs-gen/s3bucket_params.md new file mode 100644 index 0000000..9977e26 --- /dev/null +++ b/universal_rebuild/docs-gen/s3bucket_params.md @@ -0,0 +1,12 @@ +# Resource nubes_s3bucket + +Service ID: `13` + +Service Name: S3 бакет + +[Manual](s3bucket.md) | [Create params](s3bucket_params_create.md) | [Modify params](s3bucket_params_modify.md) | [Output params](s3bucket_outputs.md) | [Operations](s3bucket_ops.md) | [Example](s3bucket_example.md) + +## Parameters + +- [Create params](s3bucket_params_create.md) +- [Modify params](s3bucket_params_modify.md) diff --git a/universal_rebuild/docs-gen/s3bucket_params_create.md b/universal_rebuild/docs-gen/s3bucket_params_create.md new file mode 100644 index 0000000..0ae6f44 --- /dev/null +++ b/universal_rebuild/docs-gen/s3bucket_params_create.md @@ -0,0 +1,29 @@ +# Resource nubes_s3bucket + +Service ID: `13` + +Service Name: S3 бакет + +[Manual](s3bucket.md) | [Create params](s3bucket_params_create.md) | [Modify params](s3bucket_params_modify.md) | [Output params](s3bucket_outputs.md) | [Operations](s3bucket_ops.md) | [Example](s3bucket_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + +
IDCodeTypeDescriptionConstraints
124s3_user_uiduuidUID Корневой услуги S3. На основе него будет создан бакет.ref_svc_id=12
125bucket_namestringИмя бакета s3
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
126max_size-1Максимальный размер бакета s3. Если поставить 0, будет безлимит. Размер указывается в Bytes
127read_allbooleanfalseПубличный доступ на чтение позволяет любому пользователю интернета скачивать объекты из бакета.value_list=false, true
128list_allbooleanfalseПубличный доступ к листингу позволяет любому пользователю интернета получить список объектов в бакете.value_list=false, true
129cors_allbooleanfalseПубличный доступ к чтению настроек позволяет любому пользователю интернета читать конфигурации CORSvalue_list=false, true
130placementstringHOTКласс хранилища, который используется по умолчанию при загрузке объектов. Чем холоднее, тем дешевле место, но дороже обращенияvalue_list=HOT, COLD
diff --git a/universal_rebuild/docs-gen/s3bucket_params_modify.md b/universal_rebuild/docs-gen/s3bucket_params_modify.md new file mode 100644 index 0000000..ca24765 --- /dev/null +++ b/universal_rebuild/docs-gen/s3bucket_params_modify.md @@ -0,0 +1,11 @@ +# Resource nubes_s3bucket + +Service ID: `13` + +Service Name: S3 бакет + +[Manual](s3bucket.md) | [Create params](s3bucket_params_create.md) | [Modify params](s3bucket_params_modify.md) | [Output params](s3bucket_outputs.md) | [Operations](s3bucket_ops.md) | [Example](s3bucket_example.md) + +## Modify params + +None. diff --git a/universal_rebuild/docs-gen/superset.md b/universal_rebuild/docs-gen/superset.md new file mode 100644 index 0000000..93094e9 --- /dev/null +++ b/universal_rebuild/docs-gen/superset.md @@ -0,0 +1,13 @@ +# Resource nubes_superset + +Service ID: `81` + +Service Name: Apache Superset + +[Manual](superset.md) | [Create params](superset_params_create.md) | [Modify params](superset_params_modify.md) | [Output params](superset_outputs.md) | [Operations](superset_ops.md) | [Example](superset_example.md) + +## MAN + +
+Apache Superset как сервис.
Ресурсная платформа: k8s.
Автоматизация: k8s operator.
Авторизация: 2FA keycloak (для доменного логина @mgmt.nubes.ru) +
diff --git a/universal_rebuild/docs-gen/superset_example.md b/universal_rebuild/docs-gen/superset_example.md new file mode 100644 index 0000000..e04dbe7 --- /dev/null +++ b/universal_rebuild/docs-gen/superset_example.md @@ -0,0 +1,51 @@ +# Resource nubes_superset + +Service ID: `81` + +Service Name: Apache Superset + +[Manual](superset.md) | [Create params](superset_params_create.md) | [Modify params](superset_params_modify.md) | [Output params](superset_outputs.md) | [Operations](superset_ops.md) | [Example](superset_example.md) + +## Copy-ready manifest (`superset_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_superset" "baza" { + resource_realm = "TODO" # Платформа для развертывания + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + domain = "web01" # Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm + emails = "testuser1" # Учётная запись, которой будут выданы админские права. В формате email [ну не совсем. Для доменных учетных записей - без доменного суффикса]. Обязана находиться в Keycloak. Можно передавать несколько через пробел + resource_cpu = 500 # Квота ядра пода (Указывается в mili). 1000 Mili = 1 ядро + resource_memory = 512 # Квота памяти пода (Указывается в Megabytes) + resource_disk = 1 # Квота диска (Указывается в GIGAbytes) + resource_instances = 1 # Количество узлов +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_superset.baza.state_params["имя_ключа"] +nubes_superset.baza.state_out["имя_ключа"] +nubes_superset.baza.state_params_flat["имя_ключа"] +nubes_superset.baza.state_out_flat["имя_ключа"] +nubes_superset.baza.vault_secrets["имя_ключа"] +nubes_superset.baza.vault_url +nubes_superset.baza.vault_user_path +nubes_superset.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/superset_ops.md b/universal_rebuild/docs-gen/superset_ops.md new file mode 100644 index 0000000..5aa441d --- /dev/null +++ b/universal_rebuild/docs-gen/superset_ops.md @@ -0,0 +1,12 @@ +# Resource nubes_superset + +Service ID: `81` + +Service Name: Apache Superset + +[Manual](superset.md) | [Create params](superset_params_create.md) | [Modify params](superset_params_modify.md) | [Output params](superset_outputs.md) | [Operations](superset_ops.md) | [Example](superset_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](superset_params_create.md) +- `delete` — DEV-Ветка удаления Superset diff --git a/universal_rebuild/docs-gen/superset_outputs.md b/universal_rebuild/docs-gen/superset_outputs.md new file mode 100644 index 0000000..4d7a1fd --- /dev/null +++ b/universal_rebuild/docs-gen/superset_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_superset + +Service ID: `81` + +Service Name: Apache Superset + +[Manual](superset.md) | [Create params](superset_params_create.md) | [Modify params](superset_params_modify.md) | [Output params](superset_outputs.md) | [Operations](superset_ops.md) | [Example](superset_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/superset_params.md b/universal_rebuild/docs-gen/superset_params.md new file mode 100644 index 0000000..2984f1c --- /dev/null +++ b/universal_rebuild/docs-gen/superset_params.md @@ -0,0 +1,12 @@ +# Resource nubes_superset + +Service ID: `81` + +Service Name: Apache Superset + +[Manual](superset.md) | [Create params](superset_params_create.md) | [Modify params](superset_params_modify.md) | [Output params](superset_outputs.md) | [Operations](superset_ops.md) | [Example](superset_example.md) + +## Parameters + +- [Create params](superset_params_create.md) +- [Modify params](superset_params_modify.md) diff --git a/universal_rebuild/docs-gen/superset_params_create.md b/universal_rebuild/docs-gen/superset_params_create.md new file mode 100644 index 0000000..6652cf1 --- /dev/null +++ b/universal_rebuild/docs-gen/superset_params_create.md @@ -0,0 +1,29 @@ +# Resource nubes_superset + +Service ID: `81` + +Service Name: Apache Superset + +[Manual](superset.md) | [Create params](superset_params_create.md) | [Modify params](superset_params_modify.md) | [Output params](superset_outputs.md) | [Operations](superset_ops.md) | [Example](superset_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + +
IDCodeTypeDescriptionConstraints
109resource_realmstringНаименование кластера Kubernetes для подключенияfunc=getAvailableResourceRealms
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
14domainstringweb01Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealmregex=^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
20emailsstringtestuser1Учётная запись, которой будут выданы админские права. В формате email [ну не совсем. Для доменных учетных записей - без доменного суффикса]. Обязана находиться в Keycloak. Можно передавать несколько через пробел
96resource_cpuinteger500Квота ядра пода (Указывается в mili). 1000 Mili = 1 ядроminvalue=100; maxvalue=4000
97resource_memoryinteger512Квота памяти пода (Указывается в Megabytes)minvalue=128; maxvalue=8192
98resource_diskinteger1Квота диска (Указывается в GIGAbytes)minvalue=1; maxvalue=999
227resource_instancesinteger1Количество узловminvalue=1; maxvalue=7
diff --git a/universal_rebuild/docs-gen/superset_params_modify.md b/universal_rebuild/docs-gen/superset_params_modify.md new file mode 100644 index 0000000..5a6e1ca --- /dev/null +++ b/universal_rebuild/docs-gen/superset_params_modify.md @@ -0,0 +1,11 @@ +# Resource nubes_superset + +Service ID: `81` + +Service Name: Apache Superset + +[Manual](superset.md) | [Create params](superset_params_create.md) | [Modify params](superset_params_modify.md) | [Output params](superset_outputs.md) | [Operations](superset_ops.md) | [Example](superset_example.md) + +## Modify params + +None. diff --git a/universal_rebuild/docs-gen/template.md b/universal_rebuild/docs-gen/template.md new file mode 100644 index 0000000..b4d0dc3 --- /dev/null +++ b/universal_rebuild/docs-gen/template.md @@ -0,0 +1,13 @@ +# Resource nubes_template + +Service ID: `2` + +Service Name: Темплейт k8s + +[Manual](template.md) | [Create params](template_params_create.md) | [Modify params](template_params_modify.md) | [Output params](template_outputs.md) | [Operations](template_ops.md) | [Example](template_example.md) + +## MAN + +
+Manual not available. +
diff --git a/universal_rebuild/docs-gen/template_example.md b/universal_rebuild/docs-gen/template_example.md new file mode 100644 index 0000000..c0a59d9 --- /dev/null +++ b/universal_rebuild/docs-gen/template_example.md @@ -0,0 +1,45 @@ +# Resource nubes_template + +Service ID: `2` + +Service Name: Темплейт k8s + +[Manual](template.md) | [Create params](template_params_create.md) | [Modify params](template_params_modify.md) | [Output params](template_outputs.md) | [Operations](template_ops.md) | [Example](template_example.md) + +## Copy-ready manifest (`template_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_template" "baza" { + cluster_configuration = "TODO" + startup_configuration = "TODO" + access_configuration = "TODO" +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_template.baza.state_params["имя_ключа"] +nubes_template.baza.state_out["имя_ключа"] +nubes_template.baza.state_params_flat["имя_ключа"] +nubes_template.baza.state_out_flat["имя_ключа"] +nubes_template.baza.vault_secrets["имя_ключа"] +nubes_template.baza.vault_url +nubes_template.baza.vault_user_path +nubes_template.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/template_ops.md b/universal_rebuild/docs-gen/template_ops.md new file mode 100644 index 0000000..f431055 --- /dev/null +++ b/universal_rebuild/docs-gen/template_ops.md @@ -0,0 +1,16 @@ +# Resource nubes_template + +Service ID: `2` + +Service Name: Темплейт k8s + +[Manual](template.md) | [Create params](template_params_create.md) | [Modify params](template_params_modify.md) | [Output params](template_outputs.md) | [Operations](template_ops.md) | [Example](template_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](template_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](template_params_modify.md) +- `reconcile` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/template_outputs.md b/universal_rebuild/docs-gen/template_outputs.md new file mode 100644 index 0000000..ab5623d --- /dev/null +++ b/universal_rebuild/docs-gen/template_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_template + +Service ID: `2` + +Service Name: Темплейт k8s + +[Manual](template.md) | [Create params](template_params_create.md) | [Modify params](template_params_modify.md) | [Output params](template_outputs.md) | [Operations](template_ops.md) | [Example](template_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/template_params.md b/universal_rebuild/docs-gen/template_params.md new file mode 100644 index 0000000..7fdd8d3 --- /dev/null +++ b/universal_rebuild/docs-gen/template_params.md @@ -0,0 +1,12 @@ +# Resource nubes_template + +Service ID: `2` + +Service Name: Темплейт k8s + +[Manual](template.md) | [Create params](template_params_create.md) | [Modify params](template_params_modify.md) | [Output params](template_outputs.md) | [Operations](template_ops.md) | [Example](template_example.md) + +## Parameters + +- [Create params](template_params_create.md) +- [Modify params](template_params_modify.md) diff --git a/universal_rebuild/docs-gen/template_params_create.md b/universal_rebuild/docs-gen/template_params_create.md new file mode 100644 index 0000000..6266f53 --- /dev/null +++ b/universal_rebuild/docs-gen/template_params_create.md @@ -0,0 +1,34 @@ +# Resource nubes_template + +Service ID: `2` + +Service Name: Темплейт k8s + +[Manual](template.md) | [Create params](template_params_create.md) | [Modify params](template_params_modify.md) | [Output params](template_outputs.md) | [Operations](template_ops.md) | [Example](template_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + +
IDCodeTypeDescriptionConstraints
813cluster_configurationmap-fixed
814startup_configurationmap-fixed
815access_configurationmap-fixed
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. + +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/template_params_modify.md b/universal_rebuild/docs-gen/template_params_modify.md new file mode 100644 index 0000000..4611040 --- /dev/null +++ b/universal_rebuild/docs-gen/template_params_modify.md @@ -0,0 +1,16 @@ +# Resource nubes_template + +Service ID: `2` + +Service Name: Темплейт k8s + +[Manual](template.md) | [Create params](template_params_create.md) | [Modify params](template_params_modify.md) | [Output params](template_outputs.md) | [Operations](template_ops.md) | [Example](template_example.md) + +## Modify params + + + + + + +
IDCodeTypeDescriptionConstraints
816cluster_configurationmap-fixed
817access_configurationmap-fixed
diff --git a/universal_rebuild/docs-gen/tenant.md b/universal_rebuild/docs-gen/tenant.md new file mode 100644 index 0000000..409820a --- /dev/null +++ b/universal_rebuild/docs-gen/tenant.md @@ -0,0 +1,13 @@ +# Resource nubes_tenant + +Service ID: `112` + +Service Name: Тенант в Grafana + +[Manual](tenant.md) | [Create params](tenant_params_create.md) | [Modify params](tenant_params_modify.md) | [Output params](tenant_outputs.md) | [Operations](tenant_ops.md) | [Example](tenant_example.md) + +## MAN + +
+Manual not available. +
diff --git a/universal_rebuild/docs-gen/tenant_example.md b/universal_rebuild/docs-gen/tenant_example.md new file mode 100644 index 0000000..bcbb9b2 --- /dev/null +++ b/universal_rebuild/docs-gen/tenant_example.md @@ -0,0 +1,44 @@ +# Resource nubes_tenant + +Service ID: `112` + +Service Name: Тенант в Grafana + +[Manual](tenant.md) | [Create params](tenant_params_create.md) | [Modify params](tenant_params_modify.md) | [Output params](tenant_outputs.md) | [Operations](tenant_ops.md) | [Example](tenant_example.md) + +## Copy-ready manifest (`tenant_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_tenant" "baza" { + grafana_org_name = "TODO" # WZ-Код клиента + resource_realm = "TODO" # Платформа для развертывания +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_tenant.baza.state_params["имя_ключа"] +nubes_tenant.baza.state_out["имя_ключа"] +nubes_tenant.baza.state_params_flat["имя_ключа"] +nubes_tenant.baza.state_out_flat["имя_ключа"] +nubes_tenant.baza.vault_secrets["имя_ключа"] +nubes_tenant.baza.vault_url +nubes_tenant.baza.vault_user_path +nubes_tenant.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/tenant_ops.md b/universal_rebuild/docs-gen/tenant_ops.md new file mode 100644 index 0000000..5058136 --- /dev/null +++ b/universal_rebuild/docs-gen/tenant_ops.md @@ -0,0 +1,13 @@ +# Resource nubes_tenant + +Service ID: `112` + +Service Name: Тенант в Grafana + +[Manual](tenant.md) | [Create params](tenant_params_create.md) | [Modify params](tenant_params_modify.md) | [Output params](tenant_outputs.md) | [Operations](tenant_ops.md) | [Example](tenant_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](tenant_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](tenant_params_modify.md) diff --git a/universal_rebuild/docs-gen/tenant_outputs.md b/universal_rebuild/docs-gen/tenant_outputs.md new file mode 100644 index 0000000..4ebe277 --- /dev/null +++ b/universal_rebuild/docs-gen/tenant_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_tenant + +Service ID: `112` + +Service Name: Тенант в Grafana + +[Manual](tenant.md) | [Create params](tenant_params_create.md) | [Modify params](tenant_params_modify.md) | [Output params](tenant_outputs.md) | [Operations](tenant_ops.md) | [Example](tenant_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/tenant_params.md b/universal_rebuild/docs-gen/tenant_params.md new file mode 100644 index 0000000..4db7d6b --- /dev/null +++ b/universal_rebuild/docs-gen/tenant_params.md @@ -0,0 +1,12 @@ +# Resource nubes_tenant + +Service ID: `112` + +Service Name: Тенант в Grafana + +[Manual](tenant.md) | [Create params](tenant_params_create.md) | [Modify params](tenant_params_modify.md) | [Output params](tenant_outputs.md) | [Operations](tenant_ops.md) | [Example](tenant_example.md) + +## Parameters + +- [Create params](tenant_params_create.md) +- [Modify params](tenant_params_modify.md) diff --git a/universal_rebuild/docs-gen/tenant_params_create.md b/universal_rebuild/docs-gen/tenant_params_create.md new file mode 100644 index 0000000..10d4d27 --- /dev/null +++ b/universal_rebuild/docs-gen/tenant_params_create.md @@ -0,0 +1,21 @@ +# Resource nubes_tenant + +Service ID: `112` + +Service Name: Тенант в Grafana + +[Manual](tenant.md) | [Create params](tenant_params_create.md) | [Modify params](tenant_params_modify.md) | [Output params](tenant_outputs.md) | [Operations](tenant_ops.md) | [Example](tenant_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + +
IDCodeTypeDescriptionConstraints
239grafana_org_namestringWZ-Код клиентаregex=^WZ[\d]+$
240resource_realmstringПлатформа для развертыванияfunc=getAvailableResourceRealms
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. diff --git a/universal_rebuild/docs-gen/tenant_params_modify.md b/universal_rebuild/docs-gen/tenant_params_modify.md new file mode 100644 index 0000000..cc3e107 --- /dev/null +++ b/universal_rebuild/docs-gen/tenant_params_modify.md @@ -0,0 +1,11 @@ +# Resource nubes_tenant + +Service ID: `112` + +Service Name: Тенант в Grafana + +[Manual](tenant.md) | [Create params](tenant_params_create.md) | [Modify params](tenant_params_modify.md) | [Output params](tenant_outputs.md) | [Operations](tenant_ops.md) | [Example](tenant_example.md) + +## Modify params + +None. diff --git a/universal_rebuild/docs-gen/valo_tenant.md b/universal_rebuild/docs-gen/valo_tenant.md new file mode 100644 index 0000000..6860e2f --- /dev/null +++ b/universal_rebuild/docs-gen/valo_tenant.md @@ -0,0 +1,13 @@ +# Resource nubes_valo_tenant + +Service ID: `149` + +Service Name: VALO Cloud + +[Manual](valo_tenant.md) | [Create params](valo_tenant_params_create.md) | [Modify params](valo_tenant_params_modify.md) | [Output params](valo_tenant_outputs.md) | [Operations](valo_tenant_ops.md) | [Example](valo_tenant_example.md) + +## MAN + +
+# Инструкция по развертыванию Тенант Valo через платформу

## 1. Общая информация
Тенант Valo — логический изолированный экземпляр сервиса VALO Cloud, предоставляющий защищённое облачное хранилище, синхронизацию данных и доступ к документам с различных устройств. При создании тенант автоматически разворачивается в тестовом режиме сроком на 2 месяца. Перевод в промышленную эксплуатацию выполняется отдельной операцией.

### Доступные операции

* **create** — создание нового тенанта в тестовом режиме сроком на 2 месяца.
* **modify** — изменение настроек тенанта, включая перевод из ТЕСТ в ПРОД.
* **suspend** — выключение (приостановка работы) тенанта.
* **resume** — включение ранее приостановленного тенанта.
* **delete** — удаление тенанта; доступно только после выполнения операции suspend.

---

## 2. Параметры развертывания

Параметры входных данных операции **create**:

### Платформа для развертывания
Описание: платформа, на которой будет создан тенант.
Пример значения: `valo.ngcloud.ru`.

### DNS-Префикс
Описание: Будет добавлено в зону valo.ngcloud.ru
Пример значения: `mysimpledomain`.

### Параметры хранилища
Описание: Сколько места будет выделено под использование в тенанте. Данные хранятся в S3. Размер указывается в Gigabytes
Пример значения: `10`.

### Настройки тенанта
Описание: Ряд конфигурации Valo-тенанта, такие как настройки пользователя и доступного функционала
Пример значения: `опционально в рамках настройки`.

---

## 3. Рекомендованные характеристики

### Тестовое окружение
Достаточно развернуть тенант в ТЕСТ. Срок предоставляется в 2 месяца. По истечению срока тенант автоматически переводится в `suspend` на стороне ресурсной платформы

### Промышленное окружение
Для разблокировки используйте операцию `modify`

---

## 4. Выходные параметры

Услуга предоставляет следующие выходные параметры (формируются в процессе операций):

### Статус тенанта
Отражает текущее состояние и параметры.

---

## 5. Дополнительная информация
Тенант всегда создаётся в режиме ТЕСТ и не может быть сразу переведён в ПРОД без операции modify.
Удаление тенанта возможно только после его выключения с помощью операции suspend.
Срок тестового режима составляет 2 месяца с момента создания.
Операции suspend и resume используются для временного управления доступностью сервиса без потери конфигурации.
+
diff --git a/universal_rebuild/docs-gen/valo_tenant_example.md b/universal_rebuild/docs-gen/valo_tenant_example.md new file mode 100644 index 0000000..c2a8186 --- /dev/null +++ b/universal_rebuild/docs-gen/valo_tenant_example.md @@ -0,0 +1,48 @@ +# Resource nubes_valo_tenant + +Service ID: `149` + +Service Name: VALO Cloud + +[Manual](valo_tenant.md) | [Create params](valo_tenant_params_create.md) | [Modify params](valo_tenant_params_modify.md) | [Output params](valo_tenant_outputs.md) | [Operations](valo_tenant_ops.md) | [Example](valo_tenant_example.md) + +## Copy-ready manifest (`valo_tenant_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_valo_tenant" "baza" { + resource_realm = "TODO" + domain = "TODO" # Будет добавлено в зону valo.ngcloud.ru + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + valo_options = {} + s3_storage = 10 # Параметр указывается в `Gb` +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_valo_tenant.baza.state_params["имя_ключа"] +nubes_valo_tenant.baza.state_out["имя_ключа"] +nubes_valo_tenant.baza.state_params_flat["имя_ключа"] +nubes_valo_tenant.baza.state_out_flat["имя_ключа"] +nubes_valo_tenant.baza.vault_secrets["имя_ключа"] +nubes_valo_tenant.baza.vault_url +nubes_valo_tenant.baza.vault_user_path +nubes_valo_tenant.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/valo_tenant_ops.md b/universal_rebuild/docs-gen/valo_tenant_ops.md new file mode 100644 index 0000000..89cb168 --- /dev/null +++ b/universal_rebuild/docs-gen/valo_tenant_ops.md @@ -0,0 +1,15 @@ +# Resource nubes_valo_tenant + +Service ID: `149` + +Service Name: VALO Cloud + +[Manual](valo_tenant.md) | [Create params](valo_tenant_params_create.md) | [Modify params](valo_tenant_params_modify.md) | [Output params](valo_tenant_outputs.md) | [Operations](valo_tenant_ops.md) | [Example](valo_tenant_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](valo_tenant_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](valo_tenant_params_modify.md) +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/valo_tenant_outputs.md b/universal_rebuild/docs-gen/valo_tenant_outputs.md new file mode 100644 index 0000000..2d4ea5d --- /dev/null +++ b/universal_rebuild/docs-gen/valo_tenant_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_valo_tenant + +Service ID: `149` + +Service Name: VALO Cloud + +[Manual](valo_tenant.md) | [Create params](valo_tenant_params_create.md) | [Modify params](valo_tenant_params_modify.md) | [Output params](valo_tenant_outputs.md) | [Operations](valo_tenant_ops.md) | [Example](valo_tenant_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/valo_tenant_params.md b/universal_rebuild/docs-gen/valo_tenant_params.md new file mode 100644 index 0000000..2c3d14f --- /dev/null +++ b/universal_rebuild/docs-gen/valo_tenant_params.md @@ -0,0 +1,12 @@ +# Resource nubes_valo_tenant + +Service ID: `149` + +Service Name: VALO Cloud + +[Manual](valo_tenant.md) | [Create params](valo_tenant_params_create.md) | [Modify params](valo_tenant_params_modify.md) | [Output params](valo_tenant_outputs.md) | [Operations](valo_tenant_ops.md) | [Example](valo_tenant_example.md) + +## Parameters + +- [Create params](valo_tenant_params_create.md) +- [Modify params](valo_tenant_params_modify.md) diff --git a/universal_rebuild/docs-gen/valo_tenant_params_create.md b/universal_rebuild/docs-gen/valo_tenant_params_create.md new file mode 100644 index 0000000..a0e9538 --- /dev/null +++ b/universal_rebuild/docs-gen/valo_tenant_params_create.md @@ -0,0 +1,38 @@ +# Resource nubes_valo_tenant + +Service ID: `149` + +Service Name: VALO Cloud + +[Manual](valo_tenant.md) | [Create params](valo_tenant_params_create.md) | [Modify params](valo_tenant_params_modify.md) | [Output params](valo_tenant_outputs.md) | [Operations](valo_tenant_ops.md) | [Example](valo_tenant_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + +
IDCodeTypeDescriptionConstraints
655resource_realmstringfunc=getAvailableResourceRealms
656domainstringБудет добавлено в зону valo.ngcloud.ruregex=^[a-z0-9](?:[a-z0-9-]{3,61}[a-z0-9])?$; maxlength=61; minlength=3
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + +
IDCodeTypeDefaultDescriptionConstraints
657valo_optionsmap-fixed{}
658s3_storageinteger10Данные хранятся в отдельном экземпляре S3minvalue=1; maxvalue=999
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/valo_tenant_params_modify.md b/universal_rebuild/docs-gen/valo_tenant_params_modify.md new file mode 100644 index 0000000..4b07bec --- /dev/null +++ b/universal_rebuild/docs-gen/valo_tenant_params_modify.md @@ -0,0 +1,16 @@ +# Resource nubes_valo_tenant + +Service ID: `149` + +Service Name: VALO Cloud + +[Manual](valo_tenant.md) | [Create params](valo_tenant_params_create.md) | [Modify params](valo_tenant_params_modify.md) | [Output params](valo_tenant_outputs.md) | [Operations](valo_tenant_ops.md) | [Example](valo_tenant_example.md) + +## Modify params + + + + + + +
IDCodeTypeDescriptionConstraints
659valo_optionsmap-fixed
660s3_storageintegerДанные хранятся в отдельном экземпляре S3
diff --git a/universal_rebuild/docs-gen/vapp.md b/universal_rebuild/docs-gen/vapp.md new file mode 100644 index 0000000..630f47c --- /dev/null +++ b/universal_rebuild/docs-gen/vapp.md @@ -0,0 +1,13 @@ +# Resource nubes_vapp + +Service ID: `26` + +Service Name: Виртуальный каталог ВМ (vApp) + +[Manual](vapp.md) | [Create params](vapp_params_create.md) | [Modify params](vapp_params_modify.md) | [Output params](vapp_outputs.md) | [Operations](vapp_ops.md) | [Example](vapp_example.md) + +## MAN + +
+# Инструкция по развертыванию Виртуальный каталог ВМ (vApp) через платформу

## 1. Общая информация

**Виртуальный каталог ВМ (vApp)** — это логическая каталог, объединённая в единый управляемый объект. Сервис предназначен для совместного развертывания, управления жизненным циклом и сетевого взаимодействия набора связанных ВМ. Основные функции включают:
- централизованное управление включением, выключением и приостановкой группы ВМ;
- унифицированный сетевой доступ через привязанный Edge-шлюз;

### Доступные операции

**create** — Создание нового vApp с привязкой к заданным услугам VDC и Edge
**delete** — Удаление существующего vApp. Требуется предварительный перевод vApp в состояние *suspend*. Полное удаление возможно через 14 дней.
**suspend** — Остановка vApp (выключение всех ВМ внутри каталога)
**resume** — Запуск vApp (включение всех ВМ внутри каталога)

---

## 2. Параметры развертывания

Параметры берутся из операции **create**.

### UUID Услуги VDC
Уникальный идентификатор услуги «Виртуальный датацентр (vDC)».
Используется для определения вычислительной инфраструктуры, в которой будет развернут vApp.

### UUID Услуги Edge
Уникальный идентификатор услуги «Сетевой шлюз периметра (Edge)».
Обеспечивает маршрутизацию и сетевое подключение. Может быть привязан к группе VDC, поэтому выбирается отдельно.

### Имя vApp
Строгое имя, соответствующее маске формирования DNS-имени.
Используется как часть в DNS-имени при создании виртуальных машин.

---

## 3. Рекомендованные характеристики
Так как является промежуточным этапом для создания ВМ, все характеристики описываются в услуге `Виртуальная машина`

---

## 4. Выходные параметры

### Параметры vApp
Заданные при создании vApp

---

## 5. Дополнительная информация

- Привязка к VDC и Edge осуществляется раздельно, поскольку один Edge может обслуживать несколько VDC (через услугу `Группа виртуальных датацентров (groupvDC)`). Это гарантирует возможность развернуть ВМ в единой сети, но в разных виртуальных датацентрах.
- Перед удалением vApp необходимо вручную перевести его в состояние **suspend**. Удаление возможно только спустя 14 дней после этого шага.
- Операция delete удаляет весь vApp полностью, включая все виртуальные машины, связанные с ним.
- Рекомендуется заранее планировать сетевые связи и назначения DNS-имён для обеспечения корректной работы сервисов, развернутых внутри vApp.
- При проектировании инфраструктуры следует учитывать зависимости между Edge-шлюзом, VDC и размещаемыми ВМ, чтобы избежать ограничений при масштабировании и интеграции. +
diff --git a/universal_rebuild/docs-gen/vapp_example.md b/universal_rebuild/docs-gen/vapp_example.md new file mode 100644 index 0000000..cb6b098 --- /dev/null +++ b/universal_rebuild/docs-gen/vapp_example.md @@ -0,0 +1,45 @@ +# Resource nubes_vapp + +Service ID: `26` + +Service Name: Виртуальный каталог ВМ (vApp) + +[Manual](vapp.md) | [Create params](vapp_params_create.md) | [Modify params](vapp_params_modify.md) | [Output params](vapp_outputs.md) | [Operations](vapp_ops.md) | [Example](vapp_example.md) + +## Copy-ready manifest (`vapp_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_vapp" "baza" { + nsxt_uid = "TODO" # UUID Услуги `Сетевой шлюз периметра (Edge)` + vapp_name = "TODO" # Уникальное в рамках организации + vdc_uid = "TODO" # UUID Услуги `Виртуальный датацентр (vDC)` +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_vapp.baza.state_params["имя_ключа"] +nubes_vapp.baza.state_out["имя_ключа"] +nubes_vapp.baza.state_params_flat["имя_ключа"] +nubes_vapp.baza.state_out_flat["имя_ключа"] +nubes_vapp.baza.vault_secrets["имя_ключа"] +nubes_vapp.baza.vault_url +nubes_vapp.baza.vault_user_path +nubes_vapp.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/vapp_ops.md b/universal_rebuild/docs-gen/vapp_ops.md new file mode 100644 index 0000000..b787780 --- /dev/null +++ b/universal_rebuild/docs-gen/vapp_ops.md @@ -0,0 +1,15 @@ +# Resource nubes_vapp + +Service ID: `26` + +Service Name: Виртуальный каталог ВМ (vApp) + +[Manual](vapp.md) | [Create params](vapp_params_create.md) | [Modify params](vapp_params_modify.md) | [Output params](vapp_outputs.md) | [Operations](vapp_ops.md) | [Example](vapp_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](vapp_params_create.md) +- `delete` +- `reconcile` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/vapp_outputs.md b/universal_rebuild/docs-gen/vapp_outputs.md new file mode 100644 index 0000000..0ff0f8e --- /dev/null +++ b/universal_rebuild/docs-gen/vapp_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_vapp + +Service ID: `26` + +Service Name: Виртуальный каталог ВМ (vApp) + +[Manual](vapp.md) | [Create params](vapp_params_create.md) | [Modify params](vapp_params_modify.md) | [Output params](vapp_outputs.md) | [Operations](vapp_ops.md) | [Example](vapp_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/vapp_params.md b/universal_rebuild/docs-gen/vapp_params.md new file mode 100644 index 0000000..4c7addc --- /dev/null +++ b/universal_rebuild/docs-gen/vapp_params.md @@ -0,0 +1,12 @@ +# Resource nubes_vapp + +Service ID: `26` + +Service Name: Виртуальный каталог ВМ (vApp) + +[Manual](vapp.md) | [Create params](vapp_params_create.md) | [Modify params](vapp_params_modify.md) | [Output params](vapp_outputs.md) | [Operations](vapp_ops.md) | [Example](vapp_example.md) + +## Parameters + +- [Create params](vapp_params_create.md) +- [Modify params](vapp_params_modify.md) diff --git a/universal_rebuild/docs-gen/vapp_params_create.md b/universal_rebuild/docs-gen/vapp_params_create.md new file mode 100644 index 0000000..3b23cff --- /dev/null +++ b/universal_rebuild/docs-gen/vapp_params_create.md @@ -0,0 +1,34 @@ +# Resource nubes_vapp + +Service ID: `26` + +Service Name: Виртуальный каталог ВМ (vApp) + +[Manual](vapp.md) | [Create params](vapp_params_create.md) | [Modify params](vapp_params_modify.md) | [Output params](vapp_outputs.md) | [Operations](vapp_ops.md) | [Example](vapp_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + +
IDCodeTypeDescriptionConstraints
190nsxt_uiduuidК какой сети может быть подключен виртуальный каталогref_svc_id=22
191vapp_namestringИмеет строгую маску `^[a-z0-9][a-z0-9.-]{3,61}[a-z0-9]$`

Используется в формировании DNS-Имени (для виртуальных машин)
regex=^[a-z0-9][a-z0-9.-]{3,61}[a-z0-9]$; minlength=3
623vdc_uiduuidВ каких ресурсах будет создан виртуальный каталогref_svc_id=21
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. + +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/vapp_params_modify.md b/universal_rebuild/docs-gen/vapp_params_modify.md new file mode 100644 index 0000000..4fca747 --- /dev/null +++ b/universal_rebuild/docs-gen/vapp_params_modify.md @@ -0,0 +1,11 @@ +# Resource nubes_vapp + +Service ID: `26` + +Service Name: Виртуальный каталог ВМ (vApp) + +[Manual](vapp.md) | [Create params](vapp_params_create.md) | [Modify params](vapp_params_modify.md) | [Output params](vapp_outputs.md) | [Operations](vapp_ops.md) | [Example](vapp_example.md) + +## Modify params + +None. diff --git a/universal_rebuild/docs-gen/vc_complex.md b/universal_rebuild/docs-gen/vc_complex.md new file mode 100644 index 0000000..c83cece --- /dev/null +++ b/universal_rebuild/docs-gen/vc_complex.md @@ -0,0 +1,13 @@ +# Resource nubes_vc_complex + +Service ID: `113` + +Service Name: Быстрый старт + +[Manual](vc_complex.md) | [Create params](vc_complex_params_create.md) | [Modify params](vc_complex_params_modify.md) | [Output params](vc_complex_outputs.md) | [Operations](vc_complex_ops.md) | [Example](vc_complex_example.md) + +## MAN + +
+# Создает окружение для ВМ.

## Создает сервисы:
**Организация**
**Виртуальный датацентр**
**Каталог**
**Сетевой шлюз периметра**

+
diff --git a/universal_rebuild/docs-gen/vc_complex_example.md b/universal_rebuild/docs-gen/vc_complex_example.md new file mode 100644 index 0000000..90773e7 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_complex_example.md @@ -0,0 +1,59 @@ +# Resource nubes_vc_complex + +Service ID: `113` + +Service Name: Быстрый старт + +[Manual](vc_complex.md) | [Create params](vc_complex_params_create.md) | [Modify params](vc_complex_params_modify.md) | [Output params](vc_complex_outputs.md) | [Operations](vc_complex_ops.md) | [Example](vc_complex_example.md) + +## Copy-ready manifest (`vc_complex_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_vc_complex" "baza" { + resource_realm = "TODO" # Платформа для развертывания + vapp_name = "TODO" # Имя vApp + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + vdc_provider_gateway = "sandbox-v1cl1-pvdc" # Взять из свойств ресурсной платформы. Путь .vcd.providerVdc - взять KEY providerGateway Cloud Director. Влияет ресурсы будут предоставлены. Является полем (List) в свойствах рес. платформы ЛК, но сам параметр передаётся только как один String + virtual_services_count = 1 # Кол-во виртуальных сервисов, которые выделяются на AVI. Во избежании коллапса пока выделяется до 4 + ip_space_name = "internet-ipv4-v1" # Имя ip Space для внешнего IP. Целесообразнее брать самый дешёвый, так как это vip для исходящего трафика. Необходимо задавать если включен needExternalAddressSNAT + storage_config = [{"name": "", "size": 1024}] # Описывается как массив объектов, где описывается имя политики и её размер + vdc_network_pool = "nsxt-sandbox-geneve-np" + cpu_guaranteed = 20 + mem_guaranteed = 20 + segroup_name = "SEGROUP-SANDBOX-CL1-SHARED-01" # Наименование segroup, в котором будут выделяться пулы на AVI + need_external_address_snat = true # Выделяет внешний IP на Edge. Используется для SNAT всего трафика + need_enable_avi = false # Включает AVI в Cloud Director + cpu_allocated = 1 # шт + mem_allocated = 10 # gb + v_ipcount = 0 # ш +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_vc_complex.baza.state_params["имя_ключа"] +nubes_vc_complex.baza.state_out["имя_ключа"] +nubes_vc_complex.baza.state_params_flat["имя_ключа"] +nubes_vc_complex.baza.state_out_flat["имя_ключа"] +nubes_vc_complex.baza.vault_secrets["имя_ключа"] +nubes_vc_complex.baza.vault_url +nubes_vc_complex.baza.vault_user_path +nubes_vc_complex.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/vc_complex_ops.md b/universal_rebuild/docs-gen/vc_complex_ops.md new file mode 100644 index 0000000..9d016bc --- /dev/null +++ b/universal_rebuild/docs-gen/vc_complex_ops.md @@ -0,0 +1,11 @@ +# Resource nubes_vc_complex + +Service ID: `113` + +Service Name: Быстрый старт + +[Manual](vc_complex.md) | [Create params](vc_complex_params_create.md) | [Modify params](vc_complex_params_modify.md) | [Output params](vc_complex_outputs.md) | [Operations](vc_complex_ops.md) | [Example](vc_complex_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](vc_complex_params_create.md) diff --git a/universal_rebuild/docs-gen/vc_complex_outputs.md b/universal_rebuild/docs-gen/vc_complex_outputs.md new file mode 100644 index 0000000..629a059 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_complex_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_vc_complex + +Service ID: `113` + +Service Name: Быстрый старт + +[Manual](vc_complex.md) | [Create params](vc_complex_params_create.md) | [Modify params](vc_complex_params_modify.md) | [Output params](vc_complex_outputs.md) | [Operations](vc_complex_ops.md) | [Example](vc_complex_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/vc_complex_params.md b/universal_rebuild/docs-gen/vc_complex_params.md new file mode 100644 index 0000000..82b3c13 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_complex_params.md @@ -0,0 +1,12 @@ +# Resource nubes_vc_complex + +Service ID: `113` + +Service Name: Быстрый старт + +[Manual](vc_complex.md) | [Create params](vc_complex_params_create.md) | [Modify params](vc_complex_params_modify.md) | [Output params](vc_complex_outputs.md) | [Operations](vc_complex_ops.md) | [Example](vc_complex_example.md) + +## Parameters + +- [Create params](vc_complex_params_create.md) +- [Modify params](vc_complex_params_modify.md) diff --git a/universal_rebuild/docs-gen/vc_complex_params_create.md b/universal_rebuild/docs-gen/vc_complex_params_create.md new file mode 100644 index 0000000..6b0b9ec --- /dev/null +++ b/universal_rebuild/docs-gen/vc_complex_params_create.md @@ -0,0 +1,37 @@ +# Resource nubes_vc_complex + +Service ID: `113` + +Service Name: Быстрый старт + +[Manual](vc_complex.md) | [Create params](vc_complex_params_create.md) | [Modify params](vc_complex_params_modify.md) | [Output params](vc_complex_outputs.md) | [Operations](vc_complex_ops.md) | [Example](vc_complex_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + +
IDCodeTypeDescriptionConstraints
332resource_realmstringНаименование ресурсной платформыfunc=getAvailableResourceRealms
334vapp_namestringИмя vAppregex=^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + + + + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
358vdc_provider_gatewaystringsandbox-v1cl1-pvdcВзять из свойств ресурсной платформы.
Путь .vcd.providerVdc - взять KEY

providerGateway Cloud Director. Влияет ресурсы будут предоставлены. Является полем (List&lt;String&gt;) в свойствах рес. платформы ЛК, но сам параметр передаётся только как один String
359virtual_services_count1Кол-во виртуальных сервисов, которые выделяются на AVI. Во избежании коллапса пока выделяется до 4minvalue=1; maxvalue=4
360ip_space_namestringinternet-ipv4-v1Имя ip Space для внешнего IP. Целесообразнее брать самый дешёвый, так как это vip для исходящего трафика. Необходимо задавать если включен needExternalAddressSNAT
399storage_configjson[{"name": "", "size": 1024}]Описывается как массив объектов, где описывается имя политики и её размер
400vdc_network_poolstringnsxt-sandbox-geneve-np
401cpu_guaranteedinteger20value_list=20, 50, 80
402mem_guaranteedinteger20value_list=20, 50, 80
403segroup_namestringSEGROUP-SANDBOX-CL1-SHARED-01Наименование segroup, в котором будут выделяться пулы на AVI
404need_external_address_snatbooleantrueВыделяет внешний IP на Edge. Используется для SNAT всего трафикаvalue_list=false, true
405need_enable_avibooleanfalseВключает AVI в Cloud Directorvalue_list=false, true
566cpu_allocatedstring1штminvalue=1
567mem_allocatedinteger10gbminvalue=1
568v_ipcountinteger0шminvalue=0; maxvalue=20
diff --git a/universal_rebuild/docs-gen/vc_complex_params_modify.md b/universal_rebuild/docs-gen/vc_complex_params_modify.md new file mode 100644 index 0000000..b6a1be3 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_complex_params_modify.md @@ -0,0 +1,11 @@ +# Resource nubes_vc_complex + +Service ID: `113` + +Service Name: Быстрый старт + +[Manual](vc_complex.md) | [Create params](vc_complex_params_create.md) | [Modify params](vc_complex_params_modify.md) | [Output params](vc_complex_outputs.md) | [Operations](vc_complex_ops.md) | [Example](vc_complex_example.md) + +## Modify params + +None. diff --git a/universal_rebuild/docs-gen/vc_nsxt.md b/universal_rebuild/docs-gen/vc_nsxt.md new file mode 100644 index 0000000..0c8056d --- /dev/null +++ b/universal_rebuild/docs-gen/vc_nsxt.md @@ -0,0 +1,13 @@ +# Resource nubes_vc_nsxt + +Service ID: `22` + +Service Name: Сетевой шлюз периметра (Edge) + +[Manual](vc_nsxt.md) | [Create params](vc_nsxt_params_create.md) | [Modify params](vc_nsxt_params_modify.md) | [Output params](vc_nsxt_outputs.md) | [Operations](vc_nsxt_ops.md) | [Example](vc_nsxt_example.md) + +## MAN + +
+# Инструкция по развертыванию Сетевой шлюз периметра (Edge) через платформу

## 1. Общая информация

Сервис **Сетевой шлюз периметра (Edge)** предназначен для создания периметрового сетевого шлюза в рамках одного виртуального датацентра (vDC) или группы виртуальных датацентров (groupvDC).
При создании автоматически разворачивается routed-сеть с адресным пространством `10.10.102.0/24`.
Сервис обеспечивает сетевую изоляцию, маршрутизацию, а также может включать функциональность балансировщика нагрузки AVI (ALB) для последующей интеграции, включая поддержку кластеров Штурвал.

### Доступные операции

**create** — Создание нового Edge с привязкой к vDC или groupvDC и развёртыванием routed-сети.
**delete** — Удаление ранее созданного Edge. Недоступно при наличии зависимых услуг (vApp, VM, Кластер Штурвал).
**modify** — Изменение параметров и сетевых настроек существующего Edge.

---

## 2. Параметры развертывания

Ниже приведены параметры операции **create**.

### Тип родительской услуги
Определяет контекст размещения Edge.
Допустимые значения: `vdc`, `groupvdc`.
Использование:
- При выборе `vdc` обязателен параметр **UUID VDC**.
- При выборе `groupvdc` обязателен параметр **UUID Группы VDC**.

### UUID VDC
Идентификатор виртуального датацентра.
Необходимо предварительно создать vDC через услугу «Виртуальный датацентр (vDC)».
Указывается только при выборе родительского типа `vdc`.

### UUID Группы VDC
Идентификатор группы виртуальных датацентров.
Создаётся через услугу «Группа виртуальных датацентров (groupvDC)».
Используется при выборе родительского типа `groupvdc`.

### Включить ALB
Флаг активации AVI Load Balancer в Cloud Director.
Пример значения: `true`/`false`.
Нужен для развёртывания кластера Штурвал и возможности создания Virtual Services.

### Наименование segroup
Имя сервиса групп (segroup) на уровне ресурсной платформы.
Обязательно при включённом ALB.
Определяет группу, в которой будут выделяться пулы AVI для Virtual Services.

### virtualServicesCount
Количество резервируемых виртуальных сервисов (Virtual Services) на AVI.
Типичное значение: 1–10 в зависимости от нагрузки.

---

## 3. Рекомендованные характеристики

### Тестовое окружение (Test)

- Тип родительской услуги: `vdc`
- virtualServicesCount: 1–2
- ALB: выключен по умолчанию (включать только при необходимости тестирования Штурвала)
- segroup: задаётся только при включённом ALB
- VDC гарантии CPU/RAM: минимальные (поскольку изменить их после создания нельзя)

### Промышленное окружение (Production)

- Тип родительской услуги: `groupvdc` при работе с распределёнными нагрузками или `vdc` для локализованных проектов
- virtualServicesCount: 3–10, исходя из предполагаемого количества публикаций
- ALB: включён, если требуется высокая доступность сервисов или используется кластер Штурвал
- segroup: рекомендуется использовать выделенную группу под проект
- VDC гарантии CPU/RAM: повышенные, с учётом того, что изменить их после создания невозможно без пересоздания vDC

---

## 4. Выходные параметры

### Имя Edge
Уникальное название созданного сетевого шлюза, используется для ссылок и дальнейших операций.

### Имя routed-сети
Автоматически созданная routed-сеть с подсетью `10.10.102.0/24`, используется для подключения ресурсов.

### Параметры Edge
Набор параметров, указанных пользователем при создании: тип услуги, ALB, segroup, virtualServicesCount и др.
Используются в операциях modify и для анализа состояния сервиса.

---

## 5. Дополнительная информация

- В рамках сервиса **один раз при создании задаётся гарантированная доля CPU/RAM vDC**. Изменить её невозможно — требуется пересоздание vDC.
- Удаление Edge недоступно при наличии зависимых ресурсов (vApp, VM, кластер Штурвал).
- При использовании ALB необходимо корректно указывать segroup, чтобы обеспечить корректное выделение пулов AVI.
- При выборе режима `groupvdc` следует учитывать распределение нагрузки между несколькими vDC.
- SNAT для всех ресурсов внутри Edge можно активировать через операцию modify (параметры выделения VIP и ipSpace).

+
diff --git a/universal_rebuild/docs-gen/vc_nsxt_example.md b/universal_rebuild/docs-gen/vc_nsxt_example.md new file mode 100644 index 0000000..0af1946 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_nsxt_example.md @@ -0,0 +1,47 @@ +# Resource nubes_vc_nsxt + +Service ID: `22` + +Service Name: Сетевой шлюз периметра (Edge) + +[Manual](vc_nsxt.md) | [Create params](vc_nsxt_params_create.md) | [Modify params](vc_nsxt_params_modify.md) | [Output params](vc_nsxt_outputs.md) | [Operations](vc_nsxt_ops.md) | [Example](vc_nsxt_example.md) + +## Copy-ready manifest (`vc_nsxt_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_vc_nsxt" "baza" { + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + need_enable_avi = false # Включение Load Balancer + virtual_services_count = 1 # Кол-во виртуальных сервисов, которые **резервируются** на AVI + vdc_type = "vdc" # Тип родительской услуги +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_vc_nsxt.baza.state_params["имя_ключа"] +nubes_vc_nsxt.baza.state_out["имя_ключа"] +nubes_vc_nsxt.baza.state_params_flat["имя_ключа"] +nubes_vc_nsxt.baza.state_out_flat["имя_ключа"] +nubes_vc_nsxt.baza.vault_secrets["имя_ключа"] +nubes_vc_nsxt.baza.vault_url +nubes_vc_nsxt.baza.vault_user_path +nubes_vc_nsxt.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/vc_nsxt_ops.md b/universal_rebuild/docs-gen/vc_nsxt_ops.md new file mode 100644 index 0000000..03af84f --- /dev/null +++ b/universal_rebuild/docs-gen/vc_nsxt_ops.md @@ -0,0 +1,14 @@ +# Resource nubes_vc_nsxt + +Service ID: `22` + +Service Name: Сетевой шлюз периметра (Edge) + +[Manual](vc_nsxt.md) | [Create params](vc_nsxt_params_create.md) | [Modify params](vc_nsxt_params_modify.md) | [Output params](vc_nsxt_outputs.md) | [Operations](vc_nsxt_ops.md) | [Example](vc_nsxt_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](vc_nsxt_params_create.md) +- `delete` — Невозможно удалить если routed-сеть в Edge связана с: - vApp - VM - Kubernetes-кластер Штурвал Запустить операцию возможно, но будет ошибка +- `modify` — Изменение кластера. Параметры: [Modify params](vc_nsxt_params_modify.md) +- `reconcile` diff --git a/universal_rebuild/docs-gen/vc_nsxt_outputs.md b/universal_rebuild/docs-gen/vc_nsxt_outputs.md new file mode 100644 index 0000000..717cbc4 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_nsxt_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_vc_nsxt + +Service ID: `22` + +Service Name: Сетевой шлюз периметра (Edge) + +[Manual](vc_nsxt.md) | [Create params](vc_nsxt_params_create.md) | [Modify params](vc_nsxt_params_modify.md) | [Output params](vc_nsxt_outputs.md) | [Operations](vc_nsxt_ops.md) | [Example](vc_nsxt_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/vc_nsxt_params.md b/universal_rebuild/docs-gen/vc_nsxt_params.md new file mode 100644 index 0000000..2cf1cc1 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_nsxt_params.md @@ -0,0 +1,12 @@ +# Resource nubes_vc_nsxt + +Service ID: `22` + +Service Name: Сетевой шлюз периметра (Edge) + +[Manual](vc_nsxt.md) | [Create params](vc_nsxt_params_create.md) | [Modify params](vc_nsxt_params_modify.md) | [Output params](vc_nsxt_outputs.md) | [Operations](vc_nsxt_ops.md) | [Example](vc_nsxt_example.md) + +## Parameters + +- [Create params](vc_nsxt_params_create.md) +- [Modify params](vc_nsxt_params_modify.md) diff --git a/universal_rebuild/docs-gen/vc_nsxt_params_create.md b/universal_rebuild/docs-gen/vc_nsxt_params_create.md new file mode 100644 index 0000000..90c487e --- /dev/null +++ b/universal_rebuild/docs-gen/vc_nsxt_params_create.md @@ -0,0 +1,28 @@ +# Resource nubes_vc_nsxt + +Service ID: `22` + +Service Name: Сетевой шлюз периметра (Edge) + +[Manual](vc_nsxt.md) | [Create params](vc_nsxt_params_create.md) | [Modify params](vc_nsxt_params_modify.md) | [Output params](vc_nsxt_outputs.md) | [Operations](vc_nsxt_ops.md) | [Example](vc_nsxt_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + +
IDCodeTypeDescriptionConstraints
8vdc_uidstringНеобходимо, если выбран тип подключаемой VDC: `vdc`ref_svc_id=21
622vdc_group_uidstringНеобходимо, если выбран тип подключаемой VDC: `groupvdc`ref_svc_id=29
825qos_profileif (vdcUid != '&quot;) {
наборфункций1
}

elif (vdcGroupUid != &quot;&quot;) {
наборфункций2
}

else {
return &quot;Необходимо выбрать vdc или vdcgroup&quot;
}
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
340need_enable_avibooleanfalseПараметры `Наименование segroup`, `Кол-во VS на AVI` необходимо также указатьvalue_list=false, true
341virtual_services_countinteger1Во избежании коллапса пока выделяется до 4
Необходимо указывать, если включён параметр `Включить ALB`
minvalue=1; maxvalue=4
621vdc_typestringvdcПри выборе vdc обеспечивает сетевую доступность только в рамках этого vdc
При выборе groupvdc обеспечивает сетевую доступность между всеми vdc, которые включены в groupvdc
value_list=vdc, vdcGroup
diff --git a/universal_rebuild/docs-gen/vc_nsxt_params_modify.md b/universal_rebuild/docs-gen/vc_nsxt_params_modify.md new file mode 100644 index 0000000..0030cd9 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_nsxt_params_modify.md @@ -0,0 +1,18 @@ +# Resource nubes_vc_nsxt + +Service ID: `22` + +Service Name: Сетевой шлюз периметра (Edge) + +[Manual](vc_nsxt.md) | [Create params](vc_nsxt_params_create.md) | [Modify params](vc_nsxt_params_modify.md) | [Output params](vc_nsxt_outputs.md) | [Operations](vc_nsxt_ops.md) | [Example](vc_nsxt_example.md) + +## Modify params + + + + + + + + +
IDCodeTypeDescriptionConstraints
368need_enable_avibooleanПараметры `Наименование segroup`, `Кол-во VS на AVI` необходимо также указатьvalue_list=false, true
369virtual_services_countintegerВо избежании коллапса пока выделяется до 4
Необходимо указывать, если включён параметр `Включить ALB`
minvalue=1; maxvalue=4
372ip_space_namestringНеобходимо указывать, если включён параметр `Выделить VIP для SNAT`
856qos_profilestring
diff --git a/universal_rebuild/docs-gen/vc_org.md b/universal_rebuild/docs-gen/vc_org.md new file mode 100644 index 0000000..e500201 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org.md @@ -0,0 +1,13 @@ +# Resource nubes_vc_org + +Service ID: `19` + +Service Name: Организация в Cloud Director + +[Manual](vc_org.md) | [Create params](vc_org_params_create.md) | [Modify params](vc_org_params_modify.md) | [Output params](vc_org_outputs.md) | [Operations](vc_org_ops.md) | [Example](vc_org_example.md) + +## MAN + +
+# Инструкция по развертыванию Организация в Cloud Director через платформу

## 1. Общая информация

Сервис **Организация в Cloud Director** предназначен для управления изолированными организационными единицами (тенантами) внутри инфраструктуры Cloud Director. Он обеспечивает создание, модификацию и администрирование организаций, предоставление им облачных ресурсов, а также контроль уровня доступа. Сервис используется для организации рабочих окружений потребителей, управления жизненным циклом организаций и их сетевой инфраструктурой.

### Доступные операции

**create** — Создание новой организации с заданными характеристиками и типом доступа.
**delete** — Удаление организации после перехода в состояние suspend; приводит к удалению всех связанных сущностей.
**modify** — Изменение параметров внутри организации (на текущий момент поддерживается изменение ipSpaces).
**suspend** — Заморозка организации, ограничение возможности изменения и добавления сущностей.
**resume** — Разморозка организации, восстановление функций управления.

---

## 2. Параметры развертывания

Параметры входных данных операции **create**:

### Платформа для развертывания
Описание: платформа, на которой будет создана организация.
Пример значения: `ngcloud.ru`.

### Тип организации
Описание: тип создаваемой организации.
Варианты:
- `iaas` — организация с прямым доступом к облаку и авторизацией через Keycloak.
- `saas` — организация под управлением Nubes, без прямого доступа к облаку.

---

## 3. Рекомендованные характеристики

### Тестовое окружение
- Тип организации: `iaas` для обеспечения полного доступа к облачным ресурсам и самостоятельного управления.

### Промышленное окружение
- Тип организации: `saas` (упрощённая модель использования).

---

## 4. Выходные параметры

Услуга предоставляет следующие выходные параметры (формируются в процессе операций):

### Url организации
Для быстрого доступа в тенант

### Статус организации
Отражает текущее состояние и параметры.

---

## 5. Дополнительная информация

- Для конфигурации внешних IP внутри организации необходимо предварительно создать:
-- хотя бы один **Виртуальный датацентр (VDC)** привязанный к этой организации;
-- хотя бы один **Сетевой шлюз периметра (Edge Gateway)**, привязанный к vdc выше.
- Удаление организации возможно только через 14 дней после перевода в состояние suspend.
- Удаление организации приводит к удалению всех связанных сущностей: VDC, Edge Gateway, пулов IP, сетей, ВМок и иных объектов.
- Операция suspend не останавливает виртуальные машины, но блокирует любые изменения инфраструктуры внутри организации.
- Для iaas-организаций доступ осуществляется через Keycloak. +
diff --git a/universal_rebuild/docs-gen/vc_org_example.md b/universal_rebuild/docs-gen/vc_org_example.md new file mode 100644 index 0000000..41b7d1b --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_example.md @@ -0,0 +1,46 @@ +# Resource nubes_vc_org + +Service ID: `19` + +Service Name: Организация в Cloud Director + +[Manual](vc_org.md) | [Create params](vc_org_params_create.md) | [Modify params](vc_org_params_modify.md) | [Output params](vc_org_outputs.md) | [Operations](vc_org_ops.md) | [Example](vc_org_example.md) + +## Copy-ready manifest (`vc_org_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_vc_org" "baza" { + resource_realm = "TODO" # Облако в котором будет развёрнут тенант + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + organization_type = "iaas" # Доступ к организации предоставляется только при выборе `iaas` +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_vc_org.baza.state_params["имя_ключа"] +nubes_vc_org.baza.state_out["имя_ключа"] +nubes_vc_org.baza.state_params_flat["имя_ключа"] +nubes_vc_org.baza.state_out_flat["имя_ключа"] +nubes_vc_org.baza.vault_secrets["имя_ключа"] +nubes_vc_org.baza.vault_url +nubes_vc_org.baza.vault_user_path +nubes_vc_org.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/vc_org_ops.md b/universal_rebuild/docs-gen/vc_org_ops.md new file mode 100644 index 0000000..aebdbcb --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_ops.md @@ -0,0 +1,18 @@ +# Resource nubes_vc_org + +Service ID: `19` + +Service Name: Организация в Cloud Director + +[Manual](vc_org.md) | [Create params](vc_org_params_create.md) | [Modify params](vc_org_params_modify.md) | [Output params](vc_org_outputs.md) | [Operations](vc_org_ops.md) | [Example](vc_org_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](vc_org_params_create.md) +- `create_user` — . См. [nubes_vc_org_user](vc_org_user.md) +- `delete` — Удалить возможно только через 14 дней после выполнения операции `suspend` **ОСТОРЖНО: Удаление приводит к полному удалению всех сущностей внутри этого тенанта** Если существуют инстансы VDC, Edge, vApp, Vm или Kubernetes-кластер Штурвал, которые были созданы, из ЛК удалены не будут. Необходимо обратиться к `технической поддержке` для удаления инстансов +- `delete_user` — . См. [nubes_vc_org_user](vc_org_user.md) +- `modify` — Изменение кластера. Параметры: [Modify params](vc_org_params_modify.md) +- `reconcile` +- `resume` +- `suspend` — Операция **не останавливает ВМки** в облаке, но не даёт редактировать все сущности внутри тенанта diff --git a/universal_rebuild/docs-gen/vc_org_outputs.md b/universal_rebuild/docs-gen/vc_org_outputs.md new file mode 100644 index 0000000..9de11b9 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_outputs.md @@ -0,0 +1,28 @@ +# Resource nubes_vc_org + +Service ID: `19` + +Service Name: Организация в Cloud Director + +[Manual](vc_org.md) | [Create params](vc_org_params_create.md) | [Modify params](vc_org_params_modify.md) | [Output params](vc_org_outputs.md) | [Operations](vc_org_ops.md) | [Example](vc_org_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["urlConnect"]` + diff --git a/universal_rebuild/docs-gen/vc_org_params.md b/universal_rebuild/docs-gen/vc_org_params.md new file mode 100644 index 0000000..e187b07 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_params.md @@ -0,0 +1,12 @@ +# Resource nubes_vc_org + +Service ID: `19` + +Service Name: Организация в Cloud Director + +[Manual](vc_org.md) | [Create params](vc_org_params_create.md) | [Modify params](vc_org_params_modify.md) | [Output params](vc_org_outputs.md) | [Operations](vc_org_ops.md) | [Example](vc_org_example.md) + +## Parameters + +- [Create params](vc_org_params_create.md) +- [Modify params](vc_org_params_modify.md) diff --git a/universal_rebuild/docs-gen/vc_org_params_create.md b/universal_rebuild/docs-gen/vc_org_params_create.md new file mode 100644 index 0000000..28f12f0 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_params_create.md @@ -0,0 +1,36 @@ +# Resource nubes_vc_org + +Service ID: `19` + +Service Name: Организация в Cloud Director + +[Manual](vc_org.md) | [Create params](vc_org_params_create.md) | [Modify params](vc_org_params_modify.md) | [Output params](vc_org_outputs.md) | [Operations](vc_org_ops.md) | [Example](vc_org_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + +
IDCodeTypeDescriptionConstraints
418resource_realmstringВыбрать платформу из списка

**Если список не отображается**
обратитесь к сервис менеджеру с вопросом предоставления ресурсной платформы
func=getAvailableResourceRealms
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + +
IDCodeTypeDefaultDescriptionConstraints
556organization_typestringiaasДоступ к организации предоставляется только при выборе `iaas`value_list=iaas, saas
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/vc_org_params_modify.md b/universal_rebuild/docs-gen/vc_org_params_modify.md new file mode 100644 index 0000000..4142f72 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_params_modify.md @@ -0,0 +1,15 @@ +# Resource nubes_vc_org + +Service ID: `19` + +Service Name: Организация в Cloud Director + +[Manual](vc_org.md) | [Create params](vc_org_params_create.md) | [Modify params](vc_org_params_modify.md) | [Output params](vc_org_outputs.md) | [Operations](vc_org_ops.md) | [Example](vc_org_example.md) + +## Modify params + + + + + +
IDCodeTypeDescriptionConstraints
662v_ipconfigurearray-map-fixed
diff --git a/universal_rebuild/docs-gen/vc_org_saas.md b/universal_rebuild/docs-gen/vc_org_saas.md new file mode 100644 index 0000000..95ae27c --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_saas.md @@ -0,0 +1,13 @@ +# Resource nubes_vc_org_saas + +Service ID: `20` + +Service Name: Организация [DEPRECATED] + +[Manual](vc_org_saas.md) | [Create params](vc_org_saas_params_create.md) | [Modify params](vc_org_saas_params_modify.md) | [Output params](vc_org_saas_outputs.md) | [Operations](vc_org_saas_ops.md) | [Example](vc_org_saas_example.md) + +## MAN + +
+Верхнеуровневая сущность создаваемая для Заказчика.
Внутри Организация вы можете создать: Виртуальные датацентры, Каталоги. +
diff --git a/universal_rebuild/docs-gen/vc_org_saas_example.md b/universal_rebuild/docs-gen/vc_org_saas_example.md new file mode 100644 index 0000000..fc0e72e --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_saas_example.md @@ -0,0 +1,43 @@ +# Resource nubes_vc_org_saas + +Service ID: `20` + +Service Name: Организация [DEPRECATED] + +[Manual](vc_org_saas.md) | [Create params](vc_org_saas_params_create.md) | [Modify params](vc_org_saas_params_modify.md) | [Output params](vc_org_saas_outputs.md) | [Operations](vc_org_saas_ops.md) | [Example](vc_org_saas_example.md) + +## Copy-ready manifest (`vc_org_saas_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_vc_org_saas" "baza" { + resource_realm = "TODO" # Платформа для развертывания +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_vc_org_saas.baza.state_params["имя_ключа"] +nubes_vc_org_saas.baza.state_out["имя_ключа"] +nubes_vc_org_saas.baza.state_params_flat["имя_ключа"] +nubes_vc_org_saas.baza.state_out_flat["имя_ключа"] +nubes_vc_org_saas.baza.vault_secrets["имя_ключа"] +nubes_vc_org_saas.baza.vault_url +nubes_vc_org_saas.baza.vault_user_path +nubes_vc_org_saas.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/vc_org_saas_ops.md b/universal_rebuild/docs-gen/vc_org_saas_ops.md new file mode 100644 index 0000000..bcc4618 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_saas_ops.md @@ -0,0 +1,14 @@ +# Resource nubes_vc_org_saas + +Service ID: `20` + +Service Name: Организация [DEPRECATED] + +[Manual](vc_org_saas.md) | [Create params](vc_org_saas_params_create.md) | [Modify params](vc_org_saas_params_modify.md) | [Output params](vc_org_saas_outputs.md) | [Operations](vc_org_saas_ops.md) | [Example](vc_org_saas_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](vc_org_saas_params_create.md) +- `delete` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/vc_org_saas_outputs.md b/universal_rebuild/docs-gen/vc_org_saas_outputs.md new file mode 100644 index 0000000..15052c9 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_saas_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_vc_org_saas + +Service ID: `20` + +Service Name: Организация [DEPRECATED] + +[Manual](vc_org_saas.md) | [Create params](vc_org_saas_params_create.md) | [Modify params](vc_org_saas_params_modify.md) | [Output params](vc_org_saas_outputs.md) | [Operations](vc_org_saas_ops.md) | [Example](vc_org_saas_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/vc_org_saas_params.md b/universal_rebuild/docs-gen/vc_org_saas_params.md new file mode 100644 index 0000000..a9c08f3 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_saas_params.md @@ -0,0 +1,12 @@ +# Resource nubes_vc_org_saas + +Service ID: `20` + +Service Name: Организация [DEPRECATED] + +[Manual](vc_org_saas.md) | [Create params](vc_org_saas_params_create.md) | [Modify params](vc_org_saas_params_modify.md) | [Output params](vc_org_saas_outputs.md) | [Operations](vc_org_saas_ops.md) | [Example](vc_org_saas_example.md) + +## Parameters + +- [Create params](vc_org_saas_params_create.md) +- [Modify params](vc_org_saas_params_modify.md) diff --git a/universal_rebuild/docs-gen/vc_org_saas_params_create.md b/universal_rebuild/docs-gen/vc_org_saas_params_create.md new file mode 100644 index 0000000..d73866d --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_saas_params_create.md @@ -0,0 +1,32 @@ +# Resource nubes_vc_org_saas + +Service ID: `20` + +Service Name: Организация [DEPRECATED] + +[Manual](vc_org_saas.md) | [Create params](vc_org_saas_params_create.md) | [Modify params](vc_org_saas_params_modify.md) | [Output params](vc_org_saas_outputs.md) | [Operations](vc_org_saas_ops.md) | [Example](vc_org_saas_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + +
IDCodeTypeDescriptionConstraints
185resource_realmstringНаименование ресурсной платформыfunc=getAvailableResourceRealms
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. + +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/vc_org_saas_params_modify.md b/universal_rebuild/docs-gen/vc_org_saas_params_modify.md new file mode 100644 index 0000000..ad45c99 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_saas_params_modify.md @@ -0,0 +1,11 @@ +# Resource nubes_vc_org_saas + +Service ID: `20` + +Service Name: Организация [DEPRECATED] + +[Manual](vc_org_saas.md) | [Create params](vc_org_saas_params_create.md) | [Modify params](vc_org_saas_params_modify.md) | [Output params](vc_org_saas_outputs.md) | [Operations](vc_org_saas_ops.md) | [Example](vc_org_saas_example.md) + +## Modify params + +None. diff --git a/universal_rebuild/docs-gen/vc_org_user.md b/universal_rebuild/docs-gen/vc_org_user.md new file mode 100644 index 0000000..10b4e0f --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_user.md @@ -0,0 +1,27 @@ +# Resource nubes_vc_org_user + +Service: `nubes_vc_org` (ID: 19) + +[Организация в Cloud Director (основной)](vc_org.md) | [Operations](vc_org_ops.md) | [User](vc_org_user.md) | [Example](vc_org_user_example.md) + +## Create params + +**Обязательные параметры** + +None. + +**Параметры со значением по умолчанию** + + + + + +
IDCodeTypeDefaultDescriptionConstraints
871adminsarray-map-fixed[{}]
+ +## Delete params + + + + + +
IDCodeTypeDescriptionConstraints
872adminsarray-map-fixed
diff --git a/universal_rebuild/docs-gen/vc_org_user_example.md b/universal_rebuild/docs-gen/vc_org_user_example.md new file mode 100644 index 0000000..7a8afe4 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_org_user_example.md @@ -0,0 +1,33 @@ +# Resource nubes_vc_org_user — Example + +Service: `nubes_vc_org` (ID: 19) + +[Организация в Cloud Director (основной)](vc_org.md) | [Operations](vc_org_ops.md) | [User](vc_org_user.md) | [Example](vc_org_user_example.md) + +## Copy-ready manifest (`vc_org_user_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_vc_org должен быть создан заранее +# resource "nubes_vc_org" "baza" { ... } + +resource "nubes_vc_org_user" "example" { + vc_org_id = nubes_vc_org.baza.id + + # Параметры со значением по умолчанию + admins = [{}] +} +``` diff --git a/universal_rebuild/docs-gen/vc_vdc.md b/universal_rebuild/docs-gen/vc_vdc.md new file mode 100644 index 0000000..2d8fa57 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc.md @@ -0,0 +1,13 @@ +# Resource nubes_vc_vdc + +Service ID: `21` + +Service Name: Виртуальный датацентр (vDC) + +[Manual](vc_vdc.md) | [Create params](vc_vdc_params_create.md) | [Modify params](vc_vdc_params_modify.md) | [Output params](vc_vdc_outputs.md) | [Operations](vc_vdc_ops.md) | [Example](vc_vdc_example.md) + +## MAN + +
+# Инструкция по развертыванию Виртуальный датацентр (vDC) через платформу

## 1. Общая информация

**Виртуальный датацентр (vDC)** — это логическая изолированная среда в VMware Cloud Director, предназначенная для размещения и управления виртуальными машинами, сетевой инфраструктурой и ресурсами хранения. Сервис обеспечивает выделение вычислительных ресурсов под конкретную организацию и предоставляет гибкие параметры масштабирования, контроля потребления и разделения ресурсов.

### Доступные операции

**create** — Создание виртуального датацентра (vDC) с заданными параметрами CPU, RAM, Storage и сетевой конфигурацией.
**delete** — Удаление vDC. Требуется предварительный перевод vDC в состояние *suspend*. Полное удаление возможно через 14 дней.
**modify** — Внесение изменений в параметры ресурсов (CPU/RAM/Storage), выделенных для vDC.
**suspend** — Заморозка vDC. Новые ресурсы или изменения внутри vDC становятся невозможными, работа ВМ не останавливается.
**resume** — Разморозка vDC. Восстановление возможности управления сущностями внутри vDC.

---

## 2. Параметры развертывания

Ниже перечислены входные параметры операции **create**.

### UUID Организации
Уникальный идентификатор организации в Cloud Director. Перед созданием vDC требуется предварительное создание услугу `Организация в Cloud Director`.

### Provider VDC в Cloud Director
Свойство ресурсной платформы, определяющее, какой пул физических ресурсов будет использоваться.

### Network Pool в Cloud Director
Определяет возможности сетевой конфигурации, включая создание Edge Gateway и выход во внешние сети.

### Гарантированная доля ЯДЕР
Гарантированный процент вычислительных ресурсов (CPU), закрепленный за vDC. Значение устанавливается разово при создании.

### Гарантированная доля ОЗУ
Гарантированный процент оперативной памяти, закрепленный за vDC. Также задаётся один раз при создании.

### Сколько аллоцировать на VDC ЯДЕР
Количество виртуальных ядер, выделяемых в рамках vDC.

### Сколько аллоцировать на VDC ОЗУ
Количество оперативной памяти в GB, выделяемой для vDC.

### Конфигурация Storage
Набор дисковых политик и их объёмов, выделяемых для vDC. Указывается имя политики и требуемый размер (GB).

---

## 3. Рекомендованные характеристики

### Тестовое окружение

- Количество ядер CPU: 10–20
- Аллоцируемая RAM: 16–64 GB
- Гарантированная доля CPU: 20%
- Гарантированная доля RAM: 20%
- Storage:
- Политика `SATA`
- Объём: 100–300 GB

### Промышленное окружение

- Количество ядер CPU: 16–128
- Аллоцируемая RAM: 64–512 GB
- Гарантированная доля CPU: 50%
- Гарантированная доля RAM: 50%
- Storage:
- Политики уровня `SSD`
- Объём: 1–10 TB, выбор несколько политик под разные нагрузки

---

## 4. Выходные параметры

Выходные параметры формируются операцией **create** (и используются другими операциями):

### Имя vDC
Уникальный идентификатор созданного виртуального датацентра. Используется в дальнейших операциях (modify, suspend, delete).

### Параметры выделенных ресурсов
Подтверждение итогового объёма CPU/RAM/Storage, выделенных vDC. Используются для учёта и контроля потребления.

---

## 5. Дополнительная информация

- Перед созданием vDC необходимо обеспечить наличие корректно созданной организации и доступных пула ресурсов ресурсной платформы.
- Гарантированная доля CPU и RAM задаётся **однократно при создании vDC**. После развертывания изменить эти значения невозможно; для изменения необходимо пересоздать vDC.
- Удаление vDC возможно только через **14 дней после перевода в состояние *suspend***. Удаление очищает все связанные сущности (ВМ, сети, каталоги), поэтому необходимо убедиться, что данные перенесены.
- Платформа Cloud Director использует концепцию изолированных организационных ресурсов, поэтому корректная настройка Provider VDC и Network Pool является обязательной при создании vDC.
- При изменении параметров (modify) изменяются только показатели CPU, RAM и Storage. Сетевые параметры и гарантированные доли остаются неизменными.
+
diff --git a/universal_rebuild/docs-gen/vc_vdc_example.md b/universal_rebuild/docs-gen/vc_vdc_example.md new file mode 100644 index 0000000..b9134a9 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_example.md @@ -0,0 +1,51 @@ +# Resource nubes_vc_vdc + +Service ID: `21` + +Service Name: Виртуальный датацентр (vDC) + +[Manual](vc_vdc.md) | [Create params](vc_vdc_params_create.md) | [Modify params](vc_vdc_params_modify.md) | [Output params](vc_vdc_outputs.md) | [Operations](vc_vdc_ops.md) | [Example](vc_vdc_example.md) + +## Copy-ready manifest (`vc_vdc_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_vc_vdc" "baza" { + organization_uid = "TODO" # Для создания VDC предварительно необходимо создать организацию через услугу `Организация в Cloud Director` + provider_vdc = "TODO" # Приписка `2.8` - Скорость vCPU - 2800MHz И так далее... + network_provider = "TODO" + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + storage_config = [{}] # Первая политика в списке указывается как "По умолчанию" + cpu_guaranteed = 20 # % резервирования + cpu_allocated = 80 # шт + mem_allocated = 200 # gb +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_vc_vdc.baza.state_params["имя_ключа"] +nubes_vc_vdc.baza.state_out["имя_ключа"] +nubes_vc_vdc.baza.state_params_flat["имя_ключа"] +nubes_vc_vdc.baza.state_out_flat["имя_ключа"] +nubes_vc_vdc.baza.vault_secrets["имя_ключа"] +nubes_vc_vdc.baza.vault_url +nubes_vc_vdc.baza.vault_user_path +nubes_vc_vdc.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/vc_vdc_group.md b/universal_rebuild/docs-gen/vc_vdc_group.md new file mode 100644 index 0000000..1ff3cd6 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_group.md @@ -0,0 +1,13 @@ +# Resource nubes_vc_vdc_group + +Service ID: `29` + +Service Name: Группа датацентров + +[Manual](vc_vdc_group.md) | [Create params](vc_vdc_group_params_create.md) | [Modify params](vc_vdc_group_params_modify.md) | [Output params](vc_vdc_group_outputs.md) | [Operations](vc_vdc_group_ops.md) | [Example](vc_vdc_group_example.md) + +## MAN + +
+# Инструкция по развертыванию Группа виртуальных датацентров (groupvDC) через платформу

## 1. Общая информация

Сервис **Группа виртуальных датацентров (groupvDC)** предназначен для логического объединения нескольких виртуальных датацентров (vDC) в единую группу. Это позволяет растягивать SDN между разными vDC и централизованно управлять сетевой связностью. Управление инфраструктурой осуществляется через Cloud Director.
Сервис применяется в случаях, когда требуется обеспечить единое сетевое пространство для распределенных виртуальных датацентров.

### Доступные операции

**create** — Создание новой группы виртуальных датацентров.
**delete** — Удаление существующей группы vDC.
**add_vdc** — Добавление дополнительного виртуального датацентра в группу.
**remove_vdc** — Удаление ранее добавленного виртуального датацентра из группы.

---

## 2. Параметры развертывания

Параметры операции **create**:

### UUID VDC
Идентификатор виртуального датацентра, который будет являться первичным в группе.
Описание: требуется предварительно создать виртуальный датацентр с помощью услуги `Виртуальный датацентр (vDC)`.

---

## 3. Рекомендованные характеристики

### Тестовое окружение
- Для тестового окружения создавать группу VDC нет необходимости, так как это создаёт дополнительный слой абстракции в Cloud Director

### Промышленное окружение
- Для промышленного окружения, если в тенанте существуют разные VDC, создание groupvdc позволит снизить сетевые издержки (за счёт общей сети)

---

## 4. Выходные параметры

### Параметры groupvdc
Набор параметров, указанных пользователем при создании

---

## 5. Дополнительная информация
- Группа vDC используется для растягивания SDN между несколькими виртуальными датацентрами. Управление всеми сетевыми элементами внутри группы выполняется Cloud Director.
- Удалить первичный vDC (тот, что был указан при операции **create**) невозможно. Для его удаления необходимо удалить всю группу и создать новую.
- Перед добавлением любого vDC в группу он должен быть предварительно развернут через сервис `Виртуальный датацентр (vDC)`.
- Сети создаются не в этой услуге, а в услуге `Сетевой шлюз периметра (Edge)`. В ней необходимо будет выбрать тип `groupvdc` +
diff --git a/universal_rebuild/docs-gen/vc_vdc_group_example.md b/universal_rebuild/docs-gen/vc_vdc_group_example.md new file mode 100644 index 0000000..9d838a9 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_group_example.md @@ -0,0 +1,43 @@ +# Resource nubes_vc_vdc_group + +Service ID: `29` + +Service Name: Группа датацентров + +[Manual](vc_vdc_group.md) | [Create params](vc_vdc_group_params_create.md) | [Modify params](vc_vdc_group_params_modify.md) | [Output params](vc_vdc_group_outputs.md) | [Operations](vc_vdc_group_ops.md) | [Example](vc_vdc_group_example.md) + +## Copy-ready manifest (`vc_vdc_group_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_vc_vdc_group" "baza" { + vdc_uid = "TODO" +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_vc_vdc_group.baza.state_params["имя_ключа"] +nubes_vc_vdc_group.baza.state_out["имя_ключа"] +nubes_vc_vdc_group.baza.state_params_flat["имя_ключа"] +nubes_vc_vdc_group.baza.state_out_flat["имя_ключа"] +nubes_vc_vdc_group.baza.vault_secrets["имя_ключа"] +nubes_vc_vdc_group.baza.vault_url +nubes_vc_vdc_group.baza.vault_user_path +nubes_vc_vdc_group.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/vc_vdc_group_ops.md b/universal_rebuild/docs-gen/vc_vdc_group_ops.md new file mode 100644 index 0000000..ed3ebe7 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_group_ops.md @@ -0,0 +1,15 @@ +# Resource nubes_vc_vdc_group + +Service ID: `29` + +Service Name: Группа датацентров + +[Manual](vc_vdc_group.md) | [Create params](vc_vdc_group_params_create.md) | [Modify params](vc_vdc_group_params_modify.md) | [Output params](vc_vdc_group_outputs.md) | [Operations](vc_vdc_group_ops.md) | [Example](vc_vdc_group_example.md) + +## Operations + +- `add_vdc` — **Не нужно** выбирать UUID VDC, который уже был добавлен в группу. См. [nubes_vc_vdc_group_vdc](vc_vdc_group_vdc.md) +- `create` — Создание кластера. Параметры: [Create params](vc_vdc_group_params_create.md) +- `delete` +- `reconcile` +- `remove_vdc` — . См. [nubes_vc_vdc_group_vdc](vc_vdc_group_vdc.md) diff --git a/universal_rebuild/docs-gen/vc_vdc_group_outputs.md b/universal_rebuild/docs-gen/vc_vdc_group_outputs.md new file mode 100644 index 0000000..5714cde --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_group_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_vc_vdc_group + +Service ID: `29` + +Service Name: Группа датацентров + +[Manual](vc_vdc_group.md) | [Create params](vc_vdc_group_params_create.md) | [Modify params](vc_vdc_group_params_modify.md) | [Output params](vc_vdc_group_outputs.md) | [Operations](vc_vdc_group_ops.md) | [Example](vc_vdc_group_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/vc_vdc_group_params.md b/universal_rebuild/docs-gen/vc_vdc_group_params.md new file mode 100644 index 0000000..d292ab9 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_group_params.md @@ -0,0 +1,12 @@ +# Resource nubes_vc_vdc_group + +Service ID: `29` + +Service Name: Группа датацентров + +[Manual](vc_vdc_group.md) | [Create params](vc_vdc_group_params_create.md) | [Modify params](vc_vdc_group_params_modify.md) | [Output params](vc_vdc_group_outputs.md) | [Operations](vc_vdc_group_ops.md) | [Example](vc_vdc_group_example.md) + +## Parameters + +- [Create params](vc_vdc_group_params_create.md) +- [Modify params](vc_vdc_group_params_modify.md) diff --git a/universal_rebuild/docs-gen/vc_vdc_group_params_create.md b/universal_rebuild/docs-gen/vc_vdc_group_params_create.md new file mode 100644 index 0000000..624e982 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_group_params_create.md @@ -0,0 +1,20 @@ +# Resource nubes_vc_vdc_group + +Service ID: `29` + +Service Name: Группа датацентров + +[Manual](vc_vdc_group.md) | [Create params](vc_vdc_group_params_create.md) | [Modify params](vc_vdc_group_params_modify.md) | [Output params](vc_vdc_group_outputs.md) | [Operations](vc_vdc_group_ops.md) | [Example](vc_vdc_group_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + +
IDCodeTypeDescriptionConstraints
618vdc_uiduuidref_svc_id=21
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. diff --git a/universal_rebuild/docs-gen/vc_vdc_group_params_modify.md b/universal_rebuild/docs-gen/vc_vdc_group_params_modify.md new file mode 100644 index 0000000..721de57 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_group_params_modify.md @@ -0,0 +1,11 @@ +# Resource nubes_vc_vdc_group + +Service ID: `29` + +Service Name: Группа датацентров + +[Manual](vc_vdc_group.md) | [Create params](vc_vdc_group_params_create.md) | [Modify params](vc_vdc_group_params_modify.md) | [Output params](vc_vdc_group_outputs.md) | [Operations](vc_vdc_group_ops.md) | [Example](vc_vdc_group_example.md) + +## Modify params + +None. diff --git a/universal_rebuild/docs-gen/vc_vdc_group_vdc.md b/universal_rebuild/docs-gen/vc_vdc_group_vdc.md new file mode 100644 index 0000000..0bf40c0 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_group_vdc.md @@ -0,0 +1,13 @@ +# Resource nubes_vc_vdc_group_vdc + +Service: `nubes_vc_vdc_group` (ID: 29) + +[Группа датацентров (основной)](vc_vdc_group.md) | [Operations](vc_vdc_group_ops.md) | [Vdc](vc_vdc_group_vdc.md) | [Example](vc_vdc_group_vdc_example.md) + +## Create params + +None. + +## Delete params + +None. diff --git a/universal_rebuild/docs-gen/vc_vdc_group_vdc_example.md b/universal_rebuild/docs-gen/vc_vdc_group_vdc_example.md new file mode 100644 index 0000000..1fca2a8 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_group_vdc_example.md @@ -0,0 +1,30 @@ +# Resource nubes_vc_vdc_group_vdc — Example + +Service: `nubes_vc_vdc_group` (ID: 29) + +[Группа датацентров (основной)](vc_vdc_group.md) | [Operations](vc_vdc_group_ops.md) | [Vdc](vc_vdc_group_vdc.md) | [Example](vc_vdc_group_vdc_example.md) + +## Copy-ready manifest (`vc_vdc_group_vdc_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} + +# Родительский ресурс — nubes_vc_vdc_group должен быть создан заранее +# resource "nubes_vc_vdc_group" "baza" { ... } + +resource "nubes_vc_vdc_group_vdc" "example" { + vc_vdc_group_id = nubes_vc_vdc_group.baza.id +} +``` diff --git a/universal_rebuild/docs-gen/vc_vdc_ops.md b/universal_rebuild/docs-gen/vc_vdc_ops.md new file mode 100644 index 0000000..b1a1776 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_ops.md @@ -0,0 +1,16 @@ +# Resource nubes_vc_vdc + +Service ID: `21` + +Service Name: Виртуальный датацентр (vDC) + +[Manual](vc_vdc.md) | [Create params](vc_vdc_params_create.md) | [Modify params](vc_vdc_params_modify.md) | [Output params](vc_vdc_outputs.md) | [Operations](vc_vdc_ops.md) | [Example](vc_vdc_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](vc_vdc_params_create.md) +- `delete` — Удалить возможно только через 14 дней после выполнения операции `suspend` **ОСТОРЖНО: Удаление приводит к полному удалению всех сущностей внутри этого VDC** Если существуют инстансы Edge, vApp, Vm или Kubernetes-кластер Штурвал, которые были созданы, из ЛК удалены не будут. Необходимо обратиться к `технической поддержке` для удаления инстансов +- `modify` — Изменение кластера. Параметры: [Modify params](vc_vdc_params_modify.md) +- `reconcile` +- `resume` +- `suspend` — Операция **не останавливает ВМки** в облаке, но не даёт редактировать все сущности внутри VDC diff --git a/universal_rebuild/docs-gen/vc_vdc_outputs.md b/universal_rebuild/docs-gen/vc_vdc_outputs.md new file mode 100644 index 0000000..a435292 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_outputs.md @@ -0,0 +1,28 @@ +# Resource nubes_vc_vdc + +Service ID: `21` + +Service Name: Виртуальный датацентр (vDC) + +[Manual](vc_vdc.md) | [Create params](vc_vdc_params_create.md) | [Modify params](vc_vdc_params_modify.md) | [Output params](vc_vdc_outputs.md) | [Operations](vc_vdc_ops.md) | [Example](vc_vdc_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["vdcName"]` + diff --git a/universal_rebuild/docs-gen/vc_vdc_params.md b/universal_rebuild/docs-gen/vc_vdc_params.md new file mode 100644 index 0000000..03c0037 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_params.md @@ -0,0 +1,12 @@ +# Resource nubes_vc_vdc + +Service ID: `21` + +Service Name: Виртуальный датацентр (vDC) + +[Manual](vc_vdc.md) | [Create params](vc_vdc_params_create.md) | [Modify params](vc_vdc_params_modify.md) | [Output params](vc_vdc_outputs.md) | [Operations](vc_vdc_ops.md) | [Example](vc_vdc_example.md) + +## Parameters + +- [Create params](vc_vdc_params_create.md) +- [Modify params](vc_vdc_params_modify.md) diff --git a/universal_rebuild/docs-gen/vc_vdc_params_create.md b/universal_rebuild/docs-gen/vc_vdc_params_create.md new file mode 100644 index 0000000..5529ac4 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_params_create.md @@ -0,0 +1,41 @@ +# Resource nubes_vc_vdc + +Service ID: `21` + +Service Name: Виртуальный датацентр (vDC) + +[Manual](vc_vdc.md) | [Create params](vc_vdc_params_create.md) | [Modify params](vc_vdc_params_modify.md) | [Output params](vc_vdc_outputs.md) | [Operations](vc_vdc_ops.md) | [Example](vc_vdc_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + +
IDCodeTypeDescriptionConstraints
30organization_uiduuidДля создания VDC предварительно необходимо создать организацию через услугу `Организация в Cloud Director`ref_svc_id=19
335provider_vdcstringПриписка `2.8` - Скорость vCPU - 2800MHz
И так далее...
746network_providerstring
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
361storage_configarray-map-fixed[{}]Первая политика в списке указывается как &quot;По умолчанию&quot;
397cpu_guaranteedinteger20Свойство нельзя изменить после созданияvalue_list=20, 50, 80
557cpu_allocatedinteger80штminvalue=1; maxvalue=1000
558mem_allocatedinteger200gbminvalue=1; maxvalue=4096
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/vc_vdc_params_modify.md b/universal_rebuild/docs-gen/vc_vdc_params_modify.md new file mode 100644 index 0000000..4bb0906 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vdc_params_modify.md @@ -0,0 +1,17 @@ +# Resource nubes_vc_vdc + +Service ID: `21` + +Service Name: Виртуальный датацентр (vDC) + +[Manual](vc_vdc.md) | [Create params](vc_vdc_params_create.md) | [Modify params](vc_vdc_params_modify.md) | [Output params](vc_vdc_outputs.md) | [Operations](vc_vdc_ops.md) | [Example](vc_vdc_example.md) + +## Modify params + + + + + + + +
IDCodeTypeDescriptionConstraints
560cpu_allocatedintegerштminvalue=1; maxvalue=999
561mem_allocatedintegergbminvalue=1; maxvalue=1024
562storage_configarray-map-fixedПервая политика в списке указывается как &quot;По умолчанию&quot;
diff --git a/universal_rebuild/docs-gen/vc_vm.md b/universal_rebuild/docs-gen/vc_vm.md new file mode 100644 index 0000000..e0c84ef --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm.md @@ -0,0 +1,13 @@ +# Resource nubes_vc_vm + +Service ID: `23` + +Service Name: VM в Cloud Director (старый формат) (vc_vm) + +[Manual](vc_vm.md) | [Create params](vc_vm_params_create.md) | [Modify params](vc_vm_params_modify.md) | [Output params](vc_vm_outputs.md) | [Operations](vc_vm_ops.md) | [Example](vc_vm_example.md) + +## MAN + +
+Виртуальная машина без каких-либо особенностей.
Данная услуга запускает vc_ip для выдачи белого адреса и подключения к ВМ +
diff --git a/universal_rebuild/docs-gen/vc_vm_example.md b/universal_rebuild/docs-gen/vc_vm_example.md new file mode 100644 index 0000000..948577e --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_example.md @@ -0,0 +1,52 @@ +# Resource nubes_vc_vm + +Service ID: `23` + +Service Name: VM в Cloud Director (старый формат) (vc_vm) + +[Manual](vc_vm.md) | [Create params](vc_vm_params_create.md) | [Modify params](vc_vm_params_modify.md) | [Output params](vc_vm_outputs.md) | [Operations](vc_vm_ops.md) | [Example](vc_vm_example.md) + +## Copy-ready manifest (`vc_vm_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_vc_vm" "baza" { + vapp_uid = "TODO" # InstanceUid vApp. vApp должен быть создан + ip_space_name = "TODO" # Брать из свойств ресурсной платформы .vcd.ipSpace Имя IP-space для выделения внешнего IP (IP выделяется обязательно) + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + vm_name = "vm0001" # Имя ВМ. Не поддерживает спец-символы + vm_cpu = 2 # CPU + vm_ram = 2 # RAM (GB) + vm_disksize = 10 # Размер диска под сервис (GB) + template_name = "RockyLinux_9-16G" # ОС + access_ip_list = "79.111.119.78/32 185.247.187.1/32" # Вставить содержимое из 'curl ifconfig.io' IP адреса в CIDR формате через пробел для настройки аксес листов +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_vc_vm.baza.state_params["имя_ключа"] +nubes_vc_vm.baza.state_out["имя_ключа"] +nubes_vc_vm.baza.state_params_flat["имя_ключа"] +nubes_vc_vm.baza.state_out_flat["имя_ключа"] +nubes_vc_vm.baza.vault_secrets["имя_ключа"] +nubes_vc_vm.baza.vault_url +nubes_vc_vm.baza.vault_user_path +nubes_vc_vm.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/vc_vm_ops.md b/universal_rebuild/docs-gen/vc_vm_ops.md new file mode 100644 index 0000000..ff1e0cf --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_ops.md @@ -0,0 +1,15 @@ +# Resource nubes_vc_vm + +Service ID: `23` + +Service Name: VM в Cloud Director (старый формат) (vc_vm) + +[Manual](vc_vm.md) | [Create params](vc_vm_params_create.md) | [Modify params](vc_vm_params_modify.md) | [Output params](vc_vm_outputs.md) | [Operations](vc_vm_ops.md) | [Example](vc_vm_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](vc_vm_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](vc_vm_params_modify.md) +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/vc_vm_outputs.md b/universal_rebuild/docs-gen/vc_vm_outputs.md new file mode 100644 index 0000000..d5163ba --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_vc_vm + +Service ID: `23` + +Service Name: VM в Cloud Director (старый формат) (vc_vm) + +[Manual](vc_vm.md) | [Create params](vc_vm_params_create.md) | [Modify params](vc_vm_params_modify.md) | [Output params](vc_vm_outputs.md) | [Operations](vc_vm_ops.md) | [Example](vc_vm_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/vc_vm_params.md b/universal_rebuild/docs-gen/vc_vm_params.md new file mode 100644 index 0000000..0ff6c3e --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_params.md @@ -0,0 +1,12 @@ +# Resource nubes_vc_vm + +Service ID: `23` + +Service Name: VM в Cloud Director (старый формат) (vc_vm) + +[Manual](vc_vm.md) | [Create params](vc_vm_params_create.md) | [Modify params](vc_vm_params_modify.md) | [Output params](vc_vm_outputs.md) | [Operations](vc_vm_ops.md) | [Example](vc_vm_example.md) + +## Parameters + +- [Create params](vc_vm_params_create.md) +- [Modify params](vc_vm_params_modify.md) diff --git a/universal_rebuild/docs-gen/vc_vm_params_create.md b/universal_rebuild/docs-gen/vc_vm_params_create.md new file mode 100644 index 0000000..5bed0ba --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_params_create.md @@ -0,0 +1,42 @@ +# Resource nubes_vc_vm + +Service ID: `23` + +Service Name: VM в Cloud Director (старый формат) (vc_vm) + +[Manual](vc_vm.md) | [Create params](vc_vm_params_create.md) | [Modify params](vc_vm_params_modify.md) | [Output params](vc_vm_outputs.md) | [Operations](vc_vm_ops.md) | [Example](vc_vm_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + +
IDCodeTypeDescriptionConstraints
33vapp_uiduuidInstanceUid vApp. vApp должен быть созданref_svc_id=26
406ip_space_namestringБрать из свойств ресурсной платформы
.vcd.ipSpace

Имя IP-space для выделения внешнего IP (IP выделяется обязательно)
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
35vm_namestringvm0001Имя ВМ. Не поддерживает спец-символыregex=^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
36vm_cpustring2CPU
37vm_ramstring2RAM (GB)
38vm_disksizestring10Размер диска под сервис (GB)
176template_namestringRockyLinux_9-16GОСvalue_list=RockyLinux_9-16G, OracleLinux_9-16G, Ubuntu_24-20G, Ubuntu_22-20G
177access_ip_liststring79.111.119.78/32 185.247.187.1/32IP адреса в CIDR формате через пробел для настройки аксес листов
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/vc_vm_params_modify.md b/universal_rebuild/docs-gen/vc_vm_params_modify.md new file mode 100644 index 0000000..0ec4505 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_params_modify.md @@ -0,0 +1,18 @@ +# Resource nubes_vc_vm + +Service ID: `23` + +Service Name: VM в Cloud Director (старый формат) (vc_vm) + +[Manual](vc_vm.md) | [Create params](vc_vm_params_create.md) | [Modify params](vc_vm_params_modify.md) | [Output params](vc_vm_outputs.md) | [Operations](vc_vm_ops.md) | [Example](vc_vm_example.md) + +## Modify params + + + + + + + + +
IDCodeTypeDescriptionConstraints
186vm_cpuintegerCPU
187vm_ramintegerRAM
188vm_disksizeintegerРазмер диска под сервис (GB)
189access_ip_liststringIP адреса в CIDR формате через пробел для настройки аксес листов
diff --git a/universal_rebuild/docs-gen/vc_vm_v2.md b/universal_rebuild/docs-gen/vc_vm_v2.md new file mode 100644 index 0000000..ada3402 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_v2.md @@ -0,0 +1,13 @@ +# Resource nubes_vc_vm_v2 + +Service ID: `27` + +Service Name: VM в Cloud Director (vc_vmV2) + +[Manual](vc_vm_v2.md) | [Create params](vc_vm_v2_params_create.md) | [Modify params](vc_vm_v2_params_modify.md) | [Output params](vc_vm_v2_outputs.md) | [Operations](vc_vm_v2_ops.md) | [Example](vc_vm_v2_example.md) + +## MAN + +
+Manual not available. +
diff --git a/universal_rebuild/docs-gen/vc_vm_v2_example.md b/universal_rebuild/docs-gen/vc_vm_v2_example.md new file mode 100644 index 0000000..d0401de --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_v2_example.md @@ -0,0 +1,45 @@ +# Resource nubes_vc_vm_v2 + +Service ID: `27` + +Service Name: VM в Cloud Director (vc_vmV2) + +[Manual](vc_vm_v2.md) | [Create params](vc_vm_v2_params_create.md) | [Modify params](vc_vm_v2_params_modify.md) | [Output params](vc_vm_v2_outputs.md) | [Operations](vc_vm_v2_ops.md) | [Example](vc_vm_v2_example.md) + +## Copy-ready manifest (`vc_vm_v2_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_vc_vm_v2" "baza" { + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + server_list_json = [{}] # Необходимо изменить vappUid и ipSpaceName Пример конфигурации взять по ссылке ниже Объект серверов вида [{}] (Map(Object)) Более подробнее смотреть в README.md (https://gitea.mgmt.nubes.ru/cloudServices/vcVmV2) +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_vc_vm_v2.baza.state_params["имя_ключа"] +nubes_vc_vm_v2.baza.state_out["имя_ключа"] +nubes_vc_vm_v2.baza.state_params_flat["имя_ключа"] +nubes_vc_vm_v2.baza.state_out_flat["имя_ключа"] +nubes_vc_vm_v2.baza.vault_secrets["имя_ключа"] +nubes_vc_vm_v2.baza.vault_url +nubes_vc_vm_v2.baza.vault_user_path +nubes_vc_vm_v2.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/vc_vm_v2_ops.md b/universal_rebuild/docs-gen/vc_vm_v2_ops.md new file mode 100644 index 0000000..9d940af --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_v2_ops.md @@ -0,0 +1,15 @@ +# Resource nubes_vc_vm_v2 + +Service ID: `27` + +Service Name: VM в Cloud Director (vc_vmV2) + +[Manual](vc_vm_v2.md) | [Create params](vc_vm_v2_params_create.md) | [Modify params](vc_vm_v2_params_modify.md) | [Output params](vc_vm_v2_outputs.md) | [Operations](vc_vm_v2_ops.md) | [Example](vc_vm_v2_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](vc_vm_v2_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](vc_vm_v2_params_modify.md) +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/vc_vm_v2_outputs.md b/universal_rebuild/docs-gen/vc_vm_v2_outputs.md new file mode 100644 index 0000000..3b9bace --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_v2_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_vc_vm_v2 + +Service ID: `27` + +Service Name: VM в Cloud Director (vc_vmV2) + +[Manual](vc_vm_v2.md) | [Create params](vc_vm_v2_params_create.md) | [Modify params](vc_vm_v2_params_modify.md) | [Output params](vc_vm_v2_outputs.md) | [Operations](vc_vm_v2_ops.md) | [Example](vc_vm_v2_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/vc_vm_v2_params.md b/universal_rebuild/docs-gen/vc_vm_v2_params.md new file mode 100644 index 0000000..e60c762 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_v2_params.md @@ -0,0 +1,12 @@ +# Resource nubes_vc_vm_v2 + +Service ID: `27` + +Service Name: VM в Cloud Director (vc_vmV2) + +[Manual](vc_vm_v2.md) | [Create params](vc_vm_v2_params_create.md) | [Modify params](vc_vm_v2_params_modify.md) | [Output params](vc_vm_v2_outputs.md) | [Operations](vc_vm_v2_ops.md) | [Example](vc_vm_v2_example.md) + +## Parameters + +- [Create params](vc_vm_v2_params_create.md) +- [Modify params](vc_vm_v2_params_modify.md) diff --git a/universal_rebuild/docs-gen/vc_vm_v2_params_create.md b/universal_rebuild/docs-gen/vc_vm_v2_params_create.md new file mode 100644 index 0000000..b1c20cc --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_v2_params_create.md @@ -0,0 +1,32 @@ +# Resource nubes_vc_vm_v2 + +Service ID: `27` + +Service Name: VM в Cloud Director (vc_vmV2) + +[Manual](vc_vm_v2.md) | [Create params](vc_vm_v2_params_create.md) | [Modify params](vc_vm_v2_params_modify.md) | [Output params](vc_vm_v2_outputs.md) | [Operations](vc_vm_v2_ops.md) | [Example](vc_vm_v2_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + +None. + +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + +
IDCodeTypeDefaultDescriptionConstraints
301server_list_jsonjson[{}]Необходимо изменить vappUid и ipSpaceName
Пример конфигурации взять по ссылке ниже

Объект серверов вида [{}] (Map(Object))
Более подробнее смотреть в README.md (https://gitea.mgmt.nubes.ru/cloudServices/vcVmV2)
maxlength=65536; minlength=10
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/vc_vm_v2_params_modify.md b/universal_rebuild/docs-gen/vc_vm_v2_params_modify.md new file mode 100644 index 0000000..eedbec8 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_v2_params_modify.md @@ -0,0 +1,15 @@ +# Resource nubes_vc_vm_v2 + +Service ID: `27` + +Service Name: VM в Cloud Director (vc_vmV2) + +[Manual](vc_vm_v2.md) | [Create params](vc_vm_v2_params_create.md) | [Modify params](vc_vm_v2_params_modify.md) | [Output params](vc_vm_v2_outputs.md) | [Operations](vc_vm_v2_ops.md) | [Example](vc_vm_v2_example.md) + +## Modify params + + + + + +
IDCodeTypeDescriptionConstraints
302server_list_jsonjsonОбъект серверов вида [{}] (Map(Object))
Более подробнее смотреть в README.md (https://gitea.mgmt.nubes.ru/cloudServices/vcVmV2)
maxlength=65536; minlength=10
diff --git a/universal_rebuild/docs-gen/vc_vm_v3.md b/universal_rebuild/docs-gen/vc_vm_v3.md new file mode 100644 index 0000000..95856d8 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_v3.md @@ -0,0 +1,13 @@ +# Resource nubes_vc_vm_v3 + +Service ID: `28` + +Service Name: Виртуальная машина + +[Manual](vc_vm_v3.md) | [Create params](vc_vm_v3_params_create.md) | [Modify params](vc_vm_v3_params_modify.md) | [Output params](vc_vm_v3_outputs.md) | [Operations](vc_vm_v3_ops.md) | [Example](vc_vm_v3_example.md) + +## MAN + +
+# Документация по разворачиванию ВМ в Личном кабинете

Данный сервис позволяет разворачивать виртуальные машины (ВМ) непосредственно из Личного кабинета (ЛК).

## Доступные операции
- **create** — Создание виртуальной машины
- **delete** — Удаление виртуальной машины
- **resume** — Запуск виртуальной машины
- **suspend** — Остановка виртуальной машины

---

## Параметры для развёртывания ВМ

### Обязательные параметры:

**vappUid**
UUID vApp, в которой будет создаваться виртуальная машина.
*Пример: WZ00400*

**vmName**
Уникальное имя виртуальной машины.
*Пример: test-vm*

**vmCpu**
Количество ядер процессора. Должно быть больше 0.
*Пример: 1*

**vmRam**
Объем оперативной памяти в гигабайтах. Должно быть больше 0.
*Пример: 1*


**accessPortList**
Белый список портов для доступа к виртуальной машине извне в формате JSON.
*Пример: ["22","10050]*

**imageVm**
Образ операционной системы для развёртывания.
*Доступные значения: RockyLinux_9-16G-cloudinit, Ubuntu_22-20G, Debian_13-20G*

**userLogin**
Логин пользователя для SSH-доступа.
*По умолчанию: myuser*

**userPublicKey**
Публичный SSH-ключ пользователя в формате OpenSSH.
*Пример: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...*

**needAddZabbixTemplate**
Значение истина\ложь, определяющее будет ли добавлен хост в zabbix.
*Пример: true*

### Опциональные параметры:

**accessIpList**
Белый список IP-адресов для доступа к виртуальной машине в формате JSON. Если оставить пустым, вм будет доступена со всех адресов.
*Пример: ["192.168.1.1", "10.0.0.5"]*

**vmDisk**
Размер дополнительного диска в гигабайтах. Должно быть больше 0.
*Пример: 50*

**ipSpaceName**
Внешний IP-адрес. Если не требуется — укажите значение "no-needed" (В нем не будет работать сбор метрик zabbix).

**cloudInit**
YAML-скрипт для кастомизации системы через cloud-init.

---

## Доступные образы операционных систем

### RockyLinux_9-16G-cloudinit
Базовый образ на основе Rocky Linux 9 (Rocky-9.6-x86_64-minimal) для серверных задач.
- Размер системного диска: 16 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM

### Ubuntu_22-20G
Образ на основе Ubuntu Server 22.04 LTS для облачного окружения.
- Размер системного диска: 20 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM

### Debian_13-20G
Образ на основе Debian 13 (Trixie) для стабильной серверной работы.
- Размер системного диска: 20 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM

---

## Пример использования Cloud-init

```yaml
users:
- name: myuser
sudo: ALL=(ALL) NOPASSWD:ALL
groups: sudo
shell: /bin/bash
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...

packages:
- nginx

runcmd:
- systemctl enable --now nginx
- systemctl restart nginx
```

---

## Результат выполнения

После успешного развёртывания в Личном кабинете появится новая виртуальная машина с заданными характеристиками. SSH-доступ осуществляется с использованием указанных логина и публичного ключа.

---

## Важные примечания

### Особенности работы:
- Для отключения внешнего IP укажите значение "no-needed" в параметре ipSpaceName
- Параметр cloudInit является опциональным

### Ограничения:
- Не рекомендуется использовать продолжительные инструкции в cloud-init (таймаут 5 минут)
- Не поддерживается запись файлов через cloud-init
- Не реализовано создание резервных копий ВМ

---

## Диагностика проблем с cloud-init

### Основной лог-файл:
```bash
/var/log/cloud-init.log
```

### Пакет не устанавливается:
- Проверьте доступность пакета в репозитории
- Убедитесь в правильности написания имени пакета
- Попробуйте установить вручную: `apt install <имя_пакета>` (Debian/Ubuntu) или `dnf install <имя_пакета>` (Rocky Linux)

### Команда не выполняется:
- Проверьте наличие требуемой утилиты в системе
- Убедитесь в правильности синтаксиса команды
- Попробуйте выполнить команду вручную для диагностики +
diff --git a/universal_rebuild/docs-gen/vc_vm_v3_example.md b/universal_rebuild/docs-gen/vc_vm_v3_example.md new file mode 100644 index 0000000..7512e9a --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_v3_example.md @@ -0,0 +1,53 @@ +# Resource nubes_vc_vm_v3 + +Service ID: `28` + +Service Name: Виртуальная машина + +[Manual](vc_vm_v3.md) | [Create params](vc_vm_v3_params_create.md) | [Modify params](vc_vm_v3_params_modify.md) | [Output params](vc_vm_v3_outputs.md) | [Operations](vc_vm_v3_ops.md) | [Example](vc_vm_v3_example.md) + +## Copy-ready manifest (`vc_vm_v3_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_vc_vm_v3" "baza" { + vapp_uid = "TODO" + ip_space_name = "TODO" + image_vm = "TODO" + user_public_key = "TODO" # Публичная часть SSH-Ключа для пользователя + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + vm_name = "web01" + vm_cpu = 1 # шт + vm_ram = 1 # Gb + user_login = "myuser" # Учётка SSH + access_port_list = ["22"] # По каким портам открыть доступ к ВМ. Порты 22, 10050 проставляются автоматически Пока доступно: 22 - SSH, 80 - HTTP, 443 - HTTPS, 10050 - ZABBIX +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_vc_vm_v3.baza.state_params["имя_ключа"] +nubes_vc_vm_v3.baza.state_out["имя_ключа"] +nubes_vc_vm_v3.baza.state_params_flat["имя_ключа"] +nubes_vc_vm_v3.baza.state_out_flat["имя_ключа"] +nubes_vc_vm_v3.baza.vault_secrets["имя_ключа"] +nubes_vc_vm_v3.baza.vault_url +nubes_vc_vm_v3.baza.vault_user_path +nubes_vc_vm_v3.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/vc_vm_v3_ops.md b/universal_rebuild/docs-gen/vc_vm_v3_ops.md new file mode 100644 index 0000000..db02218 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_v3_ops.md @@ -0,0 +1,17 @@ +# Resource nubes_vc_vm_v3 + +Service ID: `28` + +Service Name: Виртуальная машина + +[Manual](vc_vm_v3.md) | [Create params](vc_vm_v3_params_create.md) | [Modify params](vc_vm_v3_params_modify.md) | [Output params](vc_vm_v3_outputs.md) | [Operations](vc_vm_v3_ops.md) | [Example](vc_vm_v3_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](vc_vm_v3_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](vc_vm_v3_params_modify.md) +- `reconcile` +- `redeploy` +- `resume` +- `suspend` diff --git a/universal_rebuild/docs-gen/vc_vm_v3_outputs.md b/universal_rebuild/docs-gen/vc_vm_v3_outputs.md new file mode 100644 index 0000000..d0ef2e1 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_v3_outputs.md @@ -0,0 +1,30 @@ +# Resource nubes_vc_vm_v3 + +Service ID: `28` + +Service Name: Виртуальная машина + +[Manual](vc_vm_v3.md) | [Create params](vc_vm_v3_params_create.md) | [Modify params](vc_vm_v3_params_modify.md) | [Output params](vc_vm_v3_outputs.md) | [Operations](vc_vm_v3_ops.md) | [Example](vc_vm_v3_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["externalConnect"]` +- `state_out_flat["fqdn"]` +- `state_out_flat["internalConnect"]` + diff --git a/universal_rebuild/docs-gen/vc_vm_v3_params.md b/universal_rebuild/docs-gen/vc_vm_v3_params.md new file mode 100644 index 0000000..9c63ad1 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_v3_params.md @@ -0,0 +1,12 @@ +# Resource nubes_vc_vm_v3 + +Service ID: `28` + +Service Name: Виртуальная машина + +[Manual](vc_vm_v3.md) | [Create params](vc_vm_v3_params_create.md) | [Modify params](vc_vm_v3_params_modify.md) | [Output params](vc_vm_v3_outputs.md) | [Operations](vc_vm_v3_ops.md) | [Example](vc_vm_v3_example.md) + +## Parameters + +- [Create params](vc_vm_v3_params_create.md) +- [Modify params](vc_vm_v3_params_modify.md) diff --git a/universal_rebuild/docs-gen/vc_vm_v3_params_create.md b/universal_rebuild/docs-gen/vc_vm_v3_params_create.md new file mode 100644 index 0000000..aff77f9 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_v3_params_create.md @@ -0,0 +1,46 @@ +# Resource nubes_vc_vm_v3 + +Service ID: `28` + +Service Name: Виртуальная машина + +[Manual](vc_vm_v3.md) | [Create params](vc_vm_v3_params_create.md) | [Modify params](vc_vm_v3_params_modify.md) | [Output params](vc_vm_v3_outputs.md) | [Operations](vc_vm_v3_ops.md) | [Example](vc_vm_v3_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
407vapp_uiduuidref_svc_id=26
411vm_diskintegerОсновной диск у vm зависит от образа (см. документацию)
Если необходимо дополнительное место для vm, введите колличество Gb в эту форму
regex=^(?:$|(?:0|[1-9]\d{0,2}|1\d{3}|20(?:[0-3]\d|4[0-8])))$
412ip_space_namestring
413access_ip_listjsonФормат массива
Каким адресам будет предоставлен доступ до вм

Требует выделенного внешнего IP
Если ничего не передано, то выставлено [&quot;0.0.0.0/0&quot;]
regex=^(?:$|\[\s*(?:"(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,2})?"(?:\s*,\s*"(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,2})?")*)\s*\])$
414image_vmstring
415cloud_inityamlМожно передать создание дополнительных пользователей.
На текущий момент не реализовано выполнения в cloud-init, установки пакетов, выполнения команд и записи файлов.
417user_public_keystringПубличная часть SSH-Ключа для пользователя
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + + + + +
IDCodeTypeDefaultDescriptionConstraints
408vm_namestringweb01regex=^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
409vm_cpuinteger1штminvalue=1; maxvalue=64
410vm_raminteger1Gbminvalue=1; maxvalue=256
416user_loginmyuserУчётка SSH
448access_port_liststring["22"]По каким портам открыть доступ к ВМ.
Порты 22, 10050 проставляются автоматически
Пока доступно:
22 - SSH,
80 - HTTP,
443 - HTTPS,
10050 - ZABBIX
+ +
+Параметры поведения (кратко)
+По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.
+При `terraform destroy` или удалении ресурса из манифеста:
+- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).
+- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.
+При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:
+- `false` — если ресурс уже есть, будет ошибка.
+- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).
+Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления. +
diff --git a/universal_rebuild/docs-gen/vc_vm_v3_params_modify.md b/universal_rebuild/docs-gen/vc_vm_v3_params_modify.md new file mode 100644 index 0000000..e993928 --- /dev/null +++ b/universal_rebuild/docs-gen/vc_vm_v3_params_modify.md @@ -0,0 +1,20 @@ +# Resource nubes_vc_vm_v3 + +Service ID: `28` + +Service Name: Виртуальная машина + +[Manual](vc_vm_v3.md) | [Create params](vc_vm_v3_params_create.md) | [Modify params](vc_vm_v3_params_modify.md) | [Output params](vc_vm_v3_outputs.md) | [Operations](vc_vm_v3_ops.md) | [Example](vc_vm_v3_example.md) + +## Modify params + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
493vm_cpuintegerштminvalue=1; maxvalue=64
494vm_ramintegerGbminvalue=1; maxvalue=256
495vm_diskintegerОсновной диск у vm зависит от образа (см. документацию)
Если необходимо дополнительное место для vm, введите колличество Gb в эту форму
regex=^(?:$|(?:0|[1-9]\d{0,2}|1\d{3}|20(?:[0-3]\d|4[0-8])))$
496ip_space_namestringno-needed, без внешнего ip
internet-antiddos-v1, с функцией защиты от ddos атак
internet-no-antiddos-v1, с функцией защиты от ddos атак
internet-ipv4-v1 тестовое простанство dev
value_list=no-needed, internet-antiddos-v1, internet-no-antiddos-v1, internet-ipv4-v1
497access_ip_listjsonФормат массива
Каким адресам будет предоставлен доступ до вм

Требует выделенного внешнего IP
Если ничего не передано, то выставлено [&quot;0.0.0.0/0&quot;]
498access_port_listjsonФормат массива
По каким портам открыть доступ к ВМ.
Пока доступно:
22 - SSH,
80 - HTTP,
443 - HTTPS,
10050 - ZABBIX
diff --git a/universal_rebuild/docs-gen/vcexternalip.md b/universal_rebuild/docs-gen/vcexternalip.md new file mode 100644 index 0000000..3fe625c --- /dev/null +++ b/universal_rebuild/docs-gen/vcexternalip.md @@ -0,0 +1,13 @@ +# Resource nubes_vcexternalip + +Service ID: `25` + +Service Name: Публичные IP адреса + +[Manual](vcexternalip.md) | [Create params](vcexternalip_params_create.md) | [Modify params](vcexternalip_params_modify.md) | [Output params](vcexternalip_outputs.md) | [Operations](vcexternalip_ops.md) | [Example](vcexternalip_example.md) + +## MAN + +
+**Обычно эта услуга разворачивается автоматически при развёртывании более сложных услуг**
Вручную создавать можно, однако услуга требует много параметров, о которых можно просто не знать

Резервировать публичные IP адреса можно только после создания NGcloud Organization, NGcloud Виртуальный датацентр, NGcloud Каталог, Сетевой шлюз периметра.
Вы можете назначить IP адрес для существующего экземпляра сервиса. +
diff --git a/universal_rebuild/docs-gen/vcexternalip_example.md b/universal_rebuild/docs-gen/vcexternalip_example.md new file mode 100644 index 0000000..09eefd7 --- /dev/null +++ b/universal_rebuild/docs-gen/vcexternalip_example.md @@ -0,0 +1,51 @@ +# Resource nubes_vcexternalip + +Service ID: `25` + +Service Name: Публичные IP адреса + +[Manual](vcexternalip.md) | [Create params](vcexternalip_params_create.md) | [Modify params](vcexternalip_params_modify.md) | [Output params](vcexternalip_outputs.md) | [Operations](vcexternalip_ops.md) | [Example](vcexternalip_example.md) + +## Copy-ready manifest (`vcexternalip_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_vcexternalip" "baza" { + service_uid = "TODO" + internal_addr_access = "TODO" # Внутренний адрес для связки ната. Требует dnatCreate=true или snatCreate=true + from_service_namespace = "TODO" # Namespace составной услуги (для отображения правил FW) + ip_space_name = "TODO" # Тип ip Space (internet-ipv4-v1 / internet-antiddos-v1 / internet-no-antiddos-v1) + resource_realm = "TODO" # Платформа для развертывания + + # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте + dnat_create = true # Необходимо создать DNAT-правило. + internal_port_access = 5432 # Порт для связки ната с адресом. Несколько значений можно передавать через пробел. Если передать all, то dnat будет на все порты. Требует dnatCreate=true +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_vcexternalip.baza.state_params["имя_ключа"] +nubes_vcexternalip.baza.state_out["имя_ключа"] +nubes_vcexternalip.baza.state_params_flat["имя_ключа"] +nubes_vcexternalip.baza.state_out_flat["имя_ключа"] +nubes_vcexternalip.baza.vault_secrets["имя_ключа"] +nubes_vcexternalip.baza.vault_url +nubes_vcexternalip.baza.vault_user_path +nubes_vcexternalip.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/vcexternalip_ops.md b/universal_rebuild/docs-gen/vcexternalip_ops.md new file mode 100644 index 0000000..5668481 --- /dev/null +++ b/universal_rebuild/docs-gen/vcexternalip_ops.md @@ -0,0 +1,13 @@ +# Resource nubes_vcexternalip + +Service ID: `25` + +Service Name: Публичные IP адреса + +[Manual](vcexternalip.md) | [Create params](vcexternalip_params_create.md) | [Modify params](vcexternalip_params_modify.md) | [Output params](vcexternalip_outputs.md) | [Operations](vcexternalip_ops.md) | [Example](vcexternalip_example.md) + +## Operations + +- `create` — Создание кластера. Параметры: [Create params](vcexternalip_params_create.md) +- `delete` +- `modify` — Изменение кластера. Параметры: [Modify params](vcexternalip_params_modify.md) diff --git a/universal_rebuild/docs-gen/vcexternalip_outputs.md b/universal_rebuild/docs-gen/vcexternalip_outputs.md new file mode 100644 index 0000000..aaa59e1 --- /dev/null +++ b/universal_rebuild/docs-gen/vcexternalip_outputs.md @@ -0,0 +1,28 @@ +# Resource nubes_vcexternalip + +Service ID: `25` + +Service Name: Публичные IP адреса + +[Manual](vcexternalip.md) | [Create params](vcexternalip_params_create.md) | [Modify params](vcexternalip_params_modify.md) | [Output params](vcexternalip_outputs.md) | [Operations](vcexternalip_ops.md) | [Example](vcexternalip_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов + +## Реальные поля из облака (running/suspended snapshot) + +Поля ниже получены из реальных инстансов этого сервиса в облаке. +Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. + +### `state_out_flat` ключи + +- `state_out_flat["externalIp"]` + diff --git a/universal_rebuild/docs-gen/vcexternalip_params.md b/universal_rebuild/docs-gen/vcexternalip_params.md new file mode 100644 index 0000000..1db2fcc --- /dev/null +++ b/universal_rebuild/docs-gen/vcexternalip_params.md @@ -0,0 +1,12 @@ +# Resource nubes_vcexternalip + +Service ID: `25` + +Service Name: Публичные IP адреса + +[Manual](vcexternalip.md) | [Create params](vcexternalip_params_create.md) | [Modify params](vcexternalip_params_modify.md) | [Output params](vcexternalip_outputs.md) | [Operations](vcexternalip_ops.md) | [Example](vcexternalip_example.md) + +## Parameters + +- [Create params](vcexternalip_params_create.md) +- [Modify params](vcexternalip_params_modify.md) diff --git a/universal_rebuild/docs-gen/vcexternalip_params_create.md b/universal_rebuild/docs-gen/vcexternalip_params_create.md new file mode 100644 index 0000000..995a3b8 --- /dev/null +++ b/universal_rebuild/docs-gen/vcexternalip_params_create.md @@ -0,0 +1,36 @@ +# Resource nubes_vcexternalip + +Service ID: `25` + +Service Name: Публичные IP адреса + +[Manual](vcexternalip.md) | [Create params](vcexternalip_params_create.md) | [Modify params](vcexternalip_params_modify.md) | [Output params](vcexternalip_outputs.md) | [Operations](vcexternalip_ops.md) | [Example](vcexternalip_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + + + + + + + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
140service_uidstring
143snat_createbooleanНеобходимо создать SNAT-правило.
144internal_addr_accessstringВнутренний адрес для связки ната. Требует dnatCreate=true или snatCreate=true
324from_service_namespacestringNamespace составной услуги (для отображения правил FW)
325from_service_cloud_edge_namestringEdge составной услуги (указывать, если resourceRealm связан с CloudDirector)
326from_service_cloud_vdc_nameVdc составной услуги (указывать, если resourceRealm связан с CloudDirector)
327from_service_cloud_org_namestringOrg составной услуги (указывать, если resourceRealm связан с CloudDirector)
328from_service_cloud_vmware_urlstringApi-Url составной услуги (указывать, если resourceRealm связан с CloudDirector)
336ip_space_namestringТип ip Space (internet-ipv4-v1 / internet-antiddos-v1 / internet-no-antiddos-v1)
488resource_realmstringПлатформа для развертыванияfunc=getAvailableResourceRealms
624from_service_cloud_edge_scopestring
626from_service_vdc_group_namestring
+ +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** + + + + + +
IDCodeTypeDefaultDescriptionConstraints
141dnat_createbooleantrueНеобходимо создать DNAT-правило.
142internal_port_accessstring5432Порт для связки ната с адресом. Несколько значений можно передавать через пробел. Если передать all, то dnat будет на все порты. Требует dnatCreate=true
diff --git a/universal_rebuild/docs-gen/vcexternalip_params_modify.md b/universal_rebuild/docs-gen/vcexternalip_params_modify.md new file mode 100644 index 0000000..f17b66c --- /dev/null +++ b/universal_rebuild/docs-gen/vcexternalip_params_modify.md @@ -0,0 +1,20 @@ +# Resource nubes_vcexternalip + +Service ID: `25` + +Service Name: Публичные IP адреса + +[Manual](vcexternalip.md) | [Create params](vcexternalip_params_create.md) | [Modify params](vcexternalip_params_modify.md) | [Output params](vcexternalip_outputs.md) | [Operations](vcexternalip_ops.md) | [Example](vcexternalip_example.md) + +## Modify params + + + + + + + + + + +
IDCodeTypeDescriptionConstraints
627service_uidstring
628ip_space_namestring
629dnat_createboolean
630snat_createboolean
631internal_port_accessstring
632internal_addr_accessstring
diff --git a/universal_rebuild/docs-gen/vmpostgre.md b/universal_rebuild/docs-gen/vmpostgre.md new file mode 100644 index 0000000..31d8dad --- /dev/null +++ b/universal_rebuild/docs-gen/vmpostgre.md @@ -0,0 +1,13 @@ +# Resource nubes_vmpostgre + +Service ID: `32` + +Service Name: vc_vm_postgresql_std + +[Manual](vmpostgre.md) | [Create params](vmpostgre_params_create.md) | [Modify params](vmpostgre_params_modify.md) | [Output params](vmpostgre_outputs.md) | [Operations](vmpostgre_ops.md) | [Example](vmpostgre_example.md) + +## MAN + +
+Сервис настройки PostgreSQL для виртуальной машины.
Требует наличия ВМ +
diff --git a/universal_rebuild/docs-gen/vmpostgre_example.md b/universal_rebuild/docs-gen/vmpostgre_example.md new file mode 100644 index 0000000..1e5aa5f --- /dev/null +++ b/universal_rebuild/docs-gen/vmpostgre_example.md @@ -0,0 +1,42 @@ +# Resource nubes_vmpostgre + +Service ID: `32` + +Service Name: vc_vm_postgresql_std + +[Manual](vmpostgre.md) | [Create params](vmpostgre_params_create.md) | [Modify params](vmpostgre_params_modify.md) | [Output params](vmpostgre_outputs.md) | [Operations](vmpostgre_ops.md) | [Example](vmpostgre_example.md) + +## Copy-ready manifest (`vmpostgre_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.57" + } + } +} + +# Токен доступа api_token к Nubes API — замените на реальный. +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +} +resource "nubes_vmpostgre" "baza" { +} +``` + +## Outputs usage + +```hcl +# Выходные параметры можно использовать как +nubes_vmpostgre.baza.state_params["имя_ключа"] +nubes_vmpostgre.baza.state_out["имя_ключа"] +nubes_vmpostgre.baza.state_params_flat["имя_ключа"] +nubes_vmpostgre.baza.state_out_flat["имя_ключа"] +nubes_vmpostgre.baza.vault_secrets["имя_ключа"] +nubes_vmpostgre.baza.vault_url +nubes_vmpostgre.baza.vault_user_path +nubes_vmpostgre.baza.vault_fields +``` diff --git a/universal_rebuild/docs-gen/vmpostgre_ops.md b/universal_rebuild/docs-gen/vmpostgre_ops.md new file mode 100644 index 0000000..a83096e --- /dev/null +++ b/universal_rebuild/docs-gen/vmpostgre_ops.md @@ -0,0 +1,10 @@ +# Resource nubes_vmpostgre + +Service ID: `32` + +Service Name: vc_vm_postgresql_std + +[Manual](vmpostgre.md) | [Create params](vmpostgre_params_create.md) | [Modify params](vmpostgre_params_modify.md) | [Output params](vmpostgre_outputs.md) | [Operations](vmpostgre_ops.md) | [Example](vmpostgre_example.md) + +## Operations + diff --git a/universal_rebuild/docs-gen/vmpostgre_outputs.md b/universal_rebuild/docs-gen/vmpostgre_outputs.md new file mode 100644 index 0000000..5c8d505 --- /dev/null +++ b/universal_rebuild/docs-gen/vmpostgre_outputs.md @@ -0,0 +1,18 @@ +# Resource nubes_vmpostgre + +Service ID: `32` + +Service Name: vc_vm_postgresql_std + +[Manual](vmpostgre.md) | [Create params](vmpostgre_params_create.md) | [Modify params](vmpostgre_params_modify.md) | [Output params](vmpostgre_outputs.md) | [Operations](vmpostgre_ops.md) | [Example](vmpostgre_example.md) + +## Output params + +- `state_params` (map) — параметры, отправленные в API при создании/изменении +- `state_out` (map) — ответ API с результатами/выходными значениями +- `state_params_flat` (map) — параметры в плоском виде (ключи с путями) +- `state_out_flat` (map) — ответы в плоском виде (ключи с путями) +- `vault_secrets` (map) — секреты, записанные в Vault для ресурса +- `vault_url` (string) — адрес Vault для ресурса +- `vault_user_path` (string) — путь пользователя в Vault +- `vault_fields` (list) — список ключей доступных секретов diff --git a/universal_rebuild/docs-gen/vmpostgre_params.md b/universal_rebuild/docs-gen/vmpostgre_params.md new file mode 100644 index 0000000..8b28da6 --- /dev/null +++ b/universal_rebuild/docs-gen/vmpostgre_params.md @@ -0,0 +1,12 @@ +# Resource nubes_vmpostgre + +Service ID: `32` + +Service Name: vc_vm_postgresql_std + +[Manual](vmpostgre.md) | [Create params](vmpostgre_params_create.md) | [Modify params](vmpostgre_params_modify.md) | [Output params](vmpostgre_outputs.md) | [Operations](vmpostgre_ops.md) | [Example](vmpostgre_example.md) + +## Parameters + +- [Create params](vmpostgre_params_create.md) +- [Modify params](vmpostgre_params_modify.md) diff --git a/universal_rebuild/docs-gen/vmpostgre_params_create.md b/universal_rebuild/docs-gen/vmpostgre_params_create.md new file mode 100644 index 0000000..f140764 --- /dev/null +++ b/universal_rebuild/docs-gen/vmpostgre_params_create.md @@ -0,0 +1,16 @@ +# Resource nubes_vmpostgre + +Service ID: `32` + +Service Name: vc_vm_postgresql_std + +[Manual](vmpostgre.md) | [Create params](vmpostgre_params_create.md) | [Modify params](vmpostgre_params_modify.md) | [Output params](vmpostgre_outputs.md) | [Operations](vmpostgre_ops.md) | [Example](vmpostgre_example.md) + +## Create params + +**Обязательные параметры (вводимые пользователем)** + +None. + +**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** +None. diff --git a/universal_rebuild/docs-gen/vmpostgre_params_modify.md b/universal_rebuild/docs-gen/vmpostgre_params_modify.md new file mode 100644 index 0000000..9ce30ad --- /dev/null +++ b/universal_rebuild/docs-gen/vmpostgre_params_modify.md @@ -0,0 +1,11 @@ +# Resource nubes_vmpostgre + +Service ID: `32` + +Service Name: vc_vm_postgresql_std + +[Manual](vmpostgre.md) | [Create params](vmpostgre_params_create.md) | [Modify params](vmpostgre_params_modify.md) | [Output params](vmpostgre_outputs.md) | [Operations](vmpostgre_ops.md) | [Example](vmpostgre_example.md) + +## Modify params + +None. diff --git a/universal_rebuild/internal/resources_gen/100_openwhisk_resource.go b/universal_rebuild/internal/resources_gen/100_openwhisk_resource.go index a89d3a4..0ee13f3 100644 --- a/universal_rebuild/internal/resources_gen/100_openwhisk_resource.go +++ b/universal_rebuild/internal/resources_gen/100_openwhisk_resource.go @@ -2,7 +2,6 @@ package resources_gen import ( "context" - "strings" "terraform-provider-nubes/internal/core" "terraform-provider-nubes/internal/resources_core" @@ -33,7 +32,6 @@ type OpenwhiskModel struct { ResourceName types.String `tfsdk:"resource_name"` OperationTimeout types.String `tfsdk:"operation_timeout"` LogLevel types.String `tfsdk:"log_level"` - Username types.String `tfsdk:"username"` SuspendOnDestroy types.Bool `tfsdk:"suspend_on_destroy"` AdoptExistingOnCreate types.Bool `tfsdk:"adopt_existing_on_create"` StateParams types.Map `tfsdk:"state_params"` @@ -60,7 +58,6 @@ func (r *OpenwhiskResource) Schema(ctx context.Context, req resource.SchemaReque "resource_name": schema.StringAttribute{Required: true}, "operation_timeout": schema.StringAttribute{Optional: true}, "log_level": schema.StringAttribute{Optional: true, MarkdownDescription: "Operation stages log level: none (default), info, debug. Overrides provider-level log_level."}, - "username": schema.StringAttribute{Required: true, MarkdownDescription: "Имя пользователя Openwhisk Не изменяется после создания."}, "suspend_on_destroy": schema.BoolAttribute{Optional: true, Computed: true, Default: booldefault.StaticBool(false)}, "adopt_existing_on_create": schema.BoolAttribute{Optional: true, Computed: true, Default: booldefault.StaticBool(false)}, "state_params": schema.MapAttribute{Computed: true, ElementType: types.StringType}, @@ -111,22 +108,6 @@ func (r *OpenwhiskResource) ModifyPlan(ctx context.Context, req resource.ModifyP return } } - if !plan.Username.IsNull() && !plan.Username.IsUnknown() && !state.Username.IsNull() && !state.Username.IsUnknown() { - // FIX(uuid-case): сравниваем без учёта регистра — API возвращает UUID - // в lowercase, пользователь мог написать upper/mixed. Это одно и то же - // значение, менять его нельзя только если оно реально другое. - if !strings.EqualFold(plan.Username.ValueString(), state.Username.ValueString()) { - resp.Diagnostics.AddError("Нельзя изменить username", "Параметр задается при создании и не может быть изменен.") - return - } - } - return - } - if config.Username.IsNull() { - resp.Diagnostics.AddError("Missing required attribute", "username is required.") - return - } - if config.Username.IsUnknown() { return } @@ -137,9 +118,7 @@ func (r *OpenwhiskResource) ModifyPlan(ctx context.Context, req resource.ModifyP if !config.AdoptExistingOnCreate.IsNull() && !config.AdoptExistingOnCreate.IsUnknown() { adoptExistingOnCreate = config.AdoptExistingOnCreate.ValueBool() } - params := map[int]string{ - 64: resources_core.FormatString(config.Username), - } + params := map[int]string{} desiredDomain := "" domainServiceIDs := []int{81, 82, 88, 96, 97, 98, 99, 119, 149} @@ -152,19 +131,13 @@ func (r *OpenwhiskResource) Create(ctx context.Context, req resource.CreateReque if resp.Diagnostics.HasError() { return } - if data.Username.IsNull() || data.Username.IsUnknown() { - resp.Diagnostics.AddError("Missing required attribute", "username is required.") - return - } resourceName := data.ResourceName.ValueString() desiredDomain := "" domainServiceIDs := []int{81, 82, 88, 96, 97, 98, 99, 119, 149} resp.Diagnostics.Append(resources_core.CreateExistingResourceDiagnosticsWithDomainAndServices(ctx, r.client, 100, resourceName, data.AdoptExistingOnCreate.ValueBool(), desiredDomain, domainServiceIDs)...) - params := map[int]string{ - 64: resources_core.FormatString(data.Username), - } + params := map[int]string{} operationTimeout := "" if !data.OperationTimeout.IsNull() && !data.OperationTimeout.IsUnknown() { @@ -189,9 +162,7 @@ func (r *OpenwhiskResource) Create(ctx context.Context, req resource.CreateReque {Code: "vault_url"}, {Code: "vault_user_path"}, {Code: "vault_fields"}, - }, []resources_core.InputField{ - {Code: "username", Field: "Username", Type: "string"}, - }) + }, []resources_core.InputField{}) resp.Diagnostics.Append(diags...) if resp.Diagnostics.HasError() { return @@ -230,9 +201,7 @@ func (r *OpenwhiskResource) Read(ctx context.Context, req resource.ReadRequest, {Code: "vault_url"}, {Code: "vault_user_path"}, {Code: "vault_fields"}, - }, []resources_core.InputField{ - {Code: "username", Field: "Username", Type: "string"}, - }) + }, []resources_core.InputField{}) resp.Diagnostics.Append(diags...) if resp.Diagnostics.HasError() { return @@ -299,9 +268,7 @@ func (r *OpenwhiskResource) Update(ctx context.Context, req resource.UpdateReque {Code: "vault_url"}, {Code: "vault_user_path"}, {Code: "vault_fields"}, - }, []resources_core.InputField{ - {Code: "username", Field: "Username", Type: "string"}, - }) + }, []resources_core.InputField{}) resp.Diagnostics.Append(diags...) if resp.Diagnostics.HasError() { return diff --git a/universal_rebuild/internal/resources_gen/21_vc_vdc_resource.go b/universal_rebuild/internal/resources_gen/21_vc_vdc_resource.go index 3df7878..eb54f54 100644 --- a/universal_rebuild/internal/resources_gen/21_vc_vdc_resource.go +++ b/universal_rebuild/internal/resources_gen/21_vc_vdc_resource.go @@ -68,9 +68,9 @@ func (r *VcVdcResource) Schema(ctx context.Context, req resource.SchemaRequest, "resource_name": schema.StringAttribute{Required: true}, "operation_timeout": schema.StringAttribute{Optional: true}, "log_level": schema.StringAttribute{Optional: true, MarkdownDescription: "Operation stages log level: none (default), info, debug. Overrides provider-level log_level."}, - "cpu_allocated": schema.Int64Attribute{Optional: true, Computed: true, Default: int64default.StaticInt64(10), MarkdownDescription: "шт"}, + "cpu_allocated": schema.Int64Attribute{Optional: true, Computed: true, Default: int64default.StaticInt64(80), MarkdownDescription: "шт"}, "cpu_guaranteed": schema.Int64Attribute{Optional: true, Computed: true, Default: int64default.StaticInt64(20), MarkdownDescription: "% резервирования Не изменяется после создания."}, - "mem_allocated": schema.Int64Attribute{Optional: true, Computed: true, Default: int64default.StaticInt64(20), MarkdownDescription: "gb"}, + "mem_allocated": schema.Int64Attribute{Optional: true, Computed: true, Default: int64default.StaticInt64(200), MarkdownDescription: "gb"}, "network_provider": schema.StringAttribute{Required: true, MarkdownDescription: "Не изменяется после создания."}, "organization_uid": schema.StringAttribute{Optional: true, Computed: true, MarkdownDescription: "Для создания VDC предварительно необходимо создать организацию через услугу `Организация в Cloud Director` Не изменяется после создания."}, "provider_vdc": schema.StringAttribute{Required: true, MarkdownDescription: "Приписка `2.8` - Скорость vCPU - 2800MHz
И так далее...
Не изменяется после создания."}, diff --git a/universal_rebuild/internal/resources_gen/26_vapp_reconcile_action.go b/universal_rebuild/internal/resources_gen/26_vapp_reconcile_action.go new file mode 100644 index 0000000..8c7f2ed --- /dev/null +++ b/universal_rebuild/internal/resources_gen/26_vapp_reconcile_action.go @@ -0,0 +1,136 @@ +package resources_gen + +import ( + "context" + "strings" + + "terraform-provider-nubes/internal/core" + "terraform-provider-nubes/internal/resources_core" + + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/booldefault" + "github.com/hashicorp/terraform-plugin-framework/types" +) + +// Code generated by tools/gen_v2. DO NOT EDIT. +// Service: vapp +// Action: reconcile + +var _ resource.Resource = &VappReconcileResource{} + +// VappReconcileResource triggers a one-time action. +type VappReconcileResource struct { + client *core.UniversalClient +} + +type VappReconcileModel struct { + ID types.String `tfsdk:"id"` + VappID types.String `tfsdk:"vapp_id"` + RunID types.String `tfsdk:"run_id"` + AdoptExistingOnCreate types.Bool `tfsdk:"adopt_existing_on_create"` + OperationTimeout types.String `tfsdk:"operation_timeout"` + LogLevel types.String `tfsdk:"log_level"` +} + +func NewVappReconcileResource() resource.Resource { + return &VappReconcileResource{} +} + +func (r *VappReconcileResource) Metadata(ctx context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) { + resp.TypeName = req.ProviderTypeName + "_vapp_reconcile" +} + +func (r *VappReconcileResource) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) { + attrs := map[string]schema.Attribute{ + "id": schema.StringAttribute{Computed: true}, + "vapp_id": schema.StringAttribute{Required: true}, + "run_id": schema.StringAttribute{Required: true}, + "adopt_existing_on_create": schema.BoolAttribute{Optional: true, Computed: true, Default: booldefault.StaticBool(false)}, + "operation_timeout": schema.StringAttribute{Optional: true}, + "log_level": schema.StringAttribute{Optional: true, MarkdownDescription: "Operation stages log level: none (default), info, debug. Overrides provider-level log_level."}, + } + resp.Schema = schema.Schema{Attributes: attrs} +} + +func (r *VappReconcileResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { + var plan VappReconcileModel + resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) + if resp.Diagnostics.HasError() { + return + } + + instanceUID := strings.TrimSpace(plan.VappID.ValueString()) + runID := strings.TrimSpace(plan.RunID.ValueString()) + if instanceUID == "" || runID == "" { + resp.Diagnostics.AddError("Ошибка клиента", "отсутствует идентификатор экземпляра или run_id") + return + } + + params := map[string]string{} + + operationTimeout := "" + if !plan.OperationTimeout.IsNull() && !plan.OperationTimeout.IsUnknown() { + operationTimeout = plan.OperationTimeout.ValueString() + } + if !plan.LogLevel.IsNull() && !plan.LogLevel.IsUnknown() { + ctx = core.CtxWithLogLevel(ctx, plan.LogLevel.ValueString()) + } + if err := resources_core.RunOperationByCodeWithTimeout(ctx, r.client, instanceUID, "reconcile", params, operationTimeout); err != nil { + resp.Diagnostics.AddError("Ошибка клиента", err.Error()) + return + } + + plan.ID = types.StringValue(resources_core.BuildActionID(instanceUID, "reconcile", runID)) + resp.Diagnostics.Append(resp.State.Set(ctx, &plan)...) +} + +func (r *VappReconcileResource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) { + var state VappReconcileModel + resp.Diagnostics.Append(req.State.Get(ctx, &state)...) + if resp.Diagnostics.HasError() { + return + } + resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) +} + +func (r *VappReconcileResource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) { + var plan VappReconcileModel + resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) + if resp.Diagnostics.HasError() { + return + } + + instanceUID := strings.TrimSpace(plan.VappID.ValueString()) + runID := strings.TrimSpace(plan.RunID.ValueString()) + if instanceUID == "" || runID == "" { + resp.Diagnostics.AddError("Ошибка клиента", "отсутствует идентификатор экземпляра или run_id") + return + } + + params := map[string]string{} + + if err := resources_core.RunOperationByCode(ctx, r.client, instanceUID, "reconcile", params); err != nil { + resp.Diagnostics.AddError("Ошибка клиента", err.Error()) + return + } + + plan.ID = types.StringValue(resources_core.BuildActionID(instanceUID, "reconcile", runID)) + resp.Diagnostics.Append(resp.State.Set(ctx, &plan)...) +} + +func (r *VappReconcileResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) { + // No-op: removing the resource does not trigger a remote action. +} + +func (r *VappReconcileResource) Configure(_ context.Context, req resource.ConfigureRequest, resp *resource.ConfigureResponse) { + if req.ProviderData == nil { + return + } + client, ok := req.ProviderData.(*core.UniversalClient) + if !ok { + resp.Diagnostics.AddError("Error", "Invalid client type") + return + } + r.client = client +} diff --git a/universal_rebuild/internal/resources_gen/32_vmpostgre_resource.go b/universal_rebuild/internal/resources_gen/32_vmpostgre_resource.go index 11236dc..db3ca98 100644 --- a/universal_rebuild/internal/resources_gen/32_vmpostgre_resource.go +++ b/universal_rebuild/internal/resources_gen/32_vmpostgre_resource.go @@ -10,7 +10,8 @@ import ( "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" "github.com/hashicorp/terraform-plugin-framework/resource/schema/booldefault" - "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringdefault" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" "github.com/hashicorp/terraform-plugin-framework/types" ) @@ -30,13 +31,7 @@ type VmpostgreModel struct { ID types.String `tfsdk:"id"` ResourceName types.String `tfsdk:"resource_name"` OperationTimeout types.String `tfsdk:"operation_timeout"` - NsxtUid types.String `tfsdk:"nsxt_uid"` - ResourceRealm types.String `tfsdk:"resource_realm"` - UserDb types.String `tfsdk:"user_db"` - UserLogin types.String `tfsdk:"user_login"` - UserPassword types.String `tfsdk:"user_password"` - VdcUid types.String `tfsdk:"vdc_uid"` - VmUid types.String `tfsdk:"vm_uid"` + LogLevel types.String `tfsdk:"log_level"` SuspendOnDestroy types.Bool `tfsdk:"suspend_on_destroy"` AdoptExistingOnCreate types.Bool `tfsdk:"adopt_existing_on_create"` StateParams types.Map `tfsdk:"state_params"` @@ -59,16 +54,10 @@ func (r *VmpostgreResource) Metadata(ctx context.Context, req resource.MetadataR func (r *VmpostgreResource) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) { attrs := map[string]schema.Attribute{ - "id": schema.StringAttribute{Computed: true}, + "id": schema.StringAttribute{Computed: true, PlanModifiers: []planmodifier.String{stringplanmodifier.UseStateForUnknown()}}, "resource_name": schema.StringAttribute{Required: true}, "operation_timeout": schema.StringAttribute{Optional: true}, - "nsxt_uid": schema.StringAttribute{Required: true, MarkdownDescription: "InstanceUid nsxt. Nsxt должен быть создан
Не изменяется после создания."}, - "resource_realm": schema.StringAttribute{Required: true, MarkdownDescription: "Ресурсная платформа Не изменяется после создания."}, - "user_db": schema.StringAttribute{Optional: true, Computed: true, Default: stringdefault.StaticString("servicedb"), MarkdownDescription: "Наименование Базы данных
Не изменяется после создания."}, - "user_login": schema.StringAttribute{Optional: true, Computed: true, Default: stringdefault.StaticString("serviceuser"), MarkdownDescription: "Пользователь базы данных
Не изменяется после создания."}, - "user_password": schema.StringAttribute{Optional: true, Computed: true, Default: stringdefault.StaticString("fj29gm48fm!d374mc9"), MarkdownDescription: "Пароль от доступа к Базе данных
Не изменяется после создания."}, - "vdc_uid": schema.StringAttribute{Required: true, MarkdownDescription: "InstanceUid vdc. Vdc должен быть создан
Не изменяется после создания."}, - "vm_uid": schema.StringAttribute{Required: true, MarkdownDescription: "InstanceUid ВМ. ВМ должна быть создана
Не изменяется после создания."}, + "log_level": schema.StringAttribute{Optional: true, MarkdownDescription: "Operation stages log level: none (default), info, debug. Overrides provider-level log_level."}, "suspend_on_destroy": schema.BoolAttribute{Optional: true, Computed: true, Default: booldefault.StaticBool(false)}, "adopt_existing_on_create": schema.BoolAttribute{Optional: true, Computed: true, Default: booldefault.StaticBool(false)}, "state_params": schema.MapAttribute{Computed: true, ElementType: types.StringType}, @@ -113,104 +102,12 @@ func (r *VmpostgreResource) ModifyPlan(ctx context.Context, req resource.ModifyP if resp.Diagnostics.HasError() { return } - planChanged := false - if !plan.NsxtUid.IsNull() && !plan.NsxtUid.IsUnknown() { - resolvedNsxtUid, err := r.client.ResolveRefSvcParamValue(ctx, 22, plan.NsxtUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve nsxt_uid", err.Error()) - } else if resolvedNsxtUid != "" && resolvedNsxtUid != plan.NsxtUid.ValueString() { - plan.NsxtUid = types.StringValue(resolvedNsxtUid) - planChanged = true - } - } - if !plan.VdcUid.IsNull() && !plan.VdcUid.IsUnknown() { - resolvedVdcUid, err := r.client.ResolveRefSvcParamValue(ctx, 21, plan.VdcUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve vdc_uid", err.Error()) - } else if resolvedVdcUid != "" && resolvedVdcUid != plan.VdcUid.ValueString() { - plan.VdcUid = types.StringValue(resolvedVdcUid) - planChanged = true - } - } - if !plan.VmUid.IsNull() && !plan.VmUid.IsUnknown() { - resolvedVmUid, err := r.client.ResolveRefSvcParamValue(ctx, 23, plan.VmUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve vm_uid", err.Error()) - } else if resolvedVmUid != "" && resolvedVmUid != plan.VmUid.ValueString() { - plan.VmUid = types.StringValue(resolvedVmUid) - planChanged = true - } - } - if planChanged { - resp.Diagnostics.Append(resp.Plan.Set(ctx, &plan)...) - if resp.Diagnostics.HasError() { - return - } - } if !plan.ResourceName.IsNull() && !plan.ResourceName.IsUnknown() && !state.ResourceName.IsNull() && !state.ResourceName.IsUnknown() { if plan.ResourceName.ValueString() != state.ResourceName.ValueString() { resp.Diagnostics.AddError("Нельзя изменить resource_name", "Параметр resource_name задается при создании и не может быть изменен. Создайте новый ресурс с другим именем.") return } } - if !plan.NsxtUid.IsNull() && !plan.NsxtUid.IsUnknown() && !state.NsxtUid.IsNull() && !state.NsxtUid.IsUnknown() { - if plan.NsxtUid.ValueString() != state.NsxtUid.ValueString() { - resp.Diagnostics.AddError("Нельзя изменить nsxt_uid", "Параметр задается при создании и не может быть изменен.") - return - } - } - if !plan.ResourceRealm.IsNull() && !plan.ResourceRealm.IsUnknown() && !state.ResourceRealm.IsNull() && !state.ResourceRealm.IsUnknown() { - if plan.ResourceRealm.ValueString() != state.ResourceRealm.ValueString() { - resp.Diagnostics.AddError("Нельзя изменить resource_realm", "Параметр задается при создании и не может быть изменен.") - return - } - } - if !plan.UserDb.IsNull() && !plan.UserDb.IsUnknown() && !state.UserDb.IsNull() && !state.UserDb.IsUnknown() { - if plan.UserDb.ValueString() != state.UserDb.ValueString() { - resp.Diagnostics.AddError("Нельзя изменить user_db", "Параметр задается при создании и не может быть изменен.") - return - } - } - if !plan.UserLogin.IsNull() && !plan.UserLogin.IsUnknown() && !state.UserLogin.IsNull() && !state.UserLogin.IsUnknown() { - if plan.UserLogin.ValueString() != state.UserLogin.ValueString() { - resp.Diagnostics.AddError("Нельзя изменить user_login", "Параметр задается при создании и не может быть изменен.") - return - } - } - if !plan.UserPassword.IsNull() && !plan.UserPassword.IsUnknown() && !state.UserPassword.IsNull() && !state.UserPassword.IsUnknown() { - if plan.UserPassword.ValueString() != state.UserPassword.ValueString() { - resp.Diagnostics.AddError("Нельзя изменить user_password", "Параметр задается при создании и не может быть изменен.") - return - } - } - if !plan.VdcUid.IsNull() && !plan.VdcUid.IsUnknown() && !state.VdcUid.IsNull() && !state.VdcUid.IsUnknown() { - if plan.VdcUid.ValueString() != state.VdcUid.ValueString() { - resp.Diagnostics.AddError("Нельзя изменить vdc_uid", "Параметр задается при создании и не может быть изменен.") - return - } - } - if !plan.VmUid.IsNull() && !plan.VmUid.IsUnknown() && !state.VmUid.IsNull() && !state.VmUid.IsUnknown() { - if plan.VmUid.ValueString() != state.VmUid.ValueString() { - resp.Diagnostics.AddError("Нельзя изменить vm_uid", "Параметр задается при создании и не может быть изменен.") - return - } - } - return - } - if config.NsxtUid.IsNull() || config.NsxtUid.IsUnknown() { - resp.Diagnostics.AddError("Missing required attribute", "nsxt_uid is required.") - return - } - if config.ResourceRealm.IsNull() || config.ResourceRealm.IsUnknown() { - resp.Diagnostics.AddError("Missing required attribute", "resource_realm is required.") - return - } - if config.VdcUid.IsNull() || config.VdcUid.IsUnknown() { - resp.Diagnostics.AddError("Missing required attribute", "vdc_uid is required.") - return - } - if config.VmUid.IsNull() || config.VmUid.IsUnknown() { - resp.Diagnostics.AddError("Missing required attribute", "vm_uid is required.") return } @@ -221,41 +118,11 @@ func (r *VmpostgreResource) ModifyPlan(ctx context.Context, req resource.ModifyP if !config.AdoptExistingOnCreate.IsNull() && !config.AdoptExistingOnCreate.IsUnknown() { adoptExistingOnCreate = config.AdoptExistingOnCreate.ValueBool() } - if !config.NsxtUid.IsNull() && !config.NsxtUid.IsUnknown() { - resolvedNsxtUid, err := r.client.ResolveRefSvcParamValue(ctx, 22, config.NsxtUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve nsxt_uid", err.Error()) - } else if resolvedNsxtUid != "" && resolvedNsxtUid != config.NsxtUid.ValueString() { - config.NsxtUid = types.StringValue(resolvedNsxtUid) - } - } - if !config.VdcUid.IsNull() && !config.VdcUid.IsUnknown() { - resolvedVdcUid, err := r.client.ResolveRefSvcParamValue(ctx, 21, config.VdcUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve vdc_uid", err.Error()) - } else if resolvedVdcUid != "" && resolvedVdcUid != config.VdcUid.ValueString() { - config.VdcUid = types.StringValue(resolvedVdcUid) - } - } - if !config.VmUid.IsNull() && !config.VmUid.IsUnknown() { - resolvedVmUid, err := r.client.ResolveRefSvcParamValue(ctx, 23, config.VmUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve vm_uid", err.Error()) - } else if resolvedVmUid != "" && resolvedVmUid != config.VmUid.ValueString() { - config.VmUid = types.StringValue(resolvedVmUid) - } - } - params := map[int]string{ - 43: resources_core.FormatString(config.VdcUid), - 44: resources_core.FormatString(config.NsxtUid), - 45: resources_core.FormatString(config.VmUid), - 46: resources_core.FormatString(config.UserDb), - 47: resources_core.FormatString(config.UserLogin), - 48: resources_core.FormatString(config.UserPassword), - 859: resources_core.FormatString(config.ResourceRealm), - } + params := map[int]string{} + desiredDomain := "" + domainServiceIDs := []int{81, 82, 88, 96, 97, 98, 99, 119, 149} - resp.Diagnostics.Append(resources_core.PlanExistingResourceDiagnosticsWithParams(ctx, r.client, 32, config.ResourceName.ValueString(), adoptExistingOnCreate, params)...) + resp.Diagnostics.Append(resources_core.PlanExistingResourceDiagnosticsWithParamsAndDomainAndServices(ctx, r.client, 32, config.ResourceName.ValueString(), adoptExistingOnCreate, params, desiredDomain, domainServiceIDs)...) } func (r *VmpostgreResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { @@ -264,70 +131,21 @@ func (r *VmpostgreResource) Create(ctx context.Context, req resource.CreateReque if resp.Diagnostics.HasError() { return } - if data.NsxtUid.IsNull() || data.NsxtUid.IsUnknown() { - resp.Diagnostics.AddError("Missing required attribute", "nsxt_uid is required.") - return - } - if data.ResourceRealm.IsNull() || data.ResourceRealm.IsUnknown() { - resp.Diagnostics.AddError("Missing required attribute", "resource_realm is required.") - return - } - if data.VdcUid.IsNull() || data.VdcUid.IsUnknown() { - resp.Diagnostics.AddError("Missing required attribute", "vdc_uid is required.") - return - } - if data.VmUid.IsNull() || data.VmUid.IsUnknown() { - resp.Diagnostics.AddError("Missing required attribute", "vm_uid is required.") - return - } - if !data.NsxtUid.IsNull() && !data.NsxtUid.IsUnknown() { - resolvedNsxtUid, err := r.client.ResolveRefSvcParamValue(ctx, 22, data.NsxtUid.ValueString()) - if err != nil { - resp.Diagnostics.AddError("Ошибка клиента", err.Error()) - return - } - if resolvedNsxtUid != "" && resolvedNsxtUid != data.NsxtUid.ValueString() { - data.NsxtUid = types.StringValue(resolvedNsxtUid) - } - } - if !data.VdcUid.IsNull() && !data.VdcUid.IsUnknown() { - resolvedVdcUid, err := r.client.ResolveRefSvcParamValue(ctx, 21, data.VdcUid.ValueString()) - if err != nil { - resp.Diagnostics.AddError("Ошибка клиента", err.Error()) - return - } - if resolvedVdcUid != "" && resolvedVdcUid != data.VdcUid.ValueString() { - data.VdcUid = types.StringValue(resolvedVdcUid) - } - } - if !data.VmUid.IsNull() && !data.VmUid.IsUnknown() { - resolvedVmUid, err := r.client.ResolveRefSvcParamValue(ctx, 23, data.VmUid.ValueString()) - if err != nil { - resp.Diagnostics.AddError("Ошибка клиента", err.Error()) - return - } - if resolvedVmUid != "" && resolvedVmUid != data.VmUid.ValueString() { - data.VmUid = types.StringValue(resolvedVmUid) - } - } resourceName := data.ResourceName.ValueString() - resp.Diagnostics.Append(resources_core.CreateExistingResourceDiagnostics(ctx, r.client, 32, resourceName, data.AdoptExistingOnCreate.ValueBool())...) + desiredDomain := "" + domainServiceIDs := []int{81, 82, 88, 96, 97, 98, 99, 119, 149} + resp.Diagnostics.Append(resources_core.CreateExistingResourceDiagnosticsWithDomainAndServices(ctx, r.client, 32, resourceName, data.AdoptExistingOnCreate.ValueBool(), desiredDomain, domainServiceIDs)...) - params := map[int]string{ - 43: resources_core.FormatString(data.VdcUid), - 44: resources_core.FormatString(data.NsxtUid), - 45: resources_core.FormatString(data.VmUid), - 46: resources_core.FormatString(data.UserDb), - 47: resources_core.FormatString(data.UserLogin), - 48: resources_core.FormatString(data.UserPassword), - 859: resources_core.FormatString(data.ResourceRealm), - } + params := map[int]string{} operationTimeout := "" if !data.OperationTimeout.IsNull() && !data.OperationTimeout.IsUnknown() { operationTimeout = data.OperationTimeout.ValueString() } + if !data.LogLevel.IsNull() && !data.LogLevel.IsUnknown() { + ctx = core.CtxWithLogLevel(ctx, data.LogLevel.ValueString()) + } id, err := resources_core.CreateResourceWithTimeout(ctx, r.client, 32, resourceName, data.AdoptExistingOnCreate.ValueBool(), params, operationTimeout) if err != nil { resp.Diagnostics.AddError("Ошибка клиента", err.Error()) @@ -344,43 +162,11 @@ func (r *VmpostgreResource) Create(ctx context.Context, req resource.CreateReque {Code: "vault_url"}, {Code: "vault_user_path"}, {Code: "vault_fields"}, - }, []resources_core.InputField{ - {Code: "nsxtUid", Field: "NsxtUid", Type: "string"}, - {Code: "resourceRealm", Field: "ResourceRealm", Type: "string"}, - {Code: "userDb", Field: "UserDb", Type: "string"}, - {Code: "userLogin", Field: "UserLogin", Type: "string"}, - {Code: "userPassword", Field: "UserPassword", Type: "string"}, - {Code: "vdcUid", Field: "VdcUid", Type: "string"}, - {Code: "vmUid", Field: "VmUid", Type: "string"}, - }) + }, []resources_core.InputField{}) resp.Diagnostics.Append(diags...) if resp.Diagnostics.HasError() { return } - if !state.NsxtUid.IsNull() && !state.NsxtUid.IsUnknown() { - resolvedNsxtUid, err := r.client.ResolveRefSvcParamValue(ctx, 22, state.NsxtUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve nsxt_uid", err.Error()) - } else if resolvedNsxtUid != "" && resolvedNsxtUid != state.NsxtUid.ValueString() { - state.NsxtUid = types.StringValue(resolvedNsxtUid) - } - } - if !state.VdcUid.IsNull() && !state.VdcUid.IsUnknown() { - resolvedVdcUid, err := r.client.ResolveRefSvcParamValue(ctx, 21, state.VdcUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve vdc_uid", err.Error()) - } else if resolvedVdcUid != "" && resolvedVdcUid != state.VdcUid.ValueString() { - state.VdcUid = types.StringValue(resolvedVdcUid) - } - } - if !state.VmUid.IsNull() && !state.VmUid.IsUnknown() { - resolvedVmUid, err := r.client.ResolveRefSvcParamValue(ctx, 23, state.VmUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve vm_uid", err.Error()) - } else if resolvedVmUid != "" && resolvedVmUid != state.VmUid.ValueString() { - state.VmUid = types.StringValue(resolvedVmUid) - } - } resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) } @@ -415,43 +201,11 @@ func (r *VmpostgreResource) Read(ctx context.Context, req resource.ReadRequest, {Code: "vault_url"}, {Code: "vault_user_path"}, {Code: "vault_fields"}, - }, []resources_core.InputField{ - {Code: "nsxtUid", Field: "NsxtUid", Type: "string"}, - {Code: "resourceRealm", Field: "ResourceRealm", Type: "string"}, - {Code: "userDb", Field: "UserDb", Type: "string"}, - {Code: "userLogin", Field: "UserLogin", Type: "string"}, - {Code: "userPassword", Field: "UserPassword", Type: "string"}, - {Code: "vdcUid", Field: "VdcUid", Type: "string"}, - {Code: "vmUid", Field: "VmUid", Type: "string"}, - }) + }, []resources_core.InputField{}) resp.Diagnostics.Append(diags...) if resp.Diagnostics.HasError() { return } - if !newState.NsxtUid.IsNull() && !newState.NsxtUid.IsUnknown() { - resolvedNsxtUid, err := r.client.ResolveRefSvcParamValue(ctx, 22, newState.NsxtUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve nsxt_uid", err.Error()) - } else if resolvedNsxtUid != "" && resolvedNsxtUid != newState.NsxtUid.ValueString() { - newState.NsxtUid = types.StringValue(resolvedNsxtUid) - } - } - if !newState.VdcUid.IsNull() && !newState.VdcUid.IsUnknown() { - resolvedVdcUid, err := r.client.ResolveRefSvcParamValue(ctx, 21, newState.VdcUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve vdc_uid", err.Error()) - } else if resolvedVdcUid != "" && resolvedVdcUid != newState.VdcUid.ValueString() { - newState.VdcUid = types.StringValue(resolvedVdcUid) - } - } - if !newState.VmUid.IsNull() && !newState.VmUid.IsUnknown() { - resolvedVmUid, err := r.client.ResolveRefSvcParamValue(ctx, 23, newState.VmUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve vm_uid", err.Error()) - } else if resolvedVmUid != "" && resolvedVmUid != newState.VmUid.ValueString() { - newState.VmUid = types.StringValue(resolvedVmUid) - } - } resp.Diagnostics.Append(resp.State.Set(ctx, &newState)...) } @@ -496,6 +250,9 @@ func (r *VmpostgreResource) Update(ctx context.Context, req resource.UpdateReque if !plan.OperationTimeout.IsNull() && !plan.OperationTimeout.IsUnknown() { operationTimeout = plan.OperationTimeout.ValueString() } + if !plan.LogLevel.IsNull() && !plan.LogLevel.IsUnknown() { + ctx = core.CtxWithLogLevel(ctx, plan.LogLevel.ValueString()) + } if err := resources_core.UpdateResourceWithTimeout(ctx, r.client, instanceID.ValueString(), params, operationTimeout); err != nil { resp.Diagnostics.AddError("Ошибка клиента", err.Error()) return @@ -511,43 +268,11 @@ func (r *VmpostgreResource) Update(ctx context.Context, req resource.UpdateReque {Code: "vault_url"}, {Code: "vault_user_path"}, {Code: "vault_fields"}, - }, []resources_core.InputField{ - {Code: "nsxtUid", Field: "NsxtUid", Type: "string"}, - {Code: "resourceRealm", Field: "ResourceRealm", Type: "string"}, - {Code: "userDb", Field: "UserDb", Type: "string"}, - {Code: "userLogin", Field: "UserLogin", Type: "string"}, - {Code: "userPassword", Field: "UserPassword", Type: "string"}, - {Code: "vdcUid", Field: "VdcUid", Type: "string"}, - {Code: "vmUid", Field: "VmUid", Type: "string"}, - }) + }, []resources_core.InputField{}) resp.Diagnostics.Append(diags...) if resp.Diagnostics.HasError() { return } - if !state.NsxtUid.IsNull() && !state.NsxtUid.IsUnknown() { - resolvedNsxtUid, err := r.client.ResolveRefSvcParamValue(ctx, 22, state.NsxtUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve nsxt_uid", err.Error()) - } else if resolvedNsxtUid != "" && resolvedNsxtUid != state.NsxtUid.ValueString() { - state.NsxtUid = types.StringValue(resolvedNsxtUid) - } - } - if !state.VdcUid.IsNull() && !state.VdcUid.IsUnknown() { - resolvedVdcUid, err := r.client.ResolveRefSvcParamValue(ctx, 21, state.VdcUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve vdc_uid", err.Error()) - } else if resolvedVdcUid != "" && resolvedVdcUid != state.VdcUid.ValueString() { - state.VdcUid = types.StringValue(resolvedVdcUid) - } - } - if !state.VmUid.IsNull() && !state.VmUid.IsUnknown() { - resolvedVmUid, err := r.client.ResolveRefSvcParamValue(ctx, 23, state.VmUid.ValueString()) - if err != nil { - resp.Diagnostics.AddWarning("Failed to resolve vm_uid", err.Error()) - } else if resolvedVmUid != "" && resolvedVmUid != state.VmUid.ValueString() { - state.VmUid = types.StringValue(resolvedVmUid) - } - } resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) } @@ -561,16 +286,15 @@ func (r *VmpostgreResource) Delete(ctx context.Context, req resource.DeleteReque if state.ID.IsNull() || state.ID.IsUnknown() { return } - - deleteMode := "state_only" - if !state.SuspendOnDestroy.IsNull() && !state.SuspendOnDestroy.IsUnknown() && state.SuspendOnDestroy.ValueBool() { - deleteMode = "suspend" - } + deleteMode := "delete" operationTimeout := "" if !state.OperationTimeout.IsNull() && !state.OperationTimeout.IsUnknown() { operationTimeout = state.OperationTimeout.ValueString() } + if !state.LogLevel.IsNull() && !state.LogLevel.IsUnknown() { + ctx = core.CtxWithLogLevel(ctx, state.LogLevel.ValueString()) + } if err := resources_core.DeleteResourceWithTimeout(ctx, r.client, state.ID.ValueString(), deleteMode, operationTimeout); err != nil { resp.Diagnostics.AddError("Ошибка клиента", err.Error()) return diff --git a/universal_rebuild/internal/resources_gen/82_harbor_resource.go b/universal_rebuild/internal/resources_gen/82_harbor_resource.go index 2fe923b..d29c149 100644 --- a/universal_rebuild/internal/resources_gen/82_harbor_resource.go +++ b/universal_rebuild/internal/resources_gen/82_harbor_resource.go @@ -68,9 +68,9 @@ func (r *HarborResource) Schema(ctx context.Context, req resource.SchemaRequest, "operation_timeout": schema.StringAttribute{Optional: true}, "log_level": schema.StringAttribute{Optional: true, MarkdownDescription: "Operation stages log level: none (default), info, debug. Overrides provider-level log_level."}, "domain": schema.StringAttribute{Optional: true, Computed: true, Default: stringdefault.StaticString("web01"), MarkdownDescription: "Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm Не изменяется после создания."}, - "resource_c_p_u": schema.Int64Attribute{Optional: true, Computed: true, Default: int64default.StaticInt64(100), MarkdownDescription: "Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро Не изменяется после создания."}, - "resource_instances": schema.Int64Attribute{Optional: true, Computed: true, Default: int64default.StaticInt64(1), MarkdownDescription: "Количество узлов Не изменяется после создания."}, - "resource_memory": schema.Int64Attribute{Optional: true, Computed: true, Default: int64default.StaticInt64(200), MarkdownDescription: "Квота памяти пода (Указывается в Megabytes) Не изменяется после создания."}, + "resource_c_p_u": schema.Int64Attribute{Optional: true, Computed: true, Default: int64default.StaticInt64(100), MarkdownDescription: "Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро"}, + "resource_instances": schema.Int64Attribute{Optional: true, Computed: true, Default: int64default.StaticInt64(1), MarkdownDescription: "Количество узлов"}, + "resource_memory": schema.Int64Attribute{Optional: true, Computed: true, Default: int64default.StaticInt64(200), MarkdownDescription: "Квота памяти пода (Указывается в Megabytes)"}, "resource_realm": schema.StringAttribute{Required: true, MarkdownDescription: "Платформа для развертывания Не изменяется после создания."}, "s3_uid": schema.StringAttribute{Optional: true, Computed: true, MarkdownDescription: "UUID экземпляра услуги S3 Не изменяется после создания."}, "suspend_on_destroy": schema.BoolAttribute{Optional: true, Computed: true, Default: booldefault.StaticBool(false)}, @@ -137,24 +137,6 @@ func (r *HarborResource) ModifyPlan(ctx context.Context, req resource.ModifyPlan return } } - if !plan.ResourceCPU.IsNull() && !plan.ResourceCPU.IsUnknown() && !state.ResourceCPU.IsNull() && !state.ResourceCPU.IsUnknown() { - if plan.ResourceCPU.ValueInt64() != state.ResourceCPU.ValueInt64() { - resp.Diagnostics.AddError("Нельзя изменить resource_c_p_u", "Параметр задается при создании и не может быть изменен.") - return - } - } - if !plan.ResourceInstances.IsNull() && !plan.ResourceInstances.IsUnknown() && !state.ResourceInstances.IsNull() && !state.ResourceInstances.IsUnknown() { - if plan.ResourceInstances.ValueInt64() != state.ResourceInstances.ValueInt64() { - resp.Diagnostics.AddError("Нельзя изменить resource_instances", "Параметр задается при создании и не может быть изменен.") - return - } - } - if !plan.ResourceMemory.IsNull() && !plan.ResourceMemory.IsUnknown() && !state.ResourceMemory.IsNull() && !state.ResourceMemory.IsUnknown() { - if plan.ResourceMemory.ValueInt64() != state.ResourceMemory.ValueInt64() { - resp.Diagnostics.AddError("Нельзя изменить resource_memory", "Параметр задается при создании и не может быть изменен.") - return - } - } if !plan.ResourceRealm.IsNull() && !plan.ResourceRealm.IsUnknown() && !state.ResourceRealm.IsNull() && !state.ResourceRealm.IsUnknown() { // FIX(uuid-case): сравниваем без учёта регистра — API возвращает UUID // в lowercase, пользователь мог написать upper/mixed. Это одно и то же @@ -366,6 +348,33 @@ func (r *HarborResource) Update(ctx context.Context, req resource.UpdateRequest, } hasServiceParamChanges := false + if !hasServiceParamChanges { + if plan.ResourceInstances.IsNull() != state.ResourceInstances.IsNull() || plan.ResourceInstances.IsUnknown() != state.ResourceInstances.IsUnknown() { + hasServiceParamChanges = true + } else if !plan.ResourceInstances.IsNull() && !plan.ResourceInstances.IsUnknown() && !state.ResourceInstances.IsNull() && !state.ResourceInstances.IsUnknown() { + if plan.ResourceInstances.ValueInt64() != state.ResourceInstances.ValueInt64() { + hasServiceParamChanges = true + } + } + } + if !hasServiceParamChanges { + if plan.ResourceCPU.IsNull() != state.ResourceCPU.IsNull() || plan.ResourceCPU.IsUnknown() != state.ResourceCPU.IsUnknown() { + hasServiceParamChanges = true + } else if !plan.ResourceCPU.IsNull() && !plan.ResourceCPU.IsUnknown() && !state.ResourceCPU.IsNull() && !state.ResourceCPU.IsUnknown() { + if plan.ResourceCPU.ValueInt64() != state.ResourceCPU.ValueInt64() { + hasServiceParamChanges = true + } + } + } + if !hasServiceParamChanges { + if plan.ResourceMemory.IsNull() != state.ResourceMemory.IsNull() || plan.ResourceMemory.IsUnknown() != state.ResourceMemory.IsUnknown() { + hasServiceParamChanges = true + } else if !plan.ResourceMemory.IsNull() && !plan.ResourceMemory.IsUnknown() && !state.ResourceMemory.IsNull() && !state.ResourceMemory.IsUnknown() { + if plan.ResourceMemory.ValueInt64() != state.ResourceMemory.ValueInt64() { + hasServiceParamChanges = true + } + } + } if !hasServiceParamChanges { plan.ID = instanceID @@ -381,7 +390,11 @@ func (r *HarborResource) Update(ctx context.Context, req resource.UpdateRequest, return } - params := map[int]string{} + params := map[int]string{ + 822: resources_core.FormatInt64(plan.ResourceInstances), + 823: resources_core.FormatInt64(plan.ResourceCPU), + 824: resources_core.FormatInt64(plan.ResourceMemory), + } operationTimeout := "" if !plan.OperationTimeout.IsNull() && !plan.OperationTimeout.IsUnknown() { diff --git a/universal_rebuild/internal/resources_gen/98_http_reconcile_action.go b/universal_rebuild/internal/resources_gen/98_http_reconcile_action.go new file mode 100644 index 0000000..9945ea5 --- /dev/null +++ b/universal_rebuild/internal/resources_gen/98_http_reconcile_action.go @@ -0,0 +1,136 @@ +package resources_gen + +import ( + "context" + "strings" + + "terraform-provider-nubes/internal/core" + "terraform-provider-nubes/internal/resources_core" + + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/booldefault" + "github.com/hashicorp/terraform-plugin-framework/types" +) + +// Code generated by tools/gen_v2. DO NOT EDIT. +// Service: http +// Action: reconcile + +var _ resource.Resource = &HttpReconcileResource{} + +// HttpReconcileResource triggers a one-time action. +type HttpReconcileResource struct { + client *core.UniversalClient +} + +type HttpReconcileModel struct { + ID types.String `tfsdk:"id"` + HttpID types.String `tfsdk:"http_id"` + RunID types.String `tfsdk:"run_id"` + AdoptExistingOnCreate types.Bool `tfsdk:"adopt_existing_on_create"` + OperationTimeout types.String `tfsdk:"operation_timeout"` + LogLevel types.String `tfsdk:"log_level"` +} + +func NewHttpReconcileResource() resource.Resource { + return &HttpReconcileResource{} +} + +func (r *HttpReconcileResource) Metadata(ctx context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) { + resp.TypeName = req.ProviderTypeName + "_http_reconcile" +} + +func (r *HttpReconcileResource) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) { + attrs := map[string]schema.Attribute{ + "id": schema.StringAttribute{Computed: true}, + "http_id": schema.StringAttribute{Required: true}, + "run_id": schema.StringAttribute{Required: true}, + "adopt_existing_on_create": schema.BoolAttribute{Optional: true, Computed: true, Default: booldefault.StaticBool(false)}, + "operation_timeout": schema.StringAttribute{Optional: true}, + "log_level": schema.StringAttribute{Optional: true, MarkdownDescription: "Operation stages log level: none (default), info, debug. Overrides provider-level log_level."}, + } + resp.Schema = schema.Schema{Attributes: attrs} +} + +func (r *HttpReconcileResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { + var plan HttpReconcileModel + resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) + if resp.Diagnostics.HasError() { + return + } + + instanceUID := strings.TrimSpace(plan.HttpID.ValueString()) + runID := strings.TrimSpace(plan.RunID.ValueString()) + if instanceUID == "" || runID == "" { + resp.Diagnostics.AddError("Ошибка клиента", "отсутствует идентификатор экземпляра или run_id") + return + } + + params := map[string]string{} + + operationTimeout := "" + if !plan.OperationTimeout.IsNull() && !plan.OperationTimeout.IsUnknown() { + operationTimeout = plan.OperationTimeout.ValueString() + } + if !plan.LogLevel.IsNull() && !plan.LogLevel.IsUnknown() { + ctx = core.CtxWithLogLevel(ctx, plan.LogLevel.ValueString()) + } + if err := resources_core.RunOperationByCodeWithTimeout(ctx, r.client, instanceUID, "reconcile", params, operationTimeout); err != nil { + resp.Diagnostics.AddError("Ошибка клиента", err.Error()) + return + } + + plan.ID = types.StringValue(resources_core.BuildActionID(instanceUID, "reconcile", runID)) + resp.Diagnostics.Append(resp.State.Set(ctx, &plan)...) +} + +func (r *HttpReconcileResource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) { + var state HttpReconcileModel + resp.Diagnostics.Append(req.State.Get(ctx, &state)...) + if resp.Diagnostics.HasError() { + return + } + resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) +} + +func (r *HttpReconcileResource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) { + var plan HttpReconcileModel + resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) + if resp.Diagnostics.HasError() { + return + } + + instanceUID := strings.TrimSpace(plan.HttpID.ValueString()) + runID := strings.TrimSpace(plan.RunID.ValueString()) + if instanceUID == "" || runID == "" { + resp.Diagnostics.AddError("Ошибка клиента", "отсутствует идентификатор экземпляра или run_id") + return + } + + params := map[string]string{} + + if err := resources_core.RunOperationByCode(ctx, r.client, instanceUID, "reconcile", params); err != nil { + resp.Diagnostics.AddError("Ошибка клиента", err.Error()) + return + } + + plan.ID = types.StringValue(resources_core.BuildActionID(instanceUID, "reconcile", runID)) + resp.Diagnostics.Append(resp.State.Set(ctx, &plan)...) +} + +func (r *HttpReconcileResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) { + // No-op: removing the resource does not trigger a remote action. +} + +func (r *HttpReconcileResource) Configure(_ context.Context, req resource.ConfigureRequest, resp *resource.ConfigureResponse) { + if req.ProviderData == nil { + return + } + client, ok := req.ProviderData.(*core.UniversalClient) + if !ok { + resp.Diagnostics.AddError("Error", "Invalid client type") + return + } + r.client = client +} diff --git a/universal_rebuild/internal/resources_gen/registry.go b/universal_rebuild/internal/resources_gen/registry.go index bb08f2e..484bb51 100644 --- a/universal_rebuild/internal/resources_gen/registry.go +++ b/universal_rebuild/internal/resources_gen/registry.go @@ -47,6 +47,7 @@ func AllResources() []func() resource.Resource { NewVcVmV2Resource, NewVcVmV3Resource, NewVcexternalipResource, + NewVmpostgreResource, NewClickhouseDatabaseResource, NewClickhouseUserResource, NewK8sSthutrvalClusterUserResource, @@ -68,6 +69,7 @@ func AllResources() []func() resource.Resource { NewDummyRedeployResource, NewFlaskReconcileResource, NewFlaskRedeployResource, + NewHttpReconcileResource, NewHttpRedeployResource, NewK8sSthutrvalClusterReconcileResource, NewLuceeReconcileResource, @@ -86,6 +88,7 @@ func AllResources() []func() resource.Resource { NewRedisReconcileResource, NewS3ReconcileResource, NewTemplateReconcileResource, + NewVappReconcileResource, NewVcNsxtReconcileResource, NewVcOrgReconcileResource, NewVcVdcReconcileResource, diff --git a/universal_rebuild/main.go b/universal_rebuild/main.go index c038cb0..f5cb060 100644 --- a/universal_rebuild/main.go +++ b/universal_rebuild/main.go @@ -10,7 +10,7 @@ import ( ) var ( - version string = "5.0.56" + version string = "5.0.57" ) func main() { diff --git a/universal_rebuild/resources_yaml/100_openwhisk.yaml b/universal_rebuild/resources_yaml/100_openwhisk.yaml index ec17796..fdc2fdc 100644 --- a/universal_rebuild/resources_yaml/100_openwhisk.yaml +++ b/universal_rebuild/resources_yaml/100_openwhisk.yaml @@ -25,24 +25,4 @@ outputs: type: string - code: vault_fields type: list -operations: - - name: create - id: 41 - kind: instance - action: create - params: - - id: 64 - code: username - data_type: string - required: true - descr: Имя пользователя Openwhisk - - name: delete - id: 42 - kind: instance - action: delete - params: - - id: 65 - code: username - data_type: string - required: true - descr: Имя пользователя Openwhisk +operations: [] diff --git a/universal_rebuild/resources_yaml/116_kafka.yaml b/universal_rebuild/resources_yaml/116_kafka.yaml index d2f3408..b0b9c6d 100644 --- a/universal_rebuild/resources_yaml/116_kafka.yaml +++ b/universal_rebuild/resources_yaml/116_kafka.yaml @@ -2,7 +2,7 @@ name: kafka service_id: 116 service_display_name: ApacheKafka service_short_name: kafka -service_man: "# Инструкция по развертыванию Apache Kafka через платформу

---
## 1. Общая информация
Брокер сообщений Apache Kafka — это отказоустойчивая распределённая платформа для обмена сообщениями и потоковой обработки данных в реальном времени.
Позволяет надёжно передавать события между сервисами и системами, интегрироваться с внешними решениями и использовать как внутренние, так и защищённые TLS-подключения. Развёртывание полностью автоматизировано платформой.

## Доступные операции
- **create** — Создание кластера
- **delete** — Удаление кластера
- **suspend** — Остановка кластера
- **resume** — Запуск кластера

- **create_topic** — Создание топика
- **modify_topic** — Модификация топика
- **delete_topic** — Удаление топика

- **create_user** — Создание пользователя
- **modify_user** — Модификация пользователя
- **delete_user** — Удаление пользователя


---
## 2. Параметры развертывания кластера
Ниже перечислены параметры, которые необходимо указать при создании ресурса Kafka:

* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `\tk8s-3.ext.nubes.ru`.

* **Количество узлов в сети:**
Количество узлов (брокеров) в кластере Kafka

* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `2048`

* **Квота (millicore ) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `1000`

* **Размер (gigabyte) диска для базы данных:**
Размер диска для хранения данных в гигабайтах. Пример: `20`

* **Выделяет внешний IP для доступа к master:**
Флаг, определяющий, нужно ли выделять внешний IP для доступа к master-брокеру. Пример: `true` или `false`

* **Имя ipSpace для публикации внешнего IP**
Если включен предыдущий параметр, то поле необходимо заполнить. Пример: `internet-no-antiddos-v1`

---
## 4. Выходные параметры
После успешного развертывания ресурса Kafka платформа возвращает ряд параметров.
Ключевым из них является:

**internalConnect**
Это внутренний эндпоинт, который используется для подключения к кластеру Kafka из других сервисов, развернутых внутри той же сети.
Эндпоинт предоставляет доступ к брокерам Kafka по внутренним портам, указанным в конфигурации слушателей.

**externalConnect**
Это внешний эндпоинт (fqdn), который используется для подключения к кластеру Kafka. Для подключения используеться 9093 порт.

Для подключения используются следующие порты:

* 9092 — внутренний нешифрованный доступ (plain).
* 9093 — внутренний и внешний доступ по TLS, с обязательной TLS-аутентификацией.

---
## 5. Дополнительная информация
Для создания топиков, пользователей и управления ими, а также для интеграции с кластерами Kafka используйте соответствующие сервисы и раздел "Облачные сервисы".
---" +service_man: '# Инструкция по развертыванию Организация в Cloud Director через платформу

## 1. Общая информация

Сервис **Организация в Cloud Director** предназначен для управления изолированными организационными единицами (тенантами) внутри инфраструктуры Cloud Director. Он обеспечивает создание, модификацию и администрирование организаций, предоставление им облачных ресурсов, а также контроль уровня доступа. Сервис используется для организации рабочих окружений потребителей, управления жизненным циклом организаций и их сетевой инфраструктурой.

### Доступные операции

**create** — Создание новой организации с заданными характеристиками и типом доступа.
**delete** — Удаление организации после перехода в состояние suspend; приводит к удалению всех связанных сущностей.
**modify** — Изменение параметров внутри организации (на текущий момент поддерживается изменение ipSpaces).
**suspend** — Заморозка организации, ограничение возможности изменения и добавления сущностей.
**resume** — Разморозка организации, восстановление функций управления.

---

## 2. Параметры развертывания

Параметры входных данных операции **create**:

### Платформа для развертывания
Описание: платформа, на которой будет создана организация.
Пример значения: `ngcloud.ru`.

### Тип организации
Описание: тип создаваемой организации.
Варианты:
- `iaas` — организация с прямым доступом к облаку и авторизацией через Keycloak.
- `saas` — организация под управлением Nubes, без прямого доступа к облаку.

---

## 3. Рекомендованные характеристики

### Тестовое окружение
- Тип организации: `iaas` для обеспечения полного доступа к облачным ресурсам и самостоятельного управления.

### Промышленное окружение
- Тип организации: `saas` (упрощённая модель использования).

---

## 4. Выходные параметры

Услуга предоставляет следующие выходные параметры (формируются в процессе операций):

### Идентификатор организации
Уникальный идентификатор созданной организации. Используется для всех дальнейших API-операций.

### Статус организации
Отражает текущее состояние: active, suspended, modifying, deleting.

### Параметры сети
Выходные данные при наличии ipSpaces: список выделенных внешних IP, имя ip_space, количество IP.

---

## 5. Дополнительная информация

- Для конфигурации внешних IP внутри организации необходимо предварительно создать:
-- хотя бы один **Виртуальный датацентр (VDC)**;
-- хотя бы один **Сетевой шлюз периметра (Edge Gateway)**, привязанный к этой организации.
- Удаление организации возможно только через 14 дней после перевода в состояние suspend.
- Удаление организации приводит к удалению всех связанных сущностей: VDC, Edge Gateway, пулов IP, сетей, ВМок и иных объектов.
- Операция suspend не останавливает виртуальные машины, но блокирует любые изменения инфраструктуры внутри организации.
- Для iaas-организаций доступ осуществляется через Keycloak.

' lifecycle: suspend_on_destroy_default: true adopt_existing_on_create_default: false diff --git a/universal_rebuild/resources_yaml/21_vc_vdc.yaml b/universal_rebuild/resources_yaml/21_vc_vdc.yaml index 4870b3a..71e4ae3 100644 --- a/universal_rebuild/resources_yaml/21_vc_vdc.yaml +++ b/universal_rebuild/resources_yaml/21_vc_vdc.yaml @@ -69,8 +69,8 @@ operations: code: cpuAllocated data_type: integer > 0 required: true - default: "10" - maxvalue: 200 + default: "80" + maxvalue: 1000 minvalue: 1 descr: шт sort: 80 @@ -79,7 +79,7 @@ operations: code: memAllocated data_type: integer > 0 required: true - default: "20" + default: "200" maxvalue: 4096 minvalue: 1 descr: gb diff --git a/universal_rebuild/resources_yaml/26_vapp.yaml b/universal_rebuild/resources_yaml/26_vapp.yaml index b48cabd..c33be31 100644 --- a/universal_rebuild/resources_yaml/26_vapp.yaml +++ b/universal_rebuild/resources_yaml/26_vapp.yaml @@ -61,6 +61,11 @@ operations: kind: instance action: delete params: [] + - name: reconcile + id: 285 + kind: action + action: reconcile + params: [] - name: resume id: 209 kind: instance diff --git a/universal_rebuild/resources_yaml/32_vmpostgre.yaml b/universal_rebuild/resources_yaml/32_vmpostgre.yaml new file mode 100644 index 0000000..f877745 --- /dev/null +++ b/universal_rebuild/resources_yaml/32_vmpostgre.yaml @@ -0,0 +1,28 @@ +name: vmpostgre +service_id: 32 +service_display_name: vc_vm_postgresql_std +service_short_name: vmpostgre +service_man: Сервис настройки PostgreSQL для виртуальной машины.
Требует наличия ВМ +lifecycle: + suspend_on_destroy_default: false + adopt_existing_on_create_default: false +outputs: + params: + - code: state_params + type: map + - code: state_out + type: map + - code: state_params_flat + type: map + - code: state_out_flat + type: map + - code: vault_secrets + type: map + sensitive: true + - code: vault_url + type: string + - code: vault_user_path + type: string + - code: vault_fields + type: list +operations: [] diff --git a/universal_rebuild/resources_yaml/82_harbor.yaml b/universal_rebuild/resources_yaml/82_harbor.yaml index e082c02..34d03f5 100644 --- a/universal_rebuild/resources_yaml/82_harbor.yaml +++ b/universal_rebuild/resources_yaml/82_harbor.yaml @@ -55,20 +55,22 @@ operations: required: true default: "100" maxvalue: 4000 - minvalue: 100 + minvalue: 500 descr: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро man: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро sort: 40 + is_modifiable: true - id: 229 code: resourceMemory data_type: integer > 0 required: true default: "200" maxvalue: 8192 - minvalue: 128 + minvalue: 512 descr: Квота памяти пода (Указывается в Megabytes) man: Квота памяти пода (Указывается в Megabytes) sort: 50 + is_modifiable: true - id: 230 code: resourceInstances data_type: integer > 0 @@ -79,6 +81,7 @@ operations: descr: Количество узлов man: Количество узлов в сети sort: 60 + is_modifiable: true - id: 231 code: s3Uid data_type: uuid @@ -93,3 +96,26 @@ operations: action: delete man: DEV-Ветка удаления Harbor params: [] + - name: modify + id: 270 + kind: instance + action: modify + params: + - id: 822 + code: resourceInstances + data_type: integer > 0 + required: true + maxvalue: 7 + minvalue: 1 + - id: 823 + code: resourceCPU + data_type: integer > 0 + required: false + maxvalue: 4000 + minvalue: 500 + - id: 824 + code: resourceMemory + data_type: integer > 0 + required: true + maxvalue: 8192 + minvalue: 512 diff --git a/universal_rebuild/resources_yaml/98_http.yaml b/universal_rebuild/resources_yaml/98_http.yaml index 11cbd0f..8a0c369 100644 --- a/universal_rebuild/resources_yaml/98_http.yaml +++ b/universal_rebuild/resources_yaml/98_http.yaml @@ -131,6 +131,11 @@ operations: maxvalue: 7 minvalue: 1 descr: Количество узлов + - name: reconcile + id: 403 + kind: action + action: reconcile + params: [] - name: redeploy id: 79 kind: action