Spec-Zone.ru › OpenTofu 1.12

Интерфейс для машинной обработки

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

Для длительно выполняющихся команд, таких как plan, apply и refresh, флаг -json выводит поток сообщений интерфейса в формате JSON, по одному сообщению на строку. Их можно обрабатывать по одному сообщению за раз, позволяя интегрирующему программному обеспечению фильтровать, объединять или изменять вывод по своему усмотрению.

Первое выводимое сообщение имеет тип version и содержит ключ ui со значением "1.0". Семантика этой версии такова:

  • Для обратно совместимых изменений или дополнений мы будем увеличивать младшую версию, например "1.1". Чтобы сохранить прямую совместимость с будущими младшими версиями, игнорируйте свойства объектов с неизвестными именами.
  • Для несовместимых изменений мы будем увеличивать старшую версию, например "2.0". Отклоняйте любые входные данные, в которых указана неподдерживаемая старшая версия.

Мы будем вводить новые старшие версии только в рамках гарантий совместимости OpenTofu 1.0.

Пример вывода JSON​

Ниже приведён пример вывода при запуске tofu apply -json:

Блок кода
{"@level":"info","@message":"OpenTofu 1.6.0","@module":"tofu.ui","@timestamp":"2021-05-25T13:32:41.275359-04:00","tofu":"0.15.4","type":"version","ui":"0.1.0"}
{"@level":"info","@message":"random_pet.animal: Plan to create","@module":"tofu.ui","@timestamp":"2021-05-25T13:32:41.705503-04:00","change":{"resource":{"addr":"random_pet.animal","module":"","resource":"random_pet.animal","implied_provider":"random","resource_type":"random_pet","resource_name":"animal","resource_key":null},"action":"create"},"type":"planned_change"}
{"@level":"info","@message":"Plan: 1 to add, 0 to change, 0 to destroy.","@module":"tofu.ui","@timestamp":"2021-05-25T13:32:41.705638-04:00","changes":{"add":1,"change":0,"remove":0,"operation":"plan"},"type":"change_summary"}
{"@level":"info","@message":"random_pet.animal: Creating...","@module":"tofu.ui","@timestamp":"2021-05-25T13:32:41.825308-04:00","hook":{"resource":{"addr":"random_pet.animal","module":"","resource":"random_pet.animal","implied_provider":"random","resource_type":"random_pet","resource_name":"animal","resource_key":null},"action":"create"},"type":"apply_start"}
{"@level":"info","@message":"random_pet.animal: Creation complete after 0s [id=smart-lizard]","@module":"tofu.ui","@timestamp":"2021-05-25T13:32:41.826179-04:00","hook":{"resource":{"addr":"random_pet.animal","module":"","resource":"random_pet.animal","implied_provider":"random","resource_type":"random_pet","resource_name":"animal","resource_key":null},"action":"create","id_key":"id","id_value":"smart-lizard","elapsed_seconds":0},"type":"apply_complete"}
{"@level":"info","@message":"Apply complete! Resources: 1 added, 0 changed, 0 destroyed.","@module":"tofu.ui","@timestamp":"2021-05-25T13:32:41.869168-04:00","changes":{"add":1,"change":0,"remove":0,"operation":"apply"},"type":"change_summary"}
{"@level":"info","@message":"Outputs: 1","@module":"tofu.ui","@timestamp":"2021-05-25T13:32:41.869280-04:00","outputs":{"pets":{"sensitive":false,"type":"string","value":"smart-lizard"}},"type":"outputs"}

Каждая строка содержит объект JSON с несколькими ключами, общими для всех сообщений:

  • @level: обычно это значение "info", но при отображении диагностических сообщений может быть "error" или "warn"
  • @message: краткое описание содержимого этого сообщения, удобочитаемое для пользователя
  • @module: всегда "tofu.ui" при выводе сообщений интерфейса
  • @timestamp: временная метка RFC3339, указывающая, когда было выведено сообщение
  • type: определяет тип сообщения и способ интерпретации других присутствующих ключей

Клиенты, отображающие журналы в пользовательском интерфейсе, должны обрабатывать неожиданные типы сообщений, показывая пользователю как минимум поле @message.

