出于开发目的,我如何运行通常通过用户数据运行的cloud-init yaml文件?
我知道如何重新运行cloud-init,但是我想开发复杂的cloud-init文件,并且要做到这一点,持续构建新实例非常困难。
答案 0 :(得分:1)
很抱歉,您将不得不在一个新的干净实例(或至少一个快照)上运行它。即使您手动返回并从不同的步骤开始,也会有潜在的副作用。
我想您会发现,如果您习惯于管理本地VM,则可以相当快地调试脚本。
答案 1 :(得分:1)
迭代用户数据输入到cloud-init的最快路径可能是通过lxd。您可以在虚拟机主机或裸机系统上快速set up lxd。设置完成后,启动速度很快。
$ cat ud.yaml
#cloud-config
runcmd:
- "read up idle < /proc/uptime; echo Up $up seconds | tee /run/runcmd.log"
$ lxc launch ubuntu-daily:bionic ud-test "--config=user.user-data=$(cat ud.yaml)"
Creating ud-test
Starting ud-test
$ lxc exec ud-test cat /run/runcmd.log
Up 8.05 seconds
$ lxc stop ud-test
$ lxc delete ud-test
答案 2 :(得分:0)
您可能只运行cloud-init clean
就可以逃脱,然后重新运行它。
我正在尝试cloud-init并使用带有KVM的Ubuntu盒作为虚拟化实验室。我做了一个简单的Makefile
来构建cloud-init
映像并将其在KVM实例中启动。
您可以在这里看到我的代码:
https://github.com/brennancheung/playbooks/blob/master/cloud-init-lab/Makefile
all: clean build run
INSTANCE_NAME := "vm"
CLOUD_IMAGE_FILE = "bionic-server-cloudimg-amd64.img"
CLOUD_IMAGE_BASE_URL := "http://cloud-images.ubuntu.com/bionic/current"
CLOUD_IMAGE_URL := "$(CLOUD_IMAGE_BASE_URL)/$(CLOUD_IMAGE_FILE)"
download:
wget $(CLOUD_IMAGE_URL)
clean:
@echo "Removing build artifacts"
-@rm -f config.img 2>/dev/null
-@virsh destroy $(INSTANCE_NAME) 2>/dev/null || true
-@virsh undefine $(INSTANCE_NAME) 2>/dev/null || true
-@rm -f $(INSTANCE_NAME).img
build:
@echo "Building cloud config drive"
cloud-localds config.img config.yaml
cp $(CLOUD_IMAGE_FILE) $(INSTANCE_NAME).img
run:
@echo "Spawning instance $(INSTANCE_NAME)"
virt-install \
--name $(INSTANCE_NAME) \
--memory 8192 \
--disk ./$(INSTANCE_NAME).img,device=disk,bus=virtio \
--disk ./config.img,device=cdrom \
--os-type linux \
--os-variant ubuntu18.04 \
--virt-type kvm \
--graphics none \
--network bridge=br0