DEV Community

kvendingoldo
kvendingoldo

Posted on

Как настроить зеркало реестров для OpenTofu и Terraform

В конце августа проект 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/*/*"]
  }
}
Enter fullscreen mode Exit fullscreen mode

После этого 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/*/*"]
  }
}
Enter fullscreen mode Exit fullscreen mode

После, измените блок 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"
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Это изменение принудительно заставит OpenTofu использовать реестр Terraform через заранее настроенное зеркало.

Список доступных зеркал

Как вы, возможно, заметили, в примерах я использовал зеркало terraform-mirror.yandexcloud.net от компании Яндекс. Это зеркало не отличается высокой стабильностью и частотой обновлений, поэтому, помимо него, можно воспользоваться следующими альтернативами:

Top comments (0)