Настройки подключения провижионера
Провижионеры 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/