Как вызвать ansible playbook в коде terraform?

У меня есть ansible playbook, который хорошо работает, теперь мне нужно вызвать этот playbook с помощью скриптов terrform. В настоящее время я использую код, показанный ниже, но он приводит к ошибке во время инициализации terraform: Error: Unknown root level key: provisioner

Я использую Terraform v0.11.7, и ошибка возникает только при запуске этого конкретного кода. Также мой main.tf состоит только из этого кода. Структура каталогов, которую я использовал, такая:

.
├── create-user.yml
├── library
│   └── mkpassword.py
├── main.tf
├── outputs.tf
├── roles
│   └── linux_user_creation
│       └── tasks
│           └── main.yml
└── variables.tf

main.tf выглядит так:

  provisioner "remote-exec" {
  inline = ["sudo dnf -y install python"]

  connection {
    type        = "ssh"
    user        = "ubuntu"
    private_key = "${file(var.ssh_keyname)}"
  }
}

provisioner "remote-exec" {
  command = ["ansible-playbook -u root --private-key ${var.ssh_keyname} -i ${self.ipv4_address} create-user.yml -e 'email_id=${var.email_id}'"]
}

Я ожидаю, что playbook должен быть вызван из сценариев terraform и должен отображать результаты.

Поставщик должен быть частью другого ресурса, такого как ресурс aws_instance или даже ресурс null_resource, если он не имеет смысла. Ответчикам было бы полезно, если бы вы показали свой полный код Terraform, чтобы они могли более подробно объяснить, как это должно работать.

ydaetskcoR 26.05.2019 19:52

Здравствуйте, @ydaetskcoR. Я обновил main.tf и не добавил никаких ресурсов, потому что создаю ресурсы с другими tf.

KanikaM 26.05.2019 19:58

Вы можете проверить подключаемый модуль Ansible Provisioner для Terraform. github.com/radekg/terraform-provisioner-ansible Кроме того, я написал статью об использовании, которая может быть вам полезна medium.com/@robinflume/…

rflume 26.05.2019 22:19

@rflume Большое спасибо, но как вы думаете, приведенный выше код выглядит нормально? Не знаю почему, но все запускается provisioner "remote-exec" модуль, он возвращает мне ошибку как: Неизвестный ключ корневого уровня: поставщик

KanikaM 27.05.2019 15:18

Если это все, что у вас есть в Terraform, и вы на самом деле не используете Terraform для создания ресурса где-то, к чему вы подключаетесь и зачем вам вообще нужен Terraform вместо того, чтобы просто запускать Ansible напрямую?

ydaetskcoR 27.05.2019 15:40
Введение в Ansible Roles
Введение в Ansible Roles
Ansible - это отличный инструмент управления конфигурацией, который можно использовать для автоматизации настройки или развертывания на большом...
3
5
7 432
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Форма с вырезанным кодом main.tf не завершена. Не могли бы вы опубликовать полные определения ресурсов, в которых вы запускаете средства обеспечения remote-exec, пожалуйста?

Что должен делать плейбук Ansible? Создать пользователя на самом удаленном хосте? Или это просто хост, на котором хранятся ваши Ansible-скрипты, а пользователь фактически создается оттуда на другом удаленном хосте?

Как упоминал @ydaetskcoR, вам нужно запустить этот код в null_resource:

null_resource "provisioner" {
  connection {
    ... # set the connection parameters here
  }

  provisioner "remote-exec" {
    command = ["ansible-playbook -u root --private-key ${var.ssh_keyname} -i ${self.ipv4_address} create-user.yml -e 'email_id=${var.email_id}'"]
  }
}

Однако я бы предложил установить поставщика Ansible, как уже упоминалось в комментарии выше. Таким образом, вы свяжете плейбук Ansible напрямую с кодом Terraform, и вам не нужно будет подключаться к какому-либо другому экземпляру.

Спасибо за ответ @rflume. В основном ansible playbook создает пользователей на удаленной машине. Если я использую remote-exec, он не работает и выдает мне ошибку типа «команда не является допустимым атрибутом ключа», но он не дает такой ошибки при работе на local-exec, но не дает мне желаемого результата.

KanikaM 03.06.2019 12:45

Вы пытались изменить command на inline, как указано в Документах (terraform.io/docs/provisioners/remote-exec.html)?

rflume 03.06.2019 13:09

Другие вопросы по теме