Packer shell provisioner 报告 运行 成功,但没有做任何事情
Packer shell provisioner reports running successfully, but didn't do anything
我正在尝试使用 packer 来简单地启动一个 VM,运行 一个单一的 shell 脚本,然后存储一个新的图像。我正在使用 Azure,当我 运行 打包器时,它似乎成功完成,但是当我从新映像创建 VM 时,脚本似乎没有效果。脚本只是为了测试,应该在主目录下创建一个文件,但是我登录的时候什么都没有。
这是我的加壳配置文件:
{
"builders": [
{
"type": "azure-arm",
"client_id": "...",
"client_secret": "...",
"subscription_id": "...",
"tenant_id": "...",
"os_type": "Linux",
"image_publisher": "Canonical",
"image_offer": "UbuntuServer",
"image_sku": "16.04-LTS",
"ssh_pty" : "true",
"capture_container_name": "container",
"capture_name_prefix": "prefix",
"resource_group_name": "rg",
"storage_account": "sa",
"location": "West US"
}
],
"provisioners": [
{
"type": "shell",
"script": "test.sh"
}
]
}
这是我的脚本 (test.sh):
#!/bin/bash -e
echo "This is only a test!" >> ~/test_script_output.txt
这是构建的输出:
azure-arm output will be in this color.
==> azure-arm: Running builder ...
azure-arm: Creating Azure Resource Manager (ARM) client ...
==> azure-arm: Creating resource group ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
==> azure-arm: -> Location : 'West US'
==> azure-arm: -> Tags :
==> azure-arm: Validating deployment template ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
==> azure-arm: -> DeploymentName : 'pkrdp4zt0csjrzl'
==> azure-arm: Deploying deployment template ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
==> azure-arm: -> DeploymentName : 'pkrdp4zt0csjrzl'
==> azure-arm: Getting the VM's IP address ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
==> azure-arm: -> PublicIPAddressName : 'packerPublicIP'
==> azure-arm: -> NicName : 'packerNic'
==> azure-arm: -> Network Connection : 'PublicEndpoint'
==> azure-arm: -> IP Address : '000.000.000.000' <redacted>
==> azure-arm: Waiting for SSH to become available...
==> azure-arm: Connected to SSH!
==> azure-arm: Provisioning with shell script: test.sh
==> azure-arm: Querying the machine's properties ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
==> azure-arm: -> ComputeName : 'pkrvm4zt0csjrzl'
==> azure-arm: -> OS Disk : 'https://sa.blob.core.windows.net/images/pkros4zt0csjrzl.vhd'
==> azure-arm: Powering off machine ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
==> azure-arm: -> ComputeName : 'pkrvm4zt0csjrzl'
==> azure-arm: Capturing image ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
==> azure-arm: -> ComputeName : 'pkrvm4zt0csjrzl'
==> azure-arm: Deleting resource group ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
好的,所以我的任务有两件事。
第一,我必须使用 waagent 取消配置,这样 VM 才能正常启动。显然,this is required by the azure-arm type。第二:既然要删除用户帐户,我必须更改脚本以影响主目录之外的内容。所以我只是让它在驱动器的根目录上创建了一个新文件。
这是我的新供应商部分:
"provisioners": [
{
"type": "shell",
"execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo '{{ .Path }}'",
"script": "test.sh",
"skip_clean": "true"
},
{
"type": "shell",
"execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'",
"inline_shebang": "/bin/sh -x",
"inline": [
"/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync"
],
"skip_clean": "true"
}
]
这是我的新脚本:
#!/bin/bash -e
echo "This is only a test!" >> /test_script_output.txt
旁注:我必须向每个供应商添加 "skip_clean",因为它每次都无法删除脚本。我还不知道为什么。
我正在尝试使用 packer 来简单地启动一个 VM,运行 一个单一的 shell 脚本,然后存储一个新的图像。我正在使用 Azure,当我 运行 打包器时,它似乎成功完成,但是当我从新映像创建 VM 时,脚本似乎没有效果。脚本只是为了测试,应该在主目录下创建一个文件,但是我登录的时候什么都没有。
这是我的加壳配置文件:
{
"builders": [
{
"type": "azure-arm",
"client_id": "...",
"client_secret": "...",
"subscription_id": "...",
"tenant_id": "...",
"os_type": "Linux",
"image_publisher": "Canonical",
"image_offer": "UbuntuServer",
"image_sku": "16.04-LTS",
"ssh_pty" : "true",
"capture_container_name": "container",
"capture_name_prefix": "prefix",
"resource_group_name": "rg",
"storage_account": "sa",
"location": "West US"
}
],
"provisioners": [
{
"type": "shell",
"script": "test.sh"
}
]
}
这是我的脚本 (test.sh):
#!/bin/bash -e
echo "This is only a test!" >> ~/test_script_output.txt
这是构建的输出:
azure-arm output will be in this color.
==> azure-arm: Running builder ...
azure-arm: Creating Azure Resource Manager (ARM) client ...
==> azure-arm: Creating resource group ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
==> azure-arm: -> Location : 'West US'
==> azure-arm: -> Tags :
==> azure-arm: Validating deployment template ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
==> azure-arm: -> DeploymentName : 'pkrdp4zt0csjrzl'
==> azure-arm: Deploying deployment template ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
==> azure-arm: -> DeploymentName : 'pkrdp4zt0csjrzl'
==> azure-arm: Getting the VM's IP address ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
==> azure-arm: -> PublicIPAddressName : 'packerPublicIP'
==> azure-arm: -> NicName : 'packerNic'
==> azure-arm: -> Network Connection : 'PublicEndpoint'
==> azure-arm: -> IP Address : '000.000.000.000' <redacted>
==> azure-arm: Waiting for SSH to become available...
==> azure-arm: Connected to SSH!
==> azure-arm: Provisioning with shell script: test.sh
==> azure-arm: Querying the machine's properties ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
==> azure-arm: -> ComputeName : 'pkrvm4zt0csjrzl'
==> azure-arm: -> OS Disk : 'https://sa.blob.core.windows.net/images/pkros4zt0csjrzl.vhd'
==> azure-arm: Powering off machine ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
==> azure-arm: -> ComputeName : 'pkrvm4zt0csjrzl'
==> azure-arm: Capturing image ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
==> azure-arm: -> ComputeName : 'pkrvm4zt0csjrzl'
==> azure-arm: Deleting resource group ...
==> azure-arm: -> ResourceGroupName : 'packer-Resource-Group-4zt0csjrzl'
好的,所以我的任务有两件事。
第一,我必须使用 waagent 取消配置,这样 VM 才能正常启动。显然,this is required by the azure-arm type。第二:既然要删除用户帐户,我必须更改脚本以影响主目录之外的内容。所以我只是让它在驱动器的根目录上创建了一个新文件。
这是我的新供应商部分:
"provisioners": [
{
"type": "shell",
"execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo '{{ .Path }}'",
"script": "test.sh",
"skip_clean": "true"
},
{
"type": "shell",
"execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh '{{ .Path }}'",
"inline_shebang": "/bin/sh -x",
"inline": [
"/usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync"
],
"skip_clean": "true"
}
]
这是我的新脚本:
#!/bin/bash -e
echo "This is only a test!" >> /test_script_output.txt
旁注:我必须向每个供应商添加 "skip_clean",因为它每次都无法删除脚本。我还不知道为什么。