Параметр custom_data не запускается в скрипте terraform - PullRequest
0 голосов
/ 08 мая 2020

Я создаю виртуальную машину в azure, используя terraform, в котором я передаю параметр пользовательских данных, который должен фактически запускать файл yaml, который выполняет несколько установок. Но это не срабатывает. Не могли бы вы посоветовать по этой проблеме. enter code here

ВМ контроллера

resource "azurerm_virtual_machine" "controller-vm" {
name                  = "controller-vm"`enter code here`
location              = var.region

resource_group_name   = azurerm_resource_group.resourcegroup.name
network_interface_ids = [azurerm_network_interface.controllernic.id]
vm_size               = var.ctr_instance_type

storage_os_disk {
    name              = "controller-os-disk"
    caching           = "ReadWrite"
    create_option     = "FromImage"
    disk_size_gb      = "400"
    managed_disk_type = "Standard_LRS"
}

storage_data_disk {
    name              = "controller-data-disk0"
    caching           = "ReadWrite"
    create_option     = "Empty"
    managed_disk_type = "Standard_LRS"
    disk_size_gb      = "512"
    lun               = 1
}

storage_data_disk {
    name              = "controller-data-disk1"
    caching           = "ReadWrite"
    create_option     = "Empty"
    managed_disk_type = "Standard_LRS"
    disk_size_gb      = "512"
    lun               = 2
}

storage_image_reference {
    publisher = "OpenLogic"
    offer     = "CentOS-CI"
    sku       = "7-CI"
    version   = "latest"
}

os_profile {
    computer_name  = "controller.${var.project_id}.local"
    admin_username = var.user
    custom_data = file(pathexpand(var.ctr_cloud_init_file))
}

os_profile_linux_config {
    disable_password_authentication = true
    ssh_keys {
        path     = "/home/${var.user}/.ssh/authorized_keys"
        key_data = file(pathexpand(var.ssh_pub_key_path))
    }
}

boot_diagnostics {
    enabled     = "true"
    storage_uri = azurerm_storage_account.storageaccount.primary_blob_endpoint
}

tags = {
    environment = var.project_id,
    user = var.user
}

}

В приведенном выше коде есть custom_data = file (pathexpand (var.ctr_cloud_init_file)), который на самом деле должен вызывать yaml файл. чего здесь не произошло.

Найдите файл yaml, который я использую. ctr_cloud_init_file

users:
- name: bluedata
  groups: [sudo, wheel]
  shell: /bin/bash
  sudo: ['ALL=(ALL) NOPASSWD:ALL']
  ssh-authorized-keys: 
  ### SSH Public Key Here
  - ssh-rsa ...

package_upgrade: true
packages: 
  - epel-release
  - firewalld
repo_update: true
repo_upgrade: all

1 Ответ

0 голосов
/ 11 мая 2020

Для обеспечения Azure виртуальной машины файлом Cloud-init это не лучший способ загружать файл напрямую. Для Cloud-init я бы рекомендовал вам использовать template_cloudinit_config, это специальный поставщик для Cloud-init, и его набор функций специализируется на функциях cloud-init. А вот пример кода:

data "template_file" "script" {
  template = file("cloud-init")
}

# Render a multi-part cloud-init config making use of the part
# above, and other source files
data "template_cloudinit_config" "config" {
  gzip          = true
  base64_encode = true

  # Main cloud-config configuration file.
  part {
    filename     = "cloud-init"
    content_type = "text/cloud-config"
    content      = data.template_file.script.rendered
  }
}

resource "azurerm_virtual_machine" "controller-vm" {
...
os_profile {
    computer_name  = "controller.${var.project_id}.local"
    admin_username = var.user
    custom_data = data.template_cloudinit_config.config.rendered
}
...
}
...