Azure:无法向VM传递或执行自定义数据

问题描述

我想在自动化测试期间使用tmplate.json和parameters.json文件使用自定义数据文件部署Azure Ubuntu 18.04-LTS VM。

尽管VM已成功部署,但自定义数据执行似乎失败了,我不明白为什么...

根据此link,在我使用的图像中可以使用cloud-init。

我的template.json文件包含:

"parameters": {
    ...
    "customData": {
        "type": "string"
    }
    ...
},"resources": [
    ...
    {
        "type": "Microsoft.Compute/virtualMachines","apiVersion": "2020-06-01","name": "[parameters('virtualMachineName')]","location": "[parameters('location')]","dependsOn": [
            "[concat('Microsoft.Network/networkInterfaces/',parameters('networkInterfaceName'))]"
        ],"properties": {
            ...
            "osProfile": {
                "computerName": "[parameters('virtualMachineComputerName')]","adminUsername": "[parameters('adminUsername')]","linuxConfiguration": {
                    "disablePasswordAuthentication": true,"ssh": {
                        "publicKeys": [
                            {
                                "path": "[concat('/home/',parameters('adminUsername'),'/.ssh/authorized_keys')]","keyData": "[parameters('adminPublicKey')]"
                            }
                        ]
                    }
                },"customData": "[parameters('customData')]"
            },...
    }
]

此外,我还有一个parameters.json文件,其中包含:

"parameters": {
    ...
    "customData": {
        "value": "I2Nsb3VkLWNvbmZpZ1xucGFja2FnZV91cGdyYWRlOiB0cnVlXG5wYWNrYWdlczpcbiAgLSBpcGVyZlxuICAtIHRjcHJlcGxheVxuICAtIG5ldHBlcmY="
    }
}

该值是YAML base64编码的,它的解码文本是:

#cloud-config\npackage_upgrade: true\npackages:\n  - iperf\n  - tcpreplay\n  - netperf
       

(*)上面的template.json和parameters.json文件是部分文件-我省略了与我的问题无关的内容

我还检查了/var/log/waagent.log文件,但没有发现任何可疑的东西。

但是,在我手动部署了ubuntu VM并将上述YAML粘贴到“自定义数据”部分(在“高级设置”页面中)后,每个工作正常(“ iperf”,“ netperf”和“ tcpreplay” '找到命令)

任何帮助将不胜感激!

解决方法

根据我的经验,问题在于自定义数据的值不正确。我检查VM是否成功进行了cloud-init设置,代码与您的代码不匹配。您可以自己检查文件/var/lib/waagent/ovf-env.xml。不要自己将文本更改为字符串。您可以在线encode文本。