Spec-Zone.ru › OpenTofu 1.12

Настройки подключения провижионера

Провижионеры remote-exec и file обращаются к удалённой системе по протоколу Secure Shell (SSH). Поэтому эти провижионеры необходимо использовать с блоком connection, в котором описывается способ подключения.

Важно

Используйте провижионеры только в крайнем случае. Для большинства ситуаций есть лучшие альтернативы. Подробнее см. в разделе Объявление провижионеров.

Блок подключения​

Можно создать один или несколько блоков connection, описывающих способ доступа к удалённой системе.

Блоки подключения не принимают метку блока и могут быть вложены в блок resource или provisioner.

  • Блок connection, вложенный непосредственно в блок resource, влияет на все провижионеры этого ресурса.
  • Блок connection, вложенный в блок provisioner, влияет только на этот провижионер и переопределяет любые настройки подключения на уровне ресурса.

Чаще всего блок connection задают на уровне ресурса, но может быть полезно переопределить настройки подключения только для одного провижионера в последовательности. Например, первый провижионер может использовать административный доступ для создания другой учётной записи, а остальные провижионеры — использовать эту новую учётную запись.

Удалённые провижионеры чаще всего используются с недавно созданными серверами, поэтому проверка ключей SSH хоста по умолчанию отключена. Если это неприемлемо, можно задать аргумент host_key, чтобы потребовать использования определённого ключа или сертификата, подписанного определённым центром сертификации.

Пример использования​

Блок кода
provisioner "file" {
  source      = "conf/myapp.conf"
  destination = "/etc/myapp.conf"

  connection {
    user     = "root"
    password = var.root_password
    host     = var.host
  }
}

Справочник по аргументам​

Блок connection поддерживает следующие аргументы.

Аргумент Описание Значение по умолчанию
user Пользователь, от имени которого выполняется подключение. root
password Пароль для подключения.
host Обязательный — адрес ресурса, к которому нужно подключиться.
port Порт для подключения. 22
timeout Время ожидания доступности подключения. Следует указать строкой (например, "30s" или "5m".) "5m"
script_path Путь для копирования скриптов, предназначенных для удалённого выполнения. Подробнее см. ниже в разделе Как провижионеры выполняют удалённые скрипты. (подробности ниже)
private_key Содержимое ключа SSH для подключения. Его можно загрузить из файла на диске с помощью функции file. Если задано, это значение имеет приоритет над password.
certificate Содержимое сертификата центра сертификации (CA) с подписью. Аргумент сертификата необходимо использовать вместе с private_key. Сертификат можно загрузить из файла на диске с помощью функции file.
agent Установите значение false, чтобы отключить аутентификацию с помощью ssh-agent. В Windows поддерживается только агент аутентификации SSH Pageant.
agent_identity Предпочтительная учётная запись из агента ssh для аутентификации.
host_key Открытый ключ удалённого хоста или подписывающего центра сертификации, используемый для проверки подключения.
target_platform Целевая платформа для подключения. Допустимые значения: "windows" и "unix". Если для платформы задано значение windows, по умолчанию используется script_path со значением c:\windows\temp\terraform_%RAND%.cmd, при условии что оболочкой SSH по умолчанию является cmd.exe. Если оболочкой SSH по умолчанию является PowerShell, задайте для script_path значение "c:/windows/temp/terraform_%RAND%.ps1" "unix"
bastion_host Если задано это значение, указанный узел принудительно используется в качестве бастионного узла. Провижионер сначала подключится к bastion_host, а затем оттуда подключится к host.
bastion_host_key Открытый ключ удалённого хоста или подписывающего центра сертификации, используемый для проверки подключения к хосту.
bastion_port Порт для подключения к бастионному узлу. Значение поля port.
bastion_user Пользователь для подключения к бастионному узлу. Значение поля user.
bastion_password Пароль для подключения к бастионному узлу. Значение поля password.
bastion_private_key Содержимое файла ключа SSH для подключения к бастионному узлу. Его можно загрузить из файла на диске с помощью функции file. Значение поля private_key.
bastion_certificate Содержимое сертификата центра сертификации (CA) с подписью. Аргумент сертификата необходимо использовать вместе с bastion_private_key. Сертификат можно загрузить из файла на диске с помощью функции file.
proxy_host Если задано это значение, используется подключение SSH через HTTP. Сначала будет установлено подключение к этому хосту, а затем оттуда будет установлено подключение host или bastion_host.
proxy_scheme http или https
proxy_port Порт для подключения к прокси-хосту.
proxy_user_name Имя пользователя для подключения к частному прокси-хосту. Этот аргумент следует указывать, только если для HTTP-прокси-сервера требуется аутентификация.
proxy_user_password Пароль для подключения к частному прокси-хосту. Этот аргумент следует указывать, только если для HTTP-прокси-сервера требуется аутентификация.

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