Сообщения выдаются по мере возникновения соответствующих событий. Это означает, что сообщения, относящиеся к нескольким ресурсам, могут перемежаться (если OpenTofu работает с уровнем параллелизма выше 1). Значение объекта resource можно использовать для связи нескольких сообщений, относящихся к одному ресурсу.

Типы сообщений​

Поддерживаются следующие типы сообщений:

Общие сообщения​

  • version: сведения о версии OpenTofu и версии схемы, используемой в последующих сообщениях
  • log: неструктурированные строки журнала, удобочитаемые для пользователя
  • diagnostic: диагностические предупреждения или сообщения об ошибках; подробнее о формате см. в документации tofu validate

Результаты операций​

  • resource_drift: описывает обнаруженное изменение отдельного ресурса, внесённое вне OpenTofu
  • planned_change: описывает запланированное изменение отдельного ресурса
  • change_summary: сводка всех запланированных или применённых изменений
  • outputs: список всех выходных значений корневого модуля

Ход выполнения операций с ресурсами​

  • apply_start, apply_progress, apply_complete, apply_errored: последовательность сообщений, указывающих на ход применения изменений для отдельного ресурса
  • provision_start, provision_progress, provision_complete, provision_errored: последовательность сообщений, указывающих на ход выполнения отдельного шага подготовки
  • refresh_start, refresh_complete: последовательность сообщений, указывающих на ход обновления состояния отдельного ресурса

Сообщение о версии​

Вывод команды с машиночитаемым интерфейсом всегда начинается с сообщения version. Для этого сообщения определены следующие специфичные ключи:

  • tofu: версия OpenTofu, выдавшая это сообщение
  • ui: версия схемы машиночитаемого интерфейса, определяющая смысл последующих сообщений

Пример​

Блок кода
{
  "@level": "info",
  "@message": "OpenTofu 0.15.4",
  "@module": "tofu.ui",
  "@timestamp": "2021-05-25T13:32:41.275359-04:00",
  "tofu": "0.15.4",
  "type": "version",
  "ui": "0.1.0"
}

Расхождение состояния ресурса​

Если при планировании обнаружено расхождение, OpenTofu выдаст сообщение resource_drift для каждого ресурса, который был изменён вне OpenTofu. Это сообщение содержит вложенный объект change со следующими ключами:

  • resource: объект, описывающий адрес изменяемого ресурса; подробности см. ниже в разделе объект ресурса
  • action: действие, запланированное для ресурса. Возможные значения: update, delete.

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

Пример​

Блок кода
{
  "@level": "info",
  "@message": "random_pet.animal: Drift detected (update)",
  "@module": "tofu.ui",
  "@timestamp": "2021-05-25T13:32:41.705503-04:00",
  "change": {
    "resource": {
      "addr": "random_pet.animal",
      "module": "",
      "resource": "random_pet.animal",
      "implied_provider": "random",
      "resource_type": "random_pet",
      "resource_name": "animal",
      "resource_key": null
    },
    "action": "update"
  },
  "type": "resource_drift"
}

Запланированное изменение​

В конце выполнения плана или перед применением изменений OpenTofu выдаст сообщение planned_change для каждого ресурса, требующего изменений. Это сообщение содержит вложенный объект change со следующими ключами:

  • resource: объект, описывающий адрес изменяемого ресурса; подробности см. ниже в разделе объект ресурса
  • previous_resource: объект, описывающий предыдущий адрес ресурса, если это изменение включает перемещение, заданное конфигурацией
  • action: действие, запланированное для ресурса. Возможные значения: noop, create, read, update, replace, delete, move.
  • reason: необязательная причина изменения, используемая только при действии replace или delete. Возможные значения:
    • tainted: ресурс помечен как повреждённый
    • requested: пользователь запросил замену ресурса, например с помощью флага плана -replace
    • cannot_update: изменения конфигурации требуют удалить и создать ресурс вместо его обновления
    • delete_because_no_resource_config: в конфигурации нет соответствующего ресурса
    • delete_because_wrong_repetition: ключ экземпляра ресурса не имеет соответствующего count или for_each в конфигурации
    • delete_because_count_index: ключ экземпляра ресурса находится вне диапазона аргумента count
    • delete_because_each_key: ключ экземпляра ресурса не входит в аргумент for_each
    • delete_because_no_module: охватывающий экземпляр модуля отсутствует в конфигурации

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

