Документация по языку OpenTofu
Это документация по языку конфигурации OpenTofu. Она предназначена для пользователей интерфейса командной строки OpenTofu и TACOS (программного обеспечения для автоматизации и совместной работы с TF). Язык OpenTofu — основной пользовательский интерфейс OpenTofu. Файлы конфигурации, написанные на языке OpenTofu, указывают OpenTofu, какие плагины устанавливать, какую инфраструктуру создавать и какие данные получать. Язык OpenTofu также позволяет определять зависимости между ресурсами и создавать несколько похожих ресурсов с помощью одного блока конфигурации.
О языке OpenTofu
Основное назначение языка OpenTofu — объявление ресурсов, представляющих объекты инфраструктуры. Все остальные возможности языка предназначены только для того, чтобы сделать описание ресурсов более гибким и удобным.
Конфигурация OpenTofu — это полный документ на языке OpenTofu, который указывает OpenTofu, как управлять заданным набором инфраструктуры. Конфигурация может состоять из нескольких файлов и каталогов.
Синтаксис языка OpenTofu состоит всего из нескольких основных элементов:
resource "aws_vpc" "main" {
cidr_block = var.base_cidr_block
}
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}- Блоки служат контейнерами для другого содержимого и обычно описывают конфигурацию объектов определённого типа, например ресурса. У блоков есть тип блока, может быть ноль или более меток, а также тело, содержащее любое количество аргументов и вложенных блоков. Большинство возможностей OpenTofu настраивается с помощью блоков верхнего уровня в файле конфигурации.
- Аргументы присваивают значение имени. Они размещаются внутри блоков.
- Выражения представляют значение — буквально либо посредством обращения к другим значениям и их объединения. Они используются в качестве значений аргументов или внутри других выражений.
Язык OpenTofu является декларативным: он описывает желаемый результат, а не шаги для его достижения. Порядок блоков и файлов, в которые они помещены, обычно не имеет значения; при определении порядка операций OpenTofu учитывает только неявные и явные связи между ресурсами.
Пример
В следующем примере описана простая топология сети для Amazon Web Services, чтобы показать общую структуру и синтаксис языка OpenTofu. Аналогичные конфигурации можно создавать для других служб виртуальных сетей, используя типы ресурсов, определённые другими провайдерами. Практическая конфигурация сети обычно содержит и другие элементы, не показанные здесь.
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 1.0.4"
}
}
}
variable "aws_region" {}
variable "base_cidr_block" {
description = "A /16 CIDR range definition, such as 10.1.0.0/16, that the VPC will use"
default = "10.1.0.0/16"
}
variable "availability_zones" {
description = "A list of availability zones in which to create subnets"
type = list(string)
}
provider "aws" {
region = var.aws_region
}
resource "aws_vpc" "main" {
# Referencing the base_cidr_block variable allows the network address
# to be changed without modifying the configuration.
cidr_block = var.base_cidr_block
}
resource "aws_subnet" "az" {
# Create one subnet for each given availability zone.
count = length(var.availability_zones)
# For each subnet, use one of the specified availability zones.
availability_zone = var.availability_zones[count.index]
# By referencing the aws_vpc.main object, OpenTofu knows that the subnet
# must be created only after the VPC is created.
vpc_id = aws_vpc.main.id
# Built-in functions and operators can be used for simple transformations of
# values, such as computing a subnet address. Here we create a /20 prefix for
# each subnet, using consecutive addresses for each availability zone,
# such as 10.1.16.0/20 .
cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 4, count.index+1)
}
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/language/