Предупреждение

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

Объект self​

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

Вместо этого выражения могут использовать объект self, который представляет экземпляр подготавливаемого ресурса и содержит все атрибуты этого объекта. Например, используйте self.public_ip для обращения к атрибуту public_ip объекта aws_instance.

Как провижионеры выполняют удалённые скрипты​

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

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

В первую очередь, в удалённой файловой системе должно быть подходящее расположение, где провижионер сможет создать файл скрипта. По умолчанию OpenTofu выбирает путь со случайным числом, используя следующие шаблоны в зависимости от значения target_platform:

  • "unix": /tmp/terraform_%RAND%.sh
  • "windows": C:/windows/temp/terraform_%RAND%.cmd

В обоих случаях провижионер заменяет последовательность %RAND% случайно выбранными десятичными цифрами.

Провижионеры не могут напрямую обращаться к переменным окружения удалённой системы, например TMPDIR, или использовать такие функции, как mktemp, поскольку они выполняются в системе, где запущен OpenTofu, а не в удалённой системе. Поэтому, если структура файловой системы удалённой системы отличается от той, на которую рассчитаны эти пути по умолчанию, её можно переопределить с помощью параметра script_path в блоке connection:

Блок кода
connection {
  # ...
  script_path = "H:/tofu-temp/script_%RAND%.sh"
}

Как и в шаблонах по умолчанию, провижионеры заменяют последовательность %RAND% случайно выбранными десятичными цифрами, чтобы снизить вероятность конфликтов при одновременном запуске нескольких провижионеров.

Если целевая система работает под управлением Windows, рекомендуем использовать прямые косые черты вместо обратных, несмотря на типичное соглашение для Windows: в языке OpenTofu обратная косая черта используется как символ экранирования в строках.

Провижионеры загружают файлы скриптов с помощью протокола Secure Copy (SCP), для работы которого в удалённой системе должна быть установлена служебная программа scp, выступающая сервером этого протокола.

Провижионеры передают выбранный путь к скрипту (после подстановки %RAND%) непосредственно удалённому процессу scp, который отвечает за его интерпретацию. При конфигурации scp по умолчанию, распространяемой вместе с OpenSSH, временные скрипты можно помещать в домашний каталог удалённого пользователя, указав относительный путь:

Блок кода
connection {
  # ...
  script_path = "tofu_provisioner_%RAND%.sh"
}

Подключения WinRM (устаревшая функция)​

В OpenTofu v1.11 и более ранних версиях можно было подключаться к системам Windows по протоколу WinRM компании Microsoft в качестве альтернативы SSH. Поддержка WinRM объявлена устаревшей в OpenTofu v1.12 и, как ожидается, будет полностью удалена в OpenTofu v1.13.

При использовании WinRM вместо SSH блок connection принимает другие аргументы:

Аргумент Описание Значение по умолчанию
type Обязательный при использовании WinRM. Установите значение "winrm", чтобы активировать остальные аргументы в этой таблице.
user Пользователь, от имени которого выполняется подключение. Administrator
password Пароль для подключения.
host Обязательный — адрес ресурса, к которому нужно подключиться.
port Порт для подключения. 5985
timeout Время ожидания доступности подключения. Следует указать строкой (например, "30s" или "5m".) "5m"
script_path Путь для копирования скриптов, предназначенных для удалённого выполнения. Подробнее см. выше в разделе Как провижионеры выполняют удалённые скрипты. (подробности выше)
https Установите значение true, чтобы подключаться по HTTPS вместо HTTP.
insecure Установите значение true, чтобы пропустить проверку цепочки сертификатов HTTPS.
use_ntlm Установите значение true, чтобы использовать аутентификацию NTLM вместо аутентификации по умолчанию (базовой), устранив необходимость включать базовую аутентификацию в целевой гостевой системе. Подробнее см. в разделе Аутентификация для удалённых подключений документации по разработке приложений Windows.
cacert Сертификат CA для проверки.

Любой блок connection с аргументом type = "winrm" вызовет предупреждение об устаревании в OpenTofu v1.12 и будет отклонён с ошибкой в OpenTofu v1.13 и более поздних версиях. Пользователям WinRM рекомендуется начать планировать переход на SSH.

Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/language/resources/provisioners/connection/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API