Пример​

Блок кода
{
  "@level": "info",
  "@message": "random_pet.animal: Plan to create",
  "@module": "tofu.ui",
  "@timestamp": "2021-05-25T13:32:41.705503-04:00",
  "change": {
    "resource": {
      "addr": "random_pet.animal",
      "module": "",
      "resource": "random_pet.animal",
      "implied_provider": "random",
      "resource_type": "random_pet",
      "resource_name": "animal",
      "resource_key": null
    },
    "action": "create"
  },
  "type": "planned_change"
}

Сводка изменений​

По завершении операции планирования или применения OpenTofu выводит сводку изменений. Оба типа сообщений содержат объект changes со следующими ключами:

  • add: количество ресурсов, которые будут созданы (в том числе при замене)
  • change: количество ресурсов, которые будут изменены на месте
  • remove: количество ресурсов, которые будут уничтожены (в том числе при замене)
  • operation: одно из значений plan, apply или destroy

Пример​

Блок кода
{
  "@level": "info",
  "@message": "Apply complete! Resources: 1 added, 0 changed, 0 destroyed.",
  "@module": "tofu.ui",
  "@timestamp": "2021-05-25T13:32:41.869168-04:00",
  "changes": {
    "add": 1,
    "change": 0,
    "remove": 0,
    "operation": "apply"
  },
  "type": "change_summary"
}

Выходные значения​

После успешного выполнения плана или применения сообщение типа outputs содержит значения всех выходных значений корневого модуля. Это сообщение содержит объект outputs, ключами которого являются имена выходных значений. Объекты выходных значений содержат следующие ключи:

  • action: для запланированных выходных значений — действие, которое будет выполнено. Возможные значения: noop, create, update, delete
  • value: для применённых выходных значений — значение выходного параметра в формате JSON
  • type: для применённых выходных значений — определённый тип HCL значения выходного параметра
  • sensitive: логическое значение true, если выходное значение является конфиденциальным и по умолчанию должно быть скрыто в интерфейсе

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

Пример​

Блок кода
{
  "@level": "info",
  "@message": "Outputs: 1",
  "@module": "tofu.ui",
  "@timestamp": "2021-05-25T13:32:41.869280-04:00",
  "outputs": {
    "pets": {
      "sensitive": false,
      "type": "string",
      "value": "smart-lizard"
    }
  },
  "type": "outputs"
}

Сообщения об операциях​

Выполнение операций OpenTofu над ресурсом часто приводит к выводу нескольких сообщений. Типы сообщений включают:

  • apply_start: при начале применения изменений для ресурса
  • apply_progress: периодически, для отображения прошедшего времени
  • apply_complete: при успешном завершении операции
  • apply_errored: при возникновении ошибки во время операции
  • provision_start: при начале шага подготовки
  • provision_progress: при выводе данных этапом подготовки
  • provision_complete: при успешном выполнении подготовки
  • provision_errored: при возникновении ошибки во время подготовки
  • refresh_start: при чтении ресурса во время обновления состояния
  • refresh_complete: при успешном обновлении состояния

Каждое из этих сообщений содержит объект hook, поля которого различаются в зависимости от типа сообщения. Все обработчики содержат объект resource, определяющий ресурс, к которому относится операция.

Начало применения изменений​

Объект hook сообщения apply_start содержит следующие ключи:

  • resource: объект resource, идентифицирующий ресурс
  • action: действие, которое будет выполнено для ресурса. Возможные значения: noop, create, read, update, replace, delete
  • id_key и id_value: пара «ключ/значение», используемая для идентификации этого экземпляра ресурса; не указывается, если значение неизвестно

Пример​

Блок кода
{
  "@level": "info",
  "@message": "random_pet.animal: Creating...",
  "@module": "tofu.ui",
  "@timestamp": "2021-05-25T13:32:41.825308-04:00",
  "hook": {
    "resource": {
      "addr": "random_pet.animal",
      "module": "",
      "resource": "random_pet.animal",
      "implied_provider": "random",
      "resource_type": "random_pet",
      "resource_name": "animal",
      "resource_key": null
    },
    "action": "create"
  },
  "type": "apply_start"
}

Ход применения изменений​

