azure - 无法使用 AZ CLI az create vm 命令添加自定义数据
问题描述
我正在运行以下命令在我的资源组上创建一个 VM,但是当我登录时,我没有看到该文件/root/hello.txt
。
az vm create --name "my_vm" --resource-group "my_rg" --image "centos" --admin-username "centos" --os-disk-size-gb "100" --vnet-name "my_vnet" --subnet "public-4" --ssh-key-values "ssh-rsa ..." --size "Standard_DS1_v2" --nsg "my_nsg" --custom-data '#!/bin/bash
touch /root/hello.txt
' --data-disk-sizes-gb "10"
当然,有些换行符不能很好地粘贴,但这不重要。另外,我不想传递文件路径。我需要传递文本,就像我为 AWS 做的那样。
最终目标是在 bash 脚本下运行以增加 OS 磁盘的分区,这太小了。
#!/bin/sh
fdisk /dev/sda <<EOF
u
p
d
2
n
p
2
w
EOF
touch fdisk.log
reboot
xfs_growfs -d /dev/sda2
touch xfs.log
解决方案
首先,自定义数据是可以在配置时注入到 Microsoft Azure 虚拟机中的脚本或其他元数据。目前,Azure 中有预安装和配置的 cloud-init 映像。它可以使用 cloud-init 配置文件或简单的 shell 脚本对配置期间发送的自定义数据进行操作(只要它以 开头#!
,cloud-init 就会执行它)。
在 Linux 上,此数据通过
ovf-env.xml
文件传递到 VM,该文件在配置期间复制到/var/lib/waagent
目录中。/var/lib/waagent/CustomData
为方便起见,较新版本的 Microsoft Azure Linux 代理也将复制 base64 编码的数据。
阅读Microsoft Azure 上的自定义数据和 Cloud-Init了解更多详细信息。
通常,自定义数据与其他配置配置信息(例如新主机名、用户名、密码、证书和密钥等)一起发送到 VM。在这种情况下,我认为您无法调整 OS 磁盘的分区大小在提供时使用自定义数据。似乎不可能在自定义数据中进行重启和交互式处理脚本。
有关更多参考,您可以阅读
推荐阅读
- javascript - 为什么不使用 get/set 修改对象?
- javascript - 从 index.html 访问 javascript 模块类/对象
- twitter-bootstrap - 如何避免列之间的双重间隙
- javascript - 香草 JS 不是(这个)
- iis - 为什么在构建后事件中发布时出现“文件正在使用”错误?
- powershell - 如何将空参数传递给 msdeploy powershell deploy 命令
- vim - 无法自动复制鼠标选择
- javascript - 使用 Moment.js 和 Datatables 将日期格式化为 dd.mm.yyyy
- node.js - 使用 Windows 映像在 Azure DevOps 上构建损坏的 Node.JS
- c# - 如何在添加之前验证 Gridview 中是否存在选定的下拉列表值?