#python #windows #terraform #digital-ocean
Вопрос:
Я работаю над небольшим приложением на python для своего личного потока Twitch и решил использовать Terraform для управления своей инфраструктурой. Каждый раз, когда я пытаюсь применить свои main.tf это не удается в моем главном поставщике файлов. Я в основном беру текущую папку, в которой находится мой код python (используя абсолютный путь в моем .tfvvars
), перемещаю ее /tmp/
на удаленный сервер, а затем перемещаю в конечное местоположение кода, как только код появится в поле.
(В некотором контексте это старый файл до версии 0.11, который обновляется после того, как некоторое время работал нормально)
Вот мой main.tf
terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}
variable "private_key_file" {
# sensitive = true
# sensitive temp disabled for debugging
}
variable "twitch_oauth_token" {
# sensitive = true
}
variable "twitch_client_id" {
# sensitive = true
}
variable "auth_token" {
# sensitive = true
}
variable "ssh_key" {
# sensitive = true
}
variable "unix_user" {
# sensitive = true
}
variable "unix_user_priv" {
# sensitive = true
}
variable "local_code_directory" {}
variable "remote_code_directory" {}
variable "tmp_remote_code_directory" {
default = "/tmp/tmp_code"
}
variable "systemd_service_file_full_path" {}
variable "systemd_service_file_dest_name" {}
# Configure the DigitalOcean Provider
provider "digitalocean" {
token = var.auth_token
}
# Create a web server
resource "digitalocean_droplet" "bot" {
image = "ubuntu-18-04-x64"
name = "twitch-bot"
region = "nyc2"
size = "s-1vcpu-1gb"
ssh_keys = [var.ssh_key]
connection {
user = "var.unix_user_priv"
type = "ssh"
private_key = file(var.private_key_file)
host = digitalocean_droplet.bot.ipv4_address
}
provisioner "remote-exec" {
inline = [
"adduser --disabled-password -gecos "" ${var.unix_user}",
"mkdir ${var.remote_code_directory}",
"mkdir /tmp/twitch-bot/",
"mkdir /etc/systemd/system/${var.systemd_service_file_full_path}.d/",
"echo "[Service]nEnvironment=TWITCH_OAUTH_TOKEN=${var.twitch_oauth_token}nEnvironment=TWITCH_API_CLIENT_ID=${var.twitch_client_id}" >> /etc/systemd/system/${var.systemd_service_file_full_path}.d/override.conf",
"mkdir -p ${var.tmp_remote_code_directory}",
"mkdir -p ${var.remote_code_directory}"
]
}
provisioner "file" {
source = var.systemd_service_file_full_path
destination = "/etc/systemd/system/${var.systemd_service_file_dest_name}"
}
# Error happens here
provisioner "file" {
source = var.local_code_directory
destination = var.tmp_remote_code_directory
}
provisioner "remote-exec" {
inline = [
"mv ${var.tmp_remote_code_directory} ${var.remote_code_directory}",
"sed -i.bak -e "s/remote_directory/${var.remote_code_directory}/" /etc/systemd/system/${var.systemd_service_file_full_path}",
"systemd enable twitchbot.service"
]
}
}
Я настроил оба назначения папок (временное и окончательное) для вывода внутри и за пределами папки пользователя. В любом случае результат один и тот же. Проводник процессов также показывает, что PID TF является единственным PID, блокирующим файл.
I’m running my tf apply
in Powershell on Windows Terminal. I’ve run all the related software as and not as admin. Same result either way. I’ve also reinstalled TF’s newest version and deleted/recreated the .tfstate
and the while .terraform
folder. Still no luck.
Закомментировав средство предоставления файлов, окно завершит создание, а терраформирование завершится изящно.
Пожалуйста, дайте мне знать, если я делаю что-то глупое или если мой Гуглфу слабый и есть простая ссылка для этой конкретной проблемы. Я планировал как можно больше отойти от поставщиков и перейти на Packer cloud-init
или просто использовать его, так как я все равно использую это программное обеспечение для несвязанных проектов. Однако я бы предпочел, чтобы это снова запустилось и работало на >0.11 terraform, а затем, если возможно, повторите оттуда.
Заранее спасибо.