【问题标题】:Run cloud-init cloud-config yaml file运行 cloud-init cloud-config yaml 文件
【发布时间】:2019-03-25 11:46:03
【问题描述】:

出于开发目的,我如何运行通常通过用户数据运行的 cloud-init yaml 文件?

我知道如何重新运行 cloud-init,但我想开发复杂的 cloud-init 文件,而要做到这一点,持续构建新实例相当困难。

【问题讨论】:

    标签: cloud-init


    【解决方案1】:

    很抱歉,您将不得不在一个新的干净实例(或至少一个快照)上运行它。即使您确实手动返回并从不同的步骤开始,也存在潜在的副作用。

    我想你会发现,如果你习惯于管理本地虚拟机,你可以相当快地调试你的脚本。

    【讨论】:

    • DRAT!我希望我错过了一些东西:( :( :(
    【解决方案2】:

    将用户数据输入迭代到 cloud-init 的最快路径可能是通过 lxd。您可以在 vm 主机或裸机系统上快速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
    

    【讨论】:

      【解决方案3】:

      您可能只需运行 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
      

      【讨论】:

        【解决方案4】:

        我不知道为什么这个答案不在这里。也许它不适用于早期版本。

        我为开发测试重新运行 cloud-init 所做的只是(尤其是在测试用户数据更改时): 1 - 更改配置文件/文件,通常只有/etc/cloud/cloud.cfg 2 - 运行干净:

        cloud-init clean -l 
        

        -l 也会清理日志 3 - 重新运行 cloud-init

        cloud-init init
        

        当然,这有其局限性,根据您测试的设置,cloud-init clean 不会恢复之前的更改,但也许您可以找到测试方法。例如,我正在测试新用户的创建,每次我更改用户设置中的某些内容并想对其进行测试时。我创建了一个新用户。

        是的,所有这些都是快速的开发测试,如果您需要真正验证您的更改 - 您需要新实例。

        【讨论】:

          猜你喜欢
          • 2023-03-28
          • 2014-12-14
          • 2021-11-10
          • 2016-05-14
          • 2020-12-20
          • 2018-06-12
          • 2014-06-02
          • 2018-08-20
          • 2018-12-15
          相关资源
          最近更新 更多