### Install v2migrate tool Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/guides/v1-to-v2-migration.md Install the migration tool via Go or build it from the source repository. ```shell go install github.com/Edge-Center/terraform-provider-edgecenter/cmd/v2migrate@latest ``` ```shell make build_v2migrate ``` -------------------------------- ### Install v2migrate Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/cmd/v2migrate/README.md Installation methods for the v2migrate binary. ```shell go install github.com/Edge-Center/terraform-provider-edgecenter/cmd/v2migrate@latest ``` ```shell make build_v2migrate # the binary lands in bin/v2migrate ``` -------------------------------- ### Example Usage of edgecenter_instance Data Source Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/instance.md This example demonstrates how to use the edgecenter_instance data source to retrieve information about a virtual machine. It requires setting up the provider and referencing project and region data sources. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } data "edgecenter_project" "pr" { name = "test" } data "edgecenter_region" "rg" { name = "ED-10 Preprod" } data "edgecenter_instance" "vm" { name = "test-vm" region_id = data.edgecenter_region.rg.id project_id = data.edgecenter_project.pr.id } output "view" { value = data.edgecenter_instance.vm } ``` -------------------------------- ### Migrate Resources to V2 Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/README.md Install and run the v2migrate tool to update project manifests to the V2 schema. ```bash go install github.com/Edge-Center/terraform-provider-edgecenter/cmd/v2migrate@latest v2migrate -dir ./my-project ``` -------------------------------- ### Retrieve all flavors Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/flavor.md This example shows how to retrieve all available flavors for a given region and project. The `include_disabled`, `exclude_windows`, and `include_prices` parameters are left to their default values. ```APIDOC ## Data Source: edgecenter_flavor ### Description Represent flavors ### Schema #### Optional - `exclude_windows` (Boolean) Set to true to exclude flavors dedicated for Windows images. - `include_disabled` (Boolean) Set to true to include disabled flavors. - `include_prices` (Boolean) Set to true if the response should include flavor prices. Default is true. - `project_id` (Number) The uuid of the project. Either 'project_id' or 'project_name' must be specified. - `project_name` (String) The name of the project. Either 'project_id' or 'project_name' must be specified. - `region_id` (Number) The uuid of the region. Either 'region_id' or 'region_name' must be specified. - `region_name` (String) The name of the region. Either 'region_id' or 'region_name' must be specified. - `type` (String) Type of flavors to return: instance, baremetal, or load_balancer. If not specified, all flavors are returned. #### Read-Only - `flavors` (List of Object) A list of available flavors. (see [below for nested schema](#nestedatt--flavors)) - `id` (String) The ID of this resource. ### Nested Schema for `flavors` Read-Only: - `currency_code` (String) - `disabled` (Boolean) - `flavor_id` (String) - `flavor_name` (String) - `hardware_description` (Map of String) - `price_per_hour` (Number) - `price_per_month` (Number) - `ram` (Number) - `resource_class` (String) - `type` (String) - `vcpus` (Number) ### Example Usage ```terraform data "edgecenter_flavor" "allFlavors" { region_id = data.edgecenter_region.rg.id project_id = data.edgecenter_project.pr.id } ``` ``` -------------------------------- ### Example Usage of edgecenter_k8s_client_config Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/k8s_client_config.md This example shows how to configure the edgecenter provider and use the deprecated edgecenter_k8s_client_config data source to retrieve Kubernetes cluster configuration. Ensure your permanent API token is correctly set. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } data "edgecenter_k8s_client_config" "cfg" { project_id = 1 region_id = 1 cluster_id = "dc3a3ea9-86ae-47ad-a8e8-79df0ce04839" } ``` -------------------------------- ### Example Usage of Availability Zone Data Source Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/availability_zone.md This example demonstrates how to configure the edgecenter provider, fetch region information, and then use the availability zone data source to retrieve a list of availability zones for that region. The output displays the list of availability zones. ```terraform provider "edgecenter" { permanent_api_token = "29422$4ceea35....1513a61c87c68809a4" } data "edgecenter_region" "rg" { name = "ED-10 Preprod" } data "edgecenter_availability_zone" "region_az" { region_id = data.edgecenter_region.rg.id } output "availability_zones" { value = data.edgecenter_availability_zone.region_az.availability_zones } ``` -------------------------------- ### edgecenter_cdn_origingroup Resource Example Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/resources/cdn_origingroup.md Example of how to define and configure an origin group for your CDN. ```APIDOC ## edgecenter_cdn_origingroup Resource ### Description Represent origin group ### Schema #### Required - `consistent_balancing` (Boolean) - Consistent load balancing (consistent hashing) for the source group - `name` (String) - Add the source group name. - `origin` (Block Set, Min: 1) - Add information about your sources. (see [below for nested schema](#nestedblock--origin)) - `use_next` (Boolean) - Specify whether or not the CDN will use the next source in the list if your source responds with an HTTP status code of 4XX or 5XX. #### Optional - `authorization` (Block Set, Max: 1) - Add information about authorization. (see [below for nested schema](#nestedblock--authorization)) #### Read-Only - `id` (String) - The ID of this resource. ### Nested Schema for `origin` #### Required - `source` (String) - Enter the source’s domain name or the IP address with a custom port (if any). #### Optional - `backup` (Boolean) - If set to "true", this source will not be used until one of the active sources becomes unavailable. - `enabled` (Boolean) - Enable or disable the source. The source group must contain at least one enabled source. #### Read-Only - `id` (Number) ### Nested Schema for `authorization` #### Required - `access_key_id` (String) - Specify the access key ID in 20 alphanumeric characters. - `auth_type` (String) - The type of authorization on the source. It can take two values - aws_signature_v2 or aws_signature_v4. - `bucket_name` (String) - Specify the bucket name. The name is restricted to 255 symbols and may include alphanumeric characters, slashes, pluses, hyphens, and underscores. - `secret_key` (String) - Specify the secret access key. The value must be between 32 and 40 characters and may include alphanumeric characters, slashes, pluses, hyphens, and underscores. #### Optional - `addressing_style` (String) - The addressing style for S3 requests. Supported values: path, virtual. - `aws_region` (String) - The AWS region name.The name is restricted to 255 symbols and can contain lowercase latin letters (a-z), digits (0-9), and hyphens. Region name cannot start or end with a hyphen and cannot contain double hyphens. ``` -------------------------------- ### Example Usage of edgecenter_lblistener Data Source Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/lblistener.md This example demonstrates how to use the edgecenter_lblistener data source to retrieve information about a specific load balancer listener. It requires setting up the edgecenter provider and defining data sources for project and region. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } data "edgecenter_project" "pr" { name = "test" } data "edgecenter_region" "rg" { name = "ED-10 Preprod" } data "edgecenter_lblistener" "l" { name = "test-listener" loadbalancer_id = "59b2eabc-c0a8-4545-8081-979bd963c6ab" //optional region_id = data.edgecenter_region.rg.id project_id = data.edgecenter_project.pr.id } output "view" { value = data.edgecenter_lblistener.l } ``` -------------------------------- ### Example Usage of edgecenter_instance_port_security Data Source Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/instance_port_security.md This example demonstrates how to configure the EdgeCenter provider and use the edgecenter_instance_port_security data source to fetch port security details. It requires specifying the region, project, instance, and port IDs. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } data "edgecenter_project" "pr" { name = "test" } data "edgecenter_region" "rg" { name = "ED-10 Preprod" } data "edgecenter_instance_port_security" "port_security" { region_id = data.edgecenter_region.rg.id project_id = data.edgecenter_project.pr.id port_id = "073947f8-8589-4104-bdff-2cedbe56239f" instance_id = "4f81e8f8-d7b8-45a4-93fd-609ad2n670f0" } output "view" { value = data.edgecenter_instance_port_security.port_security } ``` -------------------------------- ### Configure edgecenter_instance with volumes and interfaces Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/resources/instance.md This example demonstrates creating an instance with multiple volumes and a subnet interface. It requires prior definition of network, subnet, and volume resources. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } resource "edgecenter_network" "network" { name = "network_example" type = "vxlan" region_id = 1 project_id = 1 } resource "edgecenter_subnet" "subnet" { name = "subnet_example" cidr = "192.168.10.0/24" network_id = edgecenter_network.network.id dns_nameservers = ["8.8.4.4", "1.1.1.1"] host_routes { destination = "10.0.3.0/24" nexthop = "10.0.0.13" } gateway_ip = "192.168.10.1" region_id = 1 project_id = 1 } resource "edgecenter_volume" "first_volume" { name = "boot volume" type_name = "ssd_hiiops" size = 5 image_id = "f4ce3d30-e29c-4cfd-811f-46f383b6081f" region_id = 1 project_id = 1 } resource "edgecenter_volume" "second_volume" { name = "second volume" type_name = "ssd_hiiops" size = 5 region_id = 1 project_id = 1 } resource "edgecenter_instance" "instance" { flavor_id = "g1-standard-2-4" name = "test" volume { source = "existing-volume" volume_id = edgecenter_volume.first_volume.id boot_index = 0 } volume { source = "existing-volume" volume_id = edgecenter_volume.second_volume.id boot_index = 1 } interface { type = "subnet" network_id = edgecenter_network.network.id subnet_id = edgecenter_subnet.subnet.id security_groups = ["d75db0b2-58f1-4a11-88c6-a932bb897310"] port_security_disabled = true } metadata_map = { some_key = "some_value" stage = "dev" } configuration { key = "some_key" value = "some_data" } region_id = 1 project_id = 1 } ``` -------------------------------- ### Example Usage of edgecenter_network Data Source Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/network.md This example demonstrates how to use the edgecenter_network data source to retrieve information about a specific network. It requires the provider configuration and details of the project and region to which the network belongs. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } data "edgecenter_project" "pr" { name = "test" } data "edgecenter_region" "rg" { name = "ED-10 Preprod" } data "edgecenter_network" "tnw" { name = "example" region_id = data.edgecenter_region.rg.id project_id = data.edgecenter_project.pr.id } output "view" { value = data.edgecenter_network.tnw } ``` -------------------------------- ### Example Usage of edgecenter_lb_l7rule Data Source Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/lb_l7rule.md This example demonstrates how to use the edgecenter_lb_l7rule data source to retrieve information about an L7 rule. It requires provider configuration and data sources for project and region. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } data "edgecenter_project" "pr" { name = "test" } data "edgecenter_region" "rg" { name = "ED-10 Preprod" } data "edgecenter_lb_l7rule" "rule" { id = "59b2eabc-c0a8-4545-8081-979bd963c6ab" l7policy_id = "76r2eabc-c0a8-4545-8081-979bd963c6fgh" region_id = data.edgecenter_region.rg.id project_id = data.edgecenter_project.pr.id } output "view" { value = data.edgecenter_lb_l7rule.rule } ``` -------------------------------- ### Import custom certificate Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/resources/protection_resource_certificate.md This example shows how to import an existing custom SSL certificate resource. Note that for 'custom' type certificates, the private key is not imported. ```shell # import using format # note: for "custom" type certificate and private key are not imported terraform import edgecenter_protection_resource_certificate.protection_custom_cert 12345 ``` -------------------------------- ### Example Usage of edgecenter_lb_l7policy Data Source Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/lb_l7policy.md This example demonstrates how to use the edgecenter_lb_l7policy data source to retrieve an L7 policy by its ID, region, and project. It also shows how to output the retrieved policy details. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } data "edgecenter_project" "pr" { name = "test" } data "edgecenter_region" "rg" { name = "ED-10 Preprod" } data "edgecenter_lb_l7policy" "l" { id = "59b2eabc-c0a8-4545-8081-979bd963c6ab" region_id = data.edgecenter_region.rg.id project_id = data.edgecenter_project.pr.id } output "view" { value = data.edgecenter_lb_l7policy.l } ``` -------------------------------- ### Example Usage of edgecenter_k8s Data Source Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/k8s.md This example shows how to configure the edgecenter provider and use the edgecenter_k8s data source to retrieve information about a Kubernetes cluster. Ensure the provider is configured with a valid permanent API token. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } data "edgecenter_k8s" "cluster" { project_id = 1 region_id = 1 cluster_id = "dc3a3ea9-86ae-47ad-a8e8-79df0ce04839" } ``` -------------------------------- ### Example Usage of edgecenter_securitygroup Data Source Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/securitygroup.md This example demonstrates how to configure the edgecenter provider and use the edgecenter_securitygroup data source to retrieve information about a default security group. It requires project and region data sources to be defined first. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } data "edgecenter_project" "pr" { name = "test" } data "edgecenter_region" "rg" { name = "ED-10 Preprod" } data "edgecenter_securitygroup" "default" { name = "default" region_id = data.edgecenter_region.rg.id project_id = data.edgecenter_project.pr.id } output "view" { value = data.edgecenter_securitygroup.default } ``` -------------------------------- ### Retrieve baremetal flavors Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/flavor.md This example shows how to filter flavors to only include those of type 'baremetal'. This is useful when you specifically need baremetal server configurations. ```APIDOC ## Data Source: edgecenter_flavor ### Description Represent flavors ### Schema #### Optional - `exclude_windows` (Boolean) Set to true to exclude flavors dedicated for Windows images. - `include_disabled` (Boolean) Set to true to include disabled flavors. - `include_prices` (Boolean) Set to true if the response should include flavor prices. Default is true. - `project_id` (Number) The uuid of the project. Either 'project_id' or 'project_name' must be specified. - `project_name` (String) The name of the project. Either 'project_id' or 'project_name' must be specified. - `region_id` (Number) The uuid of the region. Either 'region_id' or 'region_name' must be specified. - `region_name` (String) The name of the region. Either 'region_id' or 'region_name' must be specified. - `type` (String) Type of flavors to return: instance, baremetal, or load_balancer. If not specified, all flavors are returned. #### Read-Only - `flavors` (List of Object) A list of available flavors. (see [below for nested schema](#nestedatt--flavors)) - `id` (String) The ID of this resource. ### Nested Schema for `flavors` Read-Only: - `currency_code` (String) - `disabled` (Boolean) - `flavor_id` (String) - `flavor_name` (String) - `hardware_description` (Map of String) - `price_per_hour` (Number) - `price_per_month` (Number) - `ram` (Number) - `resource_class` (String) - `type` (String) - `vcpus` (Number) ### Example Usage ```terraform data "edgecenter_flavor" "bmFlavors" { region_id = data.edgecenter_region.rg.id project_id = data.edgecenter_project.pr.id type = "baremetal" } ``` ``` -------------------------------- ### Example Usage of edgecenter_loadbalancerv2 Data Source Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/loadbalancerv2.md This example demonstrates how to use the edgecenter_loadbalancerv2 data source to retrieve load balancer information. It requires the edgecenter provider to be configured with an API token and uses other data sources to specify the project and region. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } data "edgecenter_project" "pr" { name = "test" } data "edgecenter_region" "rg" { name = "ED-10 Preprod" } data "edgecenter_loadbalancerv2" "lb" { name = "test-lb" region_id = data.edgecenter_region.rg.id project_id = data.edgecenter_project.pr.id } output "view" { value = data.edgecenter_loadbalancerv2.lb } ``` -------------------------------- ### Create a CDN Resource Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/resources/cdn_resource.md This example demonstrates how to create a CDN resource with a custom CNAME, link it to an origin group, and configure various options like caching, compression, and SSL. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } resource "edgecenter_cdn_origingroup" "origin_group_1" { name = "origin_group_1" use_next = true origin { source = "example.com" enabled = true } origin { source = "mirror.example.com" enabled = true backup = true } authorization { access_key_id = "test_access_key_id" auth_type = "aws_signature_v2" bucket_name = "test_bucket_name" secret_key = "keywqueiuqwiueiqweqwiueiqwiueuiqw" } consistent_balancing = true } resource "edgecenter_cdn_resource" "cdn_example_com" { cname = "cdn.example.com" origin_group = edgecenter_cdn_origingroup.origin_group_1.id origin_protocol = "MATCH" secondary_hostnames = ["cdn2.example.com"] options { edge_cache_settings { default = "8d" } browser_cache_settings { value = "1d" } redirect_http_to_https { value = true } gzip_compression { enabled = true value = [ "application/x-font-ttf", "text/javascript", "image/svg+xml", "text/html", ] } cors { value = [ "*" ] } rewrite { body = "/(.*) /$1" } image_stack { quality = 80 avif_enabled = true webp_enabled = false png_lossless = true } tls_versions { enabled = true value = [ "TLSv1.2", ] } } } ``` -------------------------------- ### Configure Terraform Provider Installation Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/README.md Add this to ~/.terraformrc to override the provider source with a local build path. ```terraform provider_installation { dev_overrides { "local.edgecenter.ru/repo/edgecenter" = "//terraform-provider-edgecenter/bin" } network_mirror { url = "https://terraform-mirror.yandexcloud.net/" include = ["registry.terraform.io/*/*"] } # For all other providers, install them directly from their origin provider # registries as normal. If you omit this, Terraform will _only_ use # the dev_overrides block, and so no other providers will be available. direct { exclude = ["registry.terraform.io/*/*"] } } ``` -------------------------------- ### edgecenter_baremetal Resource Configuration Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/resources/baremetal.md Example of how to configure a baremetal instance using the edgecenter Terraform provider. This includes basic instance details, network interfaces, and keypair configuration. ```APIDOC ## Resource: edgecenter_baremetal ### Description Represents a baremetal instance within the edgecenter platform. ### Schema #### Required - `flavor_id` (String): The ID of the flavor to use for the baremetal instance. - `interface` (Block List, Min: 1): Configuration for network interfaces. See [Nested Schema for interface](#nestedblock--interface) for details. #### Optional - `app_config` (Map of String): Application configuration for the instance. - `apptemplate_id` (String): The ID of the application template. - `image_id` (String): The ID of the image to use for the baremetal instance. - `keypair_name` (String): The name of the keypair to use for SSH access. - `last_updated` (String): The timestamp of the last update (use with update context). - `metadata` (Block List, Deprecated): Deprecated. Use `metadata_map` instead. - `metadata_map` (Map of String): A map containing metadata, such as tags. - `name` (String): The name of the baremetal instance. - `name_template` (String): A template for naming the instance. - `name_templates` (List of String, Deprecated): Deprecated. - `password` (String): The password for the baremetal instance. - `project_id` (Number): The UUID of the project. Either 'project_id' or 'project_name' must be specified. - `project_name` (String): The name of the project. Either 'project_id' or 'project_name' must be specified. - `region_id` (Number): The UUID of the region. Either 'region_id' or 'region_name' must be specified. - `region_name` (String): The name of the region. Either 'region_id' or 'region_name' must be specified. - `timeouts` (Block, Optional): Configuration for timeouts. See [Nested Schema for timeouts](#nestedblock--timeouts) for details. - `user_data` (String): User data to be passed to the instance. - `username` (String): The username for the baremetal instance. #### Read-Only - `addresses` (List of Object): Network addresses assigned to the instance. See [Nested Schema for addresses](#nestedatt--addresses) for details. - `flavor` (Map of String): Details of the flavor used by the instance. - `id` (String): The ID of the resource. - `status` (String): The current status of the baremetal instance. - `vm_state` (String): The virtual machine state of the instance. ### Nested Schema for `interface` #### Required - `type` (String): Available value is 'subnet', 'any_subnet', 'external', 'reserved_fixed_ip'. #### Optional - `existing_fip_id` (String): The ID of an existing floating IP. - `fip_source` (String): Source for the floating IP. - `ip_address` (String): The IP address to assign. - `is_parent` (Boolean): If not set, will be calculated after creation. Trunk interface always attached first. Cannot detach interface if `is_parent` is true. Fields affect only on creation. - `network_id` (String): Required if type is 'subnet' or 'any_subnet'. - `order` (Number): Order of attaching interface. Trunk interface always attached first. Fields affect only on creation. - `port_id` (String): Required if type is 'reserved_fixed_ip'. - `subnet_id` (String): Required if type is 'subnet'. ### Nested Schema for `metadata` #### Required - `key` (String): The metadata key. - `value` (String): The metadata value. ### Nested Schema for `timeouts` #### Optional - `create` (String): Timeout for resource creation. ### Nested Schema for `addresses` #### Read-Only - `net` (List of Object): Network details. ### Nested Schema for `addresses.net` #### Read-Only - `addr` (String): The IP address. - `type` (String): The type of network address (e.g., private, public). ### Import Import is supported using the following syntax: ```shell # import using :: format terraform import edgecenter_baremetal.instance1 1:6:447d2959-8ae0-4ca0-8d47-9f050a3637d7 ``` ``` -------------------------------- ### Define Test Check Function Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/edgecenter/integrationtest/README.md Example of a check function used within a test case to verify state and diagnostics. ```go Check: func(t *testing.T, state *terraform.InstanceState, diags diag.Diagnostics, _ *cloudmock.MockedCloud) { support.RequireNoErrorDiags(t, diags) require.Nil(t, state) // after delete, State() returns nil }, ``` -------------------------------- ### Create an edgecenter_lblistener Resource Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/resources/lblistener.md This example demonstrates how to create a load balancer listener with TCP protocol, a specific port, and allowed CIDRs. It depends on an existing load balancer resource. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } resource "edgecenter_loadbalancerv2" "lb" { project_id = 1 region_id = 1 name = "test" flavor = "lb1-1-2" } resource "edgecenter_lblistener" "listener" { project_id = 1 region_id = 1 name = "test" protocol = "TCP" protocol_port = 36621 allowed_cidrs = ["127.0.0.0/24", "192.168.0.0/24"] loadbalancer_id = edgecenter_loadbalancerv2.lb.id } ``` -------------------------------- ### Create an edgecenter subnet Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/resources/subnet.md This example shows how to create a subnet with custom DHCP settings, host routes, and allocation pools. Ensure the provider and network resources are configured before creating the subnet. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } resource "edgecenter_network" "network" { name = "network_example" type = "vxlan" region_id = 1 project_id = 1 } resource "edgecenter_subnet" "subnet" { name = "subnet_example" cidr = "192.168.10.0/24" network_id = edgecenter_network.network.id dns_nameservers = ["8.8.4.4", "1.1.1.1"] enable_dhcp = true host_routes { destination = "10.0.3.0/24" nexthop = "10.0.0.13" } host_routes { destination = "10.0.4.0/24" nexthop = "10.0.0.14" } allocation_pools { start = "192.168.10.20" end = "192.168.10.50" } gateway_ip = "192.168.10.1" region_id = 1 project_id = 1 } ``` -------------------------------- ### Initialize development project Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/README.md Initializes the project using the provided make command. ```sh $ make init ``` -------------------------------- ### Initialize and Configure Reseller Mocks Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/edgecenter/integrationtest/README.md Instantiate a new Reseller mock and define expectations for Image and Network service methods. ```go mc := resellermock.NewMockedReseller() mc.Images.On("List", mock.Anything, "client", 4242).Return(list, nil, nil) mc.Networks.On("List", mock.Anything, mock.Anything).Return(networks, nil, nil) ``` -------------------------------- ### Configure Terraform provider installation mirror Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/README.md Configures a network mirror in the .terraformrc file to allow provider installation without a VPN. ```terraform provider_installation { network_mirror { url = "https://terraform-mirror.yandexcloud.net/" include = ["registry.terraform.io/*/*"] } # For all other providers, install them directly from their origin provider # registries as normal. If you omit this, Terraform will _only_ use # the dev_overrides block, and so no other providers will be available. direct { exclude = ["registry.terraform.io/*/*"] } } ``` -------------------------------- ### Advanced Flavor Retrieval with Options Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/flavor.md This example demonstrates fetching flavors with advanced filtering. It includes disabled flavors, explicitly includes prices, and excludes Windows-specific flavors. This is useful for comprehensive analysis or specific provisioning needs. ```terraform data "edgecenter_flavor" "fullDataFlavors" { region_id = data.edgecenter_region.rg.id project_id = data.edgecenter_project.pr.id include_disabled = true exclude_windows = false include_prices = true } output "fullDataFlavors" { value = data.edgecenter_flavor.fullDataFlavors } ``` -------------------------------- ### edgecenter_k8s_pool Data Source Example Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/k8s_pool.md This example shows how to configure the edgecenter provider and use the edgecenter_k8s_pool data source to retrieve information about a specific Kubernetes pool. Ensure you have the correct permanent API token. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } data "edgecenter_k8s_pool" "pool" { project_id = 1 region_id = 1 cluster_id = "6bf878c1-1ce4-47c3-a39b-6b5f1d79bf25" pool_id = "dc3a3ea9-86ae-47ad-a8e8-79df0ce04839" } ``` -------------------------------- ### Configure Storage Mocks Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/edgecenter/integrationtest/README.md Sets up expectations for storage service calls using the generated mock client. ```go mc := storagemock.NewMockedStorage() mc.Locations.On("LocationsList", anyOpts(1)...).Return(locations, nil) mc.Storages.On("StoragesList", anyOpts(3)...).Return([]models.Storage{st}, nil) mc.Buckets.On("BucketsList", anyOpts(2)...).Return(list, nil) ``` -------------------------------- ### Managing DNS Zone and Records with Terraform Variables Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/resources/dns_zone_record.md This example demonstrates how to manage DNS zones and their records using Terraform, leveraging variables for domain names. It shows the creation of a zone and then adds multiple record sets, including A records with different IP addresses and a TXT record with geo-distance filtering. ```terraform provider "edgecenter" { permanent_api_token = "179$...............45b54d" } // // example0: managing zone and records by TF using variables // variable "example_domain0" { type = string default = "examplezone.com" } resource "edgecenter_dns_zone" "examplezone0" { name = var.example_domain0 } resource "edgecenter_dns_zone_record" "example_rrset0" { zone = edgecenter_dns_zone.examplezone0.name domain = edgecenter_dns_zone.examplezone0.name type = "A" ttl = 100 meta { } resource_record { content = "127.0.0.100" } resource_record { content = "127.0.0.200" // enabled = false } } ``` -------------------------------- ### Create a CDN Rule with Various Options Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/resources/cdn_rule.md This example demonstrates how to create a CDN rule with extensive options, including edge and browser caching, HTTP to HTTPS redirection, gzip compression, CORS settings, image optimization, and query string handling. It's useful for fine-tuning CDN behavior for specific file patterns. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } resource "edgecenter_cdn_rule" "cdn_example_com_rule_1" { resource_id = edgecenter_cdn_resource.cdn_example_com.id name = "All PNG images" rule = "/folder/images/*.svg" options { edge_cache_settings { default = "14d" } browser_cache_settings { value = "14d" } redirect_http_to_https { value = true } gzip_compression { enabled = true value = [ "text/html", "image/svg+xml", ] } cors { value = [ "*" ] } rewrite { body = "/(.*) /$1" } image_stack { quality = 80 avif_enabled = true webp_enabled = false png_lossless = true } ignore_query_string { value = true } } } ``` -------------------------------- ### Initialize Integration Test File Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/edgecenter/integrationtest/README.md Standard imports and build tags for integration tests. ```go //go:build integration package edgecenter_test import ( "testing" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" edgecloud "github.com/Edge-Center/edgecentercloud-go/v2" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/Edge-Center/terraform-provider-edgecenter/edgecenter" "github.com/Edge-Center/terraform-provider-edgecenter/edgecenter/integrationtest/support" "github.com/Edge-Center/terraform-provider-edgecenter/edgecenter/integrationtest/support/cloud" cloudmock "github.com/Edge-Center/terraform-provider-edgecenter/edgecenter/integrationtest/support/cloud/mock" ) ``` -------------------------------- ### Create an InstanceV2 with Volumes and Interfaces Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/resources/instanceV2.md Provisions a virtual machine instance specifying its flavor, name, boot and data volumes, network interfaces, metadata, and configuration. Requires pre-defined network, subnet, and volumes. ```terraform resource "edgecenter_instanceV2" "instance" { flavor_id = "g1-standard-2-4" name = "test" boot_volumes { volume_id = edgecenter_volume.first_volume.id boot_index = 0 } data_volumes { volume_id = edgecenter_volume.second_volume.id } interfaces { is_default = true type = "subnet" network_id = edgecenter_network.network.id subnet_id = edgecenter_subnet.subnet.id } metadata = { some_key = "some_value" stage = "dev" } configuration { key = "some_key" value = "some_data" } region_id = var.region_id project_id = var.project_id } ``` -------------------------------- ### Retrieve all flavors with specific options Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/data-sources/flavor.md This example demonstrates how to retrieve flavors while explicitly including disabled flavors, excluding Windows-specific flavors, and including pricing information. This provides a more comprehensive view of available resources. ```APIDOC ## Data Source: edgecenter_flavor ### Description Represent flavors ### Schema #### Optional - `exclude_windows` (Boolean) Set to true to exclude flavors dedicated for Windows images. - `include_disabled` (Boolean) Set to true to include disabled flavors. - `include_prices` (Boolean) Set to true if the response should include flavor prices. Default is true. - `project_id` (Number) The uuid of the project. Either 'project_id' or 'project_name' must be specified. - `project_name` (String) The name of the project. Either 'project_id' or 'project_name' must be specified. - `region_id` (Number) The uuid of the region. Either 'region_id' or 'region_name' must be specified. - `region_name` (String) The name of the region. Either 'region_id' or 'region_name' must be specified. - `type` (String) Type of flavors to return: instance, baremetal, or load_balancer. If not specified, all flavors are returned. #### Read-Only - `flavors` (List of Object) A list of available flavors. (see [below for nested schema](#nestedatt--flavors)) - `id` (String) The ID of this resource. ### Nested Schema for `flavors` Read-Only: - `currency_code` (String) - `disabled` (Boolean) - `flavor_id` (String) - `flavor_name` (String) - `hardware_description` (Map of String) - `price_per_hour` (Number) - `price_per_month` (Number) - `ram` (Number) - `resource_class` (String) - `type` (String) - `vcpus` (Number) ### Example Usage ```terraform data "edgecenter_flavor" "fullDataFlavors" { region_id = data.edgecenter_region.rg.id project_id = data.edgecenter_project.pr.id include_disabled = true exclude_windows = false include_prices = true } ``` ``` -------------------------------- ### edgecenter_rmon_check_tcp Resource Configuration Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/resources/rmon_check_tcp.md Example of how to configure the edgecenter_rmon_check_tcp resource in Terraform. ```APIDOC ## edgecenter_rmon_check_tcp (Resource) ### Description This resource is used to configure TCP checks for monitoring network services. ### Schema #### Required - `enabled` (Boolean) - Enabled state of the Check TCP. - `entities` (List of Number) - List of entities where check must be created. - `ip` (String) - IP address or domain name for TCP check. - `name` (String) - Name of the Check TCP. - `place` (String) - Place scope for Check TCP. - `port` (Number) - Port for TCP check. - `priority` (String) - Where checks must be deployed. #### Optional - `check_group` (String) - Name of the check group for group TCP checks. - `check_timeout` (Number) - Answer timeout in seconds. - `description` (String) - Description of the Check TCP. - `email_channel_id` (Number) - Email channel ID (optional) - `interval` (Number) - Interval in seconds between checks. - `mm_channel_id` (Number) - Mattermost channel ID for alerts. - `pd_channel_id` (Number) - PagerDuty channel ID for alerts. - `retries` (Number) - Number of retries before check is marked down. - `runbook` (String) - Runbook URL for alerts. - `slack_channel_id` (Number) - Slack channel ID for alerts. - `telegram_channel_id` (Number) - Telegram channel ID for alerts. #### Read-Only - `id` (String) - The ID of this resource. ### Example Usage ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } resource "edgecenter_rmon_check_tcp" "example" { name = "tcp-example" enabled = true place = "region" priority = "warning" entities = [10] ip = "example.com" port = 443 } ``` ``` -------------------------------- ### Create an edgecenter router Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/resources/router.md This example demonstrates how to create a router with a name, region, project, external gateway information, interfaces, and static routes. Ensure the provider is configured with your API token. ```terraform provider "edgecenter" { permanent_api_token = "251$d3361.............1b35f26d8" } resource "edgecenter_router" "router" { name = "router_example" dynamic "external_gateway_info" { iterator = egi for_each = var.external_gateway_info content { type = egi.value.type network_id = egi.value.network_id } } dynamic "interfaces" { iterator = ifaces for_each = var.interfaces content { type = ifaces.value.type subnet_id = ifaces.value.subnet_id } } dynamic "routes" { iterator = rs for_each = var.routes content { destination = rs.value.destination nexthop = rs.value.nexthop } } region_id = 1 project_id = 1 } ``` -------------------------------- ### edgecenter_rmon_check_rabbitmq Resource Configuration Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/docs/resources/rmon_check_rabbitmq.md Example of how to configure the edgecenter_rmon_check_rabbitmq resource in Terraform. ```APIDOC ## Resource: edgecenter_rmon_check_rabbitmq ### Description This resource is used to configure a RabbitMQ check for monitoring purposes. ### Schema #### Required - `enabled` (Boolean) - Enabled state of the Check RabbitMQ. - `entities` (List of Number) - List of entities where check must be created. - `ip` (String) - IP address or domain name of RabbitMQ server for check. - `name` (String) - Name of the Check RabbitMQ. - `password` (String, Sensitive) - Password for authenticating to RabbitMQ server. - `place` (String) - Place scope for Check RabbitMQ. - `port` (Number) - RabbitMQ server port. - `username` (String) - User name for authenticating to RabbitMQ server. - `vhost` (String) - Virtual host to RabbitMQ server. #### Optional - `check_group` (String) - Name of the check group for group RabbitMQ checks. - `check_timeout` (Number) - Answer timeout in seconds. - `description` (String) - Description of the Check RabbitMQ. - `email_channel_id` (Number) - Email channel ID (optional) - `interval` (Number) - Interval in seconds between checks. - `mm_channel_id` (Number) - Mattermost channel ID for alerts. - `pd_channel_id` (Number) - PagerDuty channel ID for alerts. - `retries` (Number) - Number of retries before check is marked down. - `runbook` (String) - Runbook URL for alerts. - `slack_channel_id` (Number) - Slack channel ID for alerts. - `telegram_channel_id` (Number) - Telegram channel ID for alerts. #### Read-Only - `id` (String) - The ID of this resource. ``` -------------------------------- ### Build the provider Source: https://github.com/edge-center/terraform-provider-edgecenter/blob/master/README.md Compiles the provider plugin. ```sh $ make build ```