Объект hook сообщения apply_progress содержит следующие ключи:

  • resource: объект resource, идентифицирующий ресурс
  • action: выполняемое для ресурса действие. Возможные значения: noop, create, read, update, replace, delete
  • elapsed_seconds: время, прошедшее с начала операции применения, в целых секундах

Пример​

Блок кода
{
  "@level": "info",
  "@message": "null_resource.none[4]: Still creating... [30s elapsed]",
  "@module": "tofu.ui",
  "@timestamp": "2021-03-17T09:34:26.222465-04:00",
  "hook": {
    "resource": {
      "addr": "null_resource.none[4]",
      "module": "",
      "resource": "null_resource.none[4]",
      "implied_provider": "null",
      "resource_type": "null_resource",
      "resource_name": "none",
      "resource_key": 4
    },
    "action": "create",
    "elapsed_seconds": 30
  },
  "type": "apply_progress"
}

Применение изменений завершено​

Объект hook сообщения apply_complete содержит следующие ключи:

  • resource: объект resource, идентифицирующий ресурс
  • action: выполненное для ресурса действие. Возможные значения: noop, create, read, update, replace, delete
  • id_key и id_value: пара «ключ/значение», используемая для идентификации этого экземпляра ресурса; не указывается, если значение неизвестно
  • elapsed_seconds: время, прошедшее с начала операции применения, в целых секундах

Пример​

Блок кода
{
  "@level": "info",
  "@message": "random_pet.animal: Creation complete after 0s [id=smart-lizard]",
  "@module": "tofu.ui",
  "@timestamp": "2021-05-25T13:32:41.826179-04:00",
  "hook": {
    "resource": {
      "addr": "random_pet.animal",
      "module": "",
      "resource": "random_pet.animal",
      "implied_provider": "random",
      "resource_type": "random_pet",
      "resource_name": "animal",
      "resource_key": null
    },
    "action": "create",
    "id_key": "id",
    "id_value": "smart-lizard",
    "elapsed_seconds": 0
  },
  "type": "apply_complete"
}

Ошибка при применении изменений​

Объект hook сообщения apply_complete содержит следующие ключи:

  • resource: объект resource, идентифицирующий ресурс
  • action: выполненное для ресурса действие. Возможные значения: noop, create, read, update, replace, delete
  • elapsed_seconds: время, прошедшее с начала операции применения, в целых секундах

Подробное описание ошибки будет выведено в отдельном сообщении diagnostic.

Пример​

Блок кода
{
  "@level": "info",
  "@message": "null_resource.none[0]: Creation errored after 10s",
  "@module": "tofu.ui",
  "@timestamp": "2021-03-26T16:38:54.013910-04:00",
  "hook": {
    "resource": {
      "addr": "null_resource.none[0]",
      "module": "",
      "resource": "null_resource.none[0]",
      "implied_provider": "null",
      "resource_type": "null_resource",
      "resource_name": "none",
      "resource_key": 0
    },
    "action": "create",
    "elapsed_seconds": 10
  },
  "type": "apply_errored"
}

Начало подготовки​

Объект hook сообщения provision_start содержит следующие ключи:

  • resource: объект resource, идентифицирующий ресурс
  • provisioner: тип средства подготовки

Пример​

Блок кода
{
  "@level": "info",
  "@message": "null_resource.none[0]: Provisioning with 'local-exec'...",
  "@module": "tofu.ui",
  "@timestamp": "2021-03-26T16:38:43.997431-04:00",
  "hook": {
    "resource": {
      "addr": "null_resource.none[0]",
      "module": "",
      "resource": "null_resource.none[0]",
      "implied_provider": "null",
      "resource_type": "null_resource",
      "resource_name": "none",
      "resource_key": 0
    },
    "provisioner": "local-exec"
  },
  "type": "provision_start"
}

Ход подготовки​

Объект hook сообщения provision_progress содержит следующие ключи:

  • resource: объект resource, идентифицирующий ресурс
  • provisioner: тип средства подготовки
  • output: журнал вывода средства подготовки

Для каждой строки журнала, полученной от средства подготовки, выводится одно сообщение provision_progress.

Пример​

