Spec-Zone.ru › OpenTofu 1.10

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

Большинству провижионеров требуется доступ к удалённому ресурсу через SSH или WinRM, и они ожидают вложенный блок connection с данными о подключении.

Важно

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

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

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

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

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

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

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

Блок кода
# Copies the file as the root user using SSH
provisioner "file" {
  source      = "conf/myapp.conf"
  destination = "/etc/myapp.conf"

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

# Copies the file as the Administrator user using WinRM
provisioner "file" {
  source      = "conf/myapp.conf"
  destination = "C:/App/myapp.conf"

  connection {
    type     = "winrm"
    user     = "Administrator"
    password = "${var.admin_password}"
    host     = "${var.host}"
  }
}

Объект self​

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

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

Блок connection поддерживает следующие аргументы. Некоторые аргументы поддерживаются только для типа подключения SSH или WinRM.

Аргумент Тип подключения Описание Значение по умолчанию
type Оба Тип подключения. Допустимые значения: "ssh" и "winrm". Провижионеры обычно предполагают, что в удалённой системе используется Microsoft Windows, если задан тип WinRM. Если не указано иное, поведение, зависящее от target_platform SSH, будет включать поведение, специфичное для Windows, при использовании WinRM. "ssh"
user Оба Пользователь, от имени которого выполняется подключение. root для типа "ssh"
Administrator для типа "winrm"
password Оба Пароль для подключения.
host Оба Обязательно — адрес ресурса, к которому нужно подключиться.
port Оба Порт для подключения. 22 для типа "ssh"
5985 для типа "winrm"
timeout Оба Время ожидания доступности подключения. Значение следует указывать в виде строки (например, "30s" или "5m"). "5m"
script_path Оба Путь для копирования скриптов, предназначенных для удалённого выполнения. Подробнее см. ниже в разделе Как провижионеры выполняют удалённые скрипты. (подробнее ниже)
private_key SSH Содержимое ключа SSH для подключения. Ключ можно загрузить из файла на диске с помощью функции file. Если задано, это значение имеет приоритет над password.
certificate SSH Содержимое сертификата подписывающего центра сертификации. Аргумент сертификата необходимо использовать вместе с private_key. Сертификат можно загрузить из файла на диске с помощью функции file.
agent SSH Задайте значение false, чтобы отключить использование ssh-agent для аутентификации. В Windows поддерживается только агент аутентификации SSH Pageant.
agent_identity SSH Предпочтительный идентификатор из агента SSH для аутентификации.
host_key SSH Открытый ключ удалённого хоста или подписывающего центра сертификации, используемый для проверки подключения.
target_platform SSH Целевая платформа для подключения. Допустимые значения: "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"
https WinRM Задайте значение true, чтобы подключаться по HTTPS вместо HTTP.
insecure WinRM Задайте значение true, чтобы пропустить проверку цепочки сертификатов HTTPS.
use_ntlm WinRM Задайте значение true, чтобы использовать аутентификацию NTLM вместо используемой по умолчанию (базовой аутентификации). Это позволяет не включать базовую аутентификацию в целевой гостевой системе. Подробнее см. в разделе Аутентификация для удалённых подключений в документации по разработке приложений для Windows.
cacert WinRM Сертификат центра сертификации для проверки.

Подключение через бастион-хост по SSH​

Подключение ssh также поддерживает следующие аргументы для подключения через бастион-хост.

Аргумент Описание Значение по умолчанию
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 Содержимое сертификата подписывающего центра сертификации. Аргумент сертификата необходимо использовать вместе с bastion_private_key. Сертификат можно загрузить из файла на диске с помощью функции file.

Подключение через HTTP-прокси по SSH​

Подключение ssh также поддерживает следующие поля для подключения по SSH через HTTP-прокси.

Аргумент Описание Значение по умолчанию
proxy_scheme http или https
proxy_host Включает подключение по SSH через HTTP. Сначала будет установлено подключение к этому хосту, а затем оттуда — подключение host или bastion_host.
proxy_port Порт для подключения к прокси-хосту.
proxy_user_name Имя пользователя для подключения к частному прокси-хосту. Этот аргумент следует указывать только в том случае, если для HTTP-прокси требуется аутентификация.
proxy_user_password Пароль для подключения к частному прокси-хосту. Этот аргумент следует указывать только в том случае, если для HTTP-прокси требуется аутентификация.

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

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

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

Самое важное — в удалённой файловой системе должно быть подходящее место, где провижионер сможет создать файл скрипта. По умолчанию 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 обратная косая черта используется для экранирования символов в строках.

Выполнение скриптов с помощью SSH/SCP​

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

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

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

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

Spec-Zone.ru

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