ปัญหา
หลังจากสร้างเทมเพลต Ubuntu 20.04 (ลองใช้ 21.04 ด้วย) ด้วย Packer ฉันไม่สามารถตั้งค่าใหม่ได้เมื่อสร้างอินสแตนซ์เทมเพลตด้วย Terraform การกำหนดค่านี้ไม่มีปัญหากับ Debian 10
แพ็คเกอร์
{
"ผู้สร้าง": [
{
"ซีพียู": "{{ผู้ใช้ `vm-cpu-num`}}",
"RAM": "{{ผู้ใช้ `vm-mem-size`}}",
"RAM_reserve_all": จริง
"boot_command": [
"<esc><esc><esc><esc>จ<รอ>",
"<เดล><เดล><เดล><เดล><เดล><เดล><เดล><เดล>",
"<เดล><เดล><เดล><เดล><เดล><เดล><เดล><เดล>",
"<เดล><เดล><เดล><เดล><เดล><เดล><เดล><เดล>",
"<เดล><เดล><เดล><เดล><เดล><เดล><เดล><เดล>",
"<เดล><เดล><เดล><เดล><เดล><เดล><เดล><เดล>",
"<เดล><เดล><เดล><เดล><เดล><เดล><เดล><เดล>",
"<เดล><เดล><เดล><เดล><เดล><เดล><เดล><เดล>",
"<เดล><เดล><เดล><เดล><เดล><เดล><เดล><เดล>",
"<เดล><เดล><เดล><เดล><เดล><เดล><เดล><เดล>",
"<เดล><เดล><เดล><เดล><เดล><เดล><เดล><เดล>",
"<เดล><เดล><เดล><เดล><เดล><เดล><เดล><เดล>",
"<เดล><เดล><เดล><เดล><เดล><เดล><เดล><เดล>",
"<เดล><เดล><เดล><เดล><เดล><เดล><เดล><เดล>",
"<เดล><เดล><เดล><เดล><เดล><เดล><เดล><เดล>",
"ลินุกซ์ /casper/vmlinuz --- ติดตั้งอัตโนมัติ ds=\"nocloud-net;seedfrom=http://{{.HTTPIP}}:{{.HTTPPort}}/\"<ใส่><รอ>",
"initrd /casper/initrd<ใส่><รอ>",
"บูต <ป้อน>",
"<ใส่><f10><รอ>"
]
"boot_wait": "3 วินาที",
"boot_order": "ดิสก์,ซีดีรอม",
"คลัสเตอร์": "{{ผู้ใช้ `คลัสเตอร์`}}",
"convert_to_template": "จริง",
"datastore": "{{ผู้ใช้ `datastore`}}",
"disk_controller_type": "pvscsi",
"โฟลเดอร์": "{{ผู้ใช้ `โฟลเดอร์`}}",
"guest_os_type": "ubuntu64Guest",
"โฮสต์": "{{ผู้ใช้ `โฮสต์`}}",
"http_directory": "http",
"http_port_min" : "8000",
"http_port_max" : "8000",
"insecure_connection": "จริง",
"iso_paths": ["{{ผู้ใช้ `iso-paths`}}"],
"network_adapter": [
{
"เครือข่าย": "{{ผู้ใช้ `เครือข่าย`}}",
"network_card": "vmxnet3"
}
]
"รหัสผ่าน": "{{ผู้ใช้ `vcenter-password`}}",
"shutdown_command": "echo '{{user `ssh-username`}}' | sudo -S ปิด -P ทันที",
"ssh_username": "{{ผู้ใช้ `ssh-ชื่อผู้ใช้`}}",
"ssh_password": "{{ผู้ใช้ `ssh-password`}}",
"ssh_timeout": "20 นาที",
"ssh_handshake_attempts": "50",
"พื้นที่จัดเก็บ": [
{
"disk_size": "{{ผู้ใช้ `vm-disk-1-size`}}",
"disk_thin_provisioned": จริง
}
]
"ประเภท": "vsphere-iso",
"ชื่อผู้ใช้": "{{ผู้ใช้ `vcenter-ชื่อผู้ใช้`}}",
"vcenter_server": "{{ผู้ใช้ `vcenter-server`}}",
"vm_name": "{{ผู้ใช้ `ชื่อ vm`}}"
}
]
"ผู้จัดเตรียม": [
{
"ประเภท": "เชลล์",
"อินไลน์": ["curl -sSL https://raw.githubusercontent.com/vmware/cloud-init-vmware-guestinfo/master/install.sh | sudo sh -"]
},
{
"ประเภท": "เชลล์",
"อินไลน์": ["mkdir $HOME/.ssh && echo {{ user `ssh-key` }} > $HOME/.ssh/authorized_keys"]
},
{
"ประเภท": "แก้ไขได้",
"playbook_file": "../../ansible/packer.yml"
},
{
"อินไลน์": [
"echo 'การสร้างเทมเพลต Packer -- เสร็จสมบูรณ์'"
]
"ประเภท": "เชลล์"
}
]
}
ไฟล์ข้อมูลผู้ใช้ที่แจกจ่ายโดย Packer
#cloud-config
ติดตั้งอัตโนมัติ:
รุ่น: 1
ภาษา: en_US
แพ็คเกจ:
- เครื่องมือ open-vm
- หลามเป็นงูหลาม3
- คลาวด์เริ่มต้น
แป้นพิมพ์:
รูปแบบ: th
ตัวแปร: เรา
เครือข่าย:
เครือข่าย:
รุ่น: 2
อีเธอร์เน็ต:
ens192:
dhcp4: จริง
ตัวระบุ dhcp: mac
พื้นที่จัดเก็บ:
รูปแบบ:
ชื่อ: lvm
ตัวตน:
ชื่อโฮสต์: อูบุนตู
ชื่อผู้ใช้: อูบุนตู
รหัสผ่าน: $6$rounds=4096$8dkK1P/oE$2DGKKt0wLlTVJ7USY.0jN9du8FetmEr51yjPyeiR.zKE3DGFcitNL/nF1l62BLJNR87lQZixObuXYny.Mf17K1
ssh:
ติดตั้งเซิร์ฟเวอร์: ใช่
ข้อมูลผู้ใช้:
ปิดการใช้งาน_root: เท็จ
คำสั่งล่าช้า:
- 'sed -i "s/dhcp4: true/&\n dhcp-identifier: mac/" /target/etc/netplan/00-installer-config.yaml'
- echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' > /target/etc/sudoers.d/ubuntu
สคริปต์การล้างข้อมูลที่เรียกใช้โดย Ansible allocationner
#!/bin/sh
ตั้ง -e
# cloud init: ย้ายไฟล์และเปลี่ยนสิทธิ์
#mv /tmp/cloud-init/* /etc/cloud/cloud.cfg.d/
chown -R root:root /etc/cloud/cloud.cfg.d/
# ล้างข้อมูล cloud-init
rm -rf /var/lib/cloud/*
ln -s /var/lib/cloud/instances /var/lib/cloud/instance.ln -s /var/lib/cloud/instances /var/lib/cloud/
# ล้างบันทึก cloud-init
rm -rf /var/log/cloud-init*
# ล้างไฟล์ tmp
rm -rf /tmp/cloud-init
truncate -s 0 /etc/machine-id
rm /var/lib/dbus/รหัสเครื่อง
ln -s /etc/machine-id /var/lib/dbus/machine-id
เทอร์ราฟอร์ม
main.tf
ทรัพยากร "vsphere_virtual_machine" "vm" {
ชื่อ = "${var.hostname}"
#resource_pool_id = "${data.vsphere_compute_cluster.cluster.resource_pool_id}"
resource_pool_id = "${data.vsphere_resource_pool.pool.id}"
datastore_id = "${data.vsphere_datastore.datastore.id}"
num_cpus = var.vm_cpus
หน่วยความจำ = var.vm_ram
guest_id = "${data.vsphere_virtual_machine.template.guest_id}"
scsi_type = "${data.vsphere_virtual_machine.template.scsi_type}"
เชื่อมต่อเครือข่าย {
network_id = "${data.vsphere_network.network.id}"
adapter_type = "${data.vsphere_virtual_machine.template.network_interface_types[0]}"
}
ดิสก์ {
ป้าย = "disk0"
size = "${var.os_disk_size}"
eagerly_scrub = "${data.vsphere_virtual_machine.template.disks.0.eagerly_scrub}"
thin_provisioned = "${data.vsphere_virtual_machine.template.disks.0.thin_provisioned}"
}
"ดิสก์" แบบไดนามิก {
for_each = var.data_disk ? [1] :[]
เนื้อหา {
#ฟิลด์ทั้งหมดในทรัพยากร vsphere_virtual_disk ไม่สามารถเปลี่ยนรูปได้ในขณะนี้ และบังคับให้มีทรัพยากรใหม่หากมีการเปลี่ยนแปลง
ป้ายชื่อ = "disk1"
แนบ = จริง
เส้นทาง = "${vsphere_virtual_disk.data-disk[0].vmdk_path}"
unit_number = 1
datastore_id = "${data.vsphere_datastore.datastore.id}"
}
}
extra_config = {
"guestinfo.metadata" = base64gzip(templatefile("${path.module}/templates/metadata.tmpl", { ชื่อโฮสต์ = var.hostname }))
"guestinfo.metadata.encoding" = "ฐาน 64"
"guestinfo.userdata" = base64gzip(templatefile("${path.module}/templates/userdata.tmpl", {
ชื่อโฮสต์ = var.ชื่อโฮสต์
โดเมน = var.domain
}))
"guestinfo.userdata.encoding" = "ฐาน 64"
}
โคลน {
template_uuid = "${data.vsphere_virtual_machine.template.id}"
}
}
userdata.tmpl
#cloud-config
preserv_hostname: เท็จ
Manage_etc_hosts: จริง
prefer_fqdn_over_hostname: จริง
fqdn: "${ชื่อโฮสต์}.${โดเมน}"
เรียกใช้ cmd:
- echo สวัสดี > /root/hello
- แตะ /root/lol
Cloud-init v. 21.2-3-g899bfaa9-0ubuntu2~21.04.1 เสร็จสิ้นเมื่อวันอังคารที่ 28 กันยายน 2021 15:55:02 +0000 แหล่งข้อมูล DataSourceNone ขึ้น 19.12 วินาที
2021-09-28 15:55:02,449 - cc_final_message.py[คำเตือน]: ใช้แหล่งข้อมูลทางเลือก