Блок кода
{
  "@level": "info",
  "@message": "null_resource.none[0]: (local-exec): Executing: [\"/bin/sh\" \"-c\" \"sleep 10 && exit 1\"]",
  "@module": "tofu.ui",
  "@timestamp": "2021-03-26T16:38:43.997869-04:00",
  "hook": {
    "resource": {
      "addr": "null_resource.none[0]",
      "module": "",
      "resource": "null_resource.none[0]",
      "implied_provider": "null",
      "resource_type": "null_resource",
      "resource_name": "none",
      "resource_key": 0
    },
    "provisioner": "local-exec",
    "output": "Executing: [\"/bin/sh\" \"-c\" \"sleep 10 && exit 1\"]"
  },
  "type": "provision_progress"
}

Подготовка завершена​

Объект hook сообщения provision_complete содержит следующие ключи:

  • resource: объект resource, идентифицирующий ресурс
  • provisioner: тип средства подготовки

Пример​

Блок кода
{
  "@level": "info",
  "@message": "null_resource.none[0]: (local-exec) Provisioning complete",
  "@module": "tofu.ui",
  "@timestamp": "2021-03-17T09:34:06.239043-04:00",
  "hook": {
    "resource": {
      "addr": "null_resource.none[0]",
      "module": "",
      "resource": "null_resource.none[0]",
      "implied_provider": "null",
      "resource_type": "null_resource",
      "resource_name": "none",
      "resource_key": 0
    },
    "provisioner": "local-exec"
  },
  "type": "provision_complete"
}

Ошибка при подготовке​

Объект hook сообщения provision_errored содержит следующие ключи:

  • resource: объект resource, идентифицирующий ресурс
  • provisioner: тип средства подготовки

Пример​

Блок кода
{
  "@level": "info",
  "@message": "null_resource.none[0]: (local-exec) Provisioning errored",
  "@module": "tofu.ui",
  "@timestamp": "2021-03-26T16:38:54.013572-04:00",
  "hook": {
    "resource": {
      "addr": "null_resource.none[0]",
      "module": "",
      "resource": "null_resource.none[0]",
      "implied_provider": "null",
      "resource_type": "null_resource",
      "resource_name": "none",
      "resource_key": 0
    },
    "provisioner": "local-exec"
  },
  "type": "provision_errored"
}

Начало обновления состояния​

Объект hook сообщения refresh_start содержит следующие ключи:

  • resource: объект resource, идентифицирующий ресурс
  • id_key и id_value: пара «ключ/значение», используемая для идентификации этого экземпляра ресурса

Пример​

Блок кода
{
  "@level": "info",
  "@message": "null_resource.none[0]: Refreshing state... [id=1971614370559474622]",
  "@module": "tofu.ui",
  "@timestamp": "2021-03-26T14:18:06.508915-04:00",
  "hook": {
    "resource": {
      "addr": "null_resource.none[0]",
      "module": "",
      "resource": "null_resource.none[0]",
      "implied_provider": "null",
      "resource_type": "null_resource",
      "resource_name": "none",
      "resource_key": 0
    },
    "id_key": "id",
    "id_value": "1971614370559474622"
  },
  "type": "refresh_start"
}

Обновление состояния завершено​

Объект hook сообщения refresh_complete содержит следующие ключи:

  • resource: объект resource, идентифицирующий ресурс
  • id_key и id_value: пара «ключ/значение», используемая для идентификации этого экземпляра ресурса

Пример​

Блок кода
{
  "@level": "info",
  "@message": "null_resource.none[0]: Refresh complete [id=1971614370559474622]",
  "@module": "tofu.ui",
  "@timestamp": "2021-03-26T14:18:06.509371-04:00",
  "hook": {
    "resource": {
      "addr": "null_resource.none[0]",
      "module": "",
      "resource": "null_resource.none[0]",
      "implied_provider": "null",
      "resource_type": "null_resource",
      "resource_name": "none",
      "resource_key": 0
    },
    "id_key": "id",
    "id_value": "1971614370559474622"
  },
  "type": "refresh_complete"
}

Объект ресурса​

