cloud-init 似乎忽略了 write-files 脚本

cloud-init 似乎忽略了 write-files 脚本

H!

我正在尝试使用 terraform Libvirt 提供程序通过 cloud-init 配置虚拟机。出于某些我不明白的原因,设置主机名有效,但编写和运行用于其他配置的脚本却完全被忽略。如果有人能解释我做错了什么,我将不胜感激。我的 yaml:

    #cloud-config
    local-hostname: ${hostname}
    instance-hostname: ${hostname}
    write_files:
      - content: |
          #/bin/bash
          hostnamectl set-hostname ${hostname}
          NET_INT=$(ip link | awk -F: '$0 !~ "lo|vir|wl|^[^0-9]"{print $2;getline}')
          nmcli con mod $NET_INT ipv4.dns "X.X.X.X"
          nmcli con mod $NET_INT ipv4.dns-search "dom.internal"
          ipa-client-install --hostname=${hostname} \
          --server=XXX.services.dom.internal \
          --mkhomedir --domain=services.dom.internal \
          --realm=SERVICES.DOM.INTERNAL --no-ntp --principal=someguy \
          --password=XXXXX --enable-dns-updates --unattended
          ipa-client-automount --unattended
        path: /tmp/setup.sh
        permissions: '0755'
        owner: root
     runcmd:
       -  /tmp/setup.sh

(希望)相关的 .tf 位:

data "template_file" "custom_config" {
   template = file("${path.module}/meta_data.yaml")

   vars = {
      hostname = "${var.vm_name}.dom.internal"
   }
}

resource "libvirt_cloudinit_disk" "commoninit" {
   name = "commoninit.iso"
   meta_data =  data.template_file.custom_config.rendered

   pool = "pool"
}

resource "libvirt_domain" "centos8_vm" {

  name = "${var.vm_name}"
  cloudinit = libvirt_cloudinit_disk.commoninit.id
  qemu_agent = true

答案1

正确语法舍邦#!interpreter [optional-arg]。这行代码告诉系统让哪个程序运行这个脚本。

因此,脚本的第一行应该是#!/bin/bash,否则它将被视为常规注释。

相关内容