В конце августа проект OpenTofu сначала заблокировал доступ к своему реестру https://registry.opentofu.org для пользователей из России, а затем без ясного объяснения причин удалил несколько российских провайдеров (PR#817, PR#839). Это привело к тому, что даже зеркалирование официального реестра стало бессмысленным и сломало выполнение команды tofu init
для всех, кто только что смигрировал с Terraform на OpenTofu.
Примечательно, что HashiCorp, который заблокировал доступ к реестру Terraform для российских пользователей еще в 2022 году, не пошел на столь радикальные меры и не удалял российских провайдеров из самого реестра.
В статье мы рассмотрим варианты обхода блокировки реестра провайдеров как для пользователей Terraform, так и для OpenTofu.
Обход блокировки registry.terraform.io
В случае Terraform, обход блокировки осуществляется через конфигурацию стандартного зеркала для реестра провайдеров. Для этого нужно создать файл .terraformrc
в домашнем каталоге вашей операционной системы.
В самом файле нужно сконфигурировать зеркало следующим образом:
provider_installation {
network_mirror {
url = "https://terraform-mirror.yandexcloud.net/"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}
После этого terraform init
снова будет выполняться без проблем.
Обход блокировки registry.opentofu.org
Ситуация с OpenTofu является более сложным, чем с Terraform. Как уже упоминалось ранее, OpenTofu физически удалил метаинформацию о провайдерах из своего реестра. Это означает, что даже настроенное зеркало не сможет помочь при использовании свежих версий плагинов, которые не существовали на момент блокировки.
По умолчанию OpenTofu использует реестр registry.opentofu.org, если он не указан явно. К счастью, плагины для OpenTofu и Terraform в настоящее время взаимосовместимы, что дает возможность использовать реестр registry.terraform.io с заранее настроенным зеркалом. Для этого достаточно создать в домашнем каталоге вашей файловой системы файл .tofurc
со следующим содержанием:
provider_installation {
network_mirror {
url = "https://terraform-mirror.yandexcloud.net/"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}
После, измените блок terraform
внутри вашего HCL кода. Для каждого описанного провайдера в параметр source необходимо добавить префикс registry.terraform.io/
. Пример блока для конфигурации OpenTofu:
terraform {
required_version = "1.8.0"
required_providers {
yandex = {
source = "registry.terraform.io/yandex-cloud/yandex"
version = "0.129.0"
}
tls = {
source = "registry.terraform.io/hashicorp/tls"
version = "4.0.4"
}
random = {
source = "registry.terraform.io/hashicorp/random"
version = "3.4.3"
}
null = {
source = "registry.terraform.io/hashicorp/null"
version = "3.2.2"
}
aws = {
source = "registry.terraform.io/hashicorp/aws"
version = "5.45.0"
}
}
}
Это изменение принудительно заставит OpenTofu использовать реестр Terraform через заранее настроенное зеркало.
Список доступных зеркал
Как вы, возможно, заметили, в примерах я использовал зеркало terraform-mirror.yandexcloud.net
от компании Яндекс. Это зеркало не отличается высокой стабильностью и частотой обновлений, поэтому, помимо него, можно воспользоваться следующими альтернативами:
- https://registry.comcloud.xyz/ (также доступен как https://registry.nationalcdn.ru/)
- https://tf.org.ru/ (nm.tf.org.ru)
- https://terraform-mirror.mcs.mail.ru/
- https://terraform.cloud.ru/ (документация)
Top comments (0)