Объект resource — это декомпозированная структура, представляющая адрес ресурса в конфигурации и используемая для определения ресурса, к которому относится данное сообщение. Объект содержит следующие ключи:

  • addr: полный уникальный адрес ресурса в виде строки
  • module: адрес модуля, содержащего ресурс, в формате module.foo.module.bar; для ресурса корневого модуля — пустая строка
  • resource: адрес относительно модуля; для ресурсов корневого модуля он совпадает с addr
  • resource_type: тип адресуемого ресурса
  • resource_name: имя ресурса
  • resource_key: ключ адреса (значение типа count или for_each) либо null, если не используется ни один из них
  • implied_provider: тип провайдера, подразумеваемый типом ресурса; он может не соответствовать провайдеру ресурса при использовании псевдонимов провайдеров

Пример​

Блок кода
{
  "addr": "module.pets.random_pet.pet[\"friend\"]",
  "module": "module.pets",
  "resource": "random_pet.pet[\"friend\"]",
  "implied_provider": "random",
  "resource_type": "random_pet",
  "resource_name": "pet",
  "resource_key": "friend"
}

Сообщения о тестировании​

Запуск тестов OpenTofu приводит к выводу нескольких сообщений. Типы сообщений включают:

  • test_abstract: сводка найденных файлов и тестов
  • test_file: сводка выполнения файла тестов
  • test_run: сводка выполнения тестов
  • test_summary: сводка общего статуса выполнения файлов тестов и статистики

Общая информация о тестах​

Объект test_abstract сообщения test_abstract содержит динамические ключи, составленные из имени файла тестов:

  • main.tftest.hcl: список тестов, найденных в файле тестов

Пример​

Блок кода
{
    "@level": "info",
    "@message": "Found 1 file and 1 run block",
    "@module": "tofu.ui",
    "@timestamp": "2024-04-20T17:24:48.418126+10:00",
    "test_abstract": {
        "main.tftest.hcl": [
            "test"
        ]
    },
    "type": "test_abstract"
}

Файл тестов​

Объект test_file сообщения test_file содержит следующие ключи:

  • path: относительный путь к файлу тестов
  • status: общий статус выполнения тестов

Пример​

Блок кода
{
    "@level": "info",
    "@message": "main.tftest.hcl... pass",
    "@module": "tofu.ui",
    "@testfile": "main.tftest.hcl",
    "@timestamp": "2024-04-20T17:24:48.588473+10:00",
    "test_file": {
        "path": "main.tftest.hcl",
        "status": "pass"
    },
    "type": "test_file"
}

Запуск теста​

Объект сообщения test_run test_run содержит следующие ключи:

  • path: относительный путь к файлу теста
  • run: имя выполненного теста
  • status: общий статус выполнения теста

Пример​

Блок кода
{
    "@level": "info",
    "@message": "  \"test\"... pass",
    "@module": "tofu.ui",
    "@testfile": "main.tftest.hcl",
    "@testrun": "test",
    "@timestamp": "2024-04-20T17:24:48.588519+10:00",
    "test_run": {
        "path": "main.tftest.hcl",
        "run": "test",
        "status": "pass"
    },
    "type": "test_run"
}

Сводка по тестам​

Объект сообщения test_summary test_summary содержит следующие ключи:

  • status: общий статус всех выполненных тестов
  • passed: общее число успешно пройденных тестов
  • failed: общее число проваленных тестов
  • errored: общее число тестов с ошибками
  • skipped: общее число пропущенных тестов

Пример​

Блок кода
{
    "@level": "info",
    "@message": "Success! 1 passed, 0 failed.",
    "@module": "tofu.ui",
    "@timestamp": "2024-04-20T17:24:48.716977+10:00",
    "test_summary": {
        "status": "pass",
        "passed": 1,
        "failed": 0,
        "errored": 0,
        "skipped": 0
    },
    "type": "test_summary"
}

Необработанный вывод JSON​

Поскольку флаг -json обычно включает описанный выше машиночитаемый интерфейс, некоторые команды не следуют той же схеме. Вместо этого их можно использовать с флагом -json (если это не является обязательным требованием), чтобы записать итоговый результат в формате JSON.

Большинство этих команд не придерживаются строгих правил машиночитаемого интерфейса, поэтому следует ожидать следующего:

  • Любое сообщение о неудачном выполнении будет выведено в человекочитаемом формате (даже если указан флаг -json).
  • При успешном выполнении команды выводится как минимум один JSON-объект с результатом.

Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/internals/machine-readable-ui/

Spec-Zone.ru

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