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
,否则它将被视为常规注释。