multipass cloud-init 命令行找不到 yaml 文件

multipass cloud-init 命令行找不到 yaml 文件

这个问题看上去很愚蠢,因为它太简单了。

刚刚开始接触多通道,所以我尝试的第一件事就是使用云初始化文件。但是多通道报告错误:No such file:

[opt/multipass] $ multipass launch -n test --cloud-init setup.yaml

error: No such file: setup.yaml

所以我尝试了./setup.yaml 绝对路径,但/opt/multipass/setup.yaml 都给出相同的“没有这样的文件”错误。

/选择/多通道

drwxrwsr-x+  2 david    users 4096 Feb  6 08:04 ./
drwxrwsr-x+ 44 sysadmin users 4096 Feb  6 07:24 ../
-rw-rw-r--+  1 david    users  256 Feb  6 07:50 setup.yaml

我这里遗漏了什么?所有的例子看起来都像这样。https://ubuntu.com/blog/using-cloud-init-with-multipass 如果 yaml 文件中存在问题,是否会出现此错误?yaml 文件是否需要放在特定目录中?或者是否具有特定所有者、权限(现在每个人都可以读取)。这看起来很简单……应该可以正常工作,不是吗?

设置.yaml

users:
    - default
    - name: ubuntu
    - sudo: ALL=(ALL) NOPASSWD:ALL
      plain_text_passwd: 'ubuntu'
      home: /home/ubuntu
      shell: /bin/bash
      lock_passwd: false
      gecos: Ubuntu
      groups: [adm, audio, cdrom, dialout, floppy, video, plugdev, dip, netdev, sudo]

答案1

嗯,这个问题并不完全是愚蠢的,因为问题出现是因为 snap 不一定能访问主机文件系统,而 multipass 是一个 snap 应用程序。

但是,默认情况下,当您安装 multipass 时,它确实可以访问用户主目录,因此在查找 clould init 文件时,它必须与您的主目录相关,并且我有 yaml 文件,/opt/multipass但 multipass 默认情况下无法在那里“看到”。

因此将 yaml 文件移动到~/multipass/setup.yaml然后使用

multipass launch -n test --cloud-init ./multipass/setup.yaml 从主目录工作。

具有别名的 bash 脚本/函数alias mpl="multipass_launch"可以使启动变得简单

multipass_launch () {
    subdir=${MULTIPASS_HOME:-cloud-init}
    [[ $1 ]] && name="-n $1"
    if [[ $2 ]]; then
     if [[ -f $HOME/$subdir/$2.yaml ]]; then
       init="--cloud-init $HOME/$subdir/$2.yaml"
     else 
      echo no cloud init file $HOME/$subdir/$2.yaml
      return 1
     fi
   fi  
    echo running: multipass launch $name $init
    multipass launch $name $init
 }
 }

现在使用该云初始化文件启动就变成了 mpl test setup

如果你想保留 multipass 可以在其他地方找到的文件,那么使用 bindfs

答案2

这帮助我设置了云配置文件。 https://www.digitalocean.com/community/tutorials/how-to-use-cloud-config-for-your-initial-server-setup

这里还有一个例子,但一定要用你的 SSH 密钥替换

如果您不知道如何获取 ssh 密钥,请执行以下命令:cat ~/.ssh/id_rsa.pub

下面的示例文件

#cloud-config
users:
  - name: testcloud
    ssh-authorized-keys:
      - ssh-rsa 
INSERT YOUR  PUBLIC SSH KEY HERE
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    shell: /bin/bash

相关内容