$urlVMinit = "http://example.com/vminit.zip" Invoke-WebRequest -Uri $urlVMinit -OutFile "vminit.zip" 如何将上述命令写入pakcer中
时间: 2024-11-25 07:19:24 浏览: 24
在Packer脚本中,如果你想通过`powershell_script` provisioner下载远程资源并保存到本地,可以像下面这样编写:
```powershell
{
"type": "powershell_script",
"scripts": {
"download_and_extract_vminit": {
"content": <<-EOT
#!/bin/bash
$urlVMinit = "http://example.com/vminit.zip"
Invoke-WebRequest -Uri $urlVMinit -OutFile "vminit.zip"
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::ExtractToDirectory("vminit.zip", ".")
EOT
}
},
"interpreter": ["powershell"],
"only-if": "Test-Path $env:PACKER_LOCAL_DIR -and ! (Get-ChildItem $env:PACKER_LOCAL_DIR | ? {$_.Name -eq 'vminit.zip'}).Exists", # 只下载如果尚未存在
}
```
这里,我们设置了两个关键点:
- `scripts`字段包含了PowerShell脚本内容,其中包含了一个名为`download_and_extract_vminit`的任务,用于下载(`Invoke-WebRequest`)和解压(`Add-Type`和`[System.IO.Compression.ZipFile]::ExtractToDirectory`)。
- `only-if`条件检查目标文件是否存在,避免重复下载。
注意:
- Packer脚本默认使用的shell是Bash,所以这里的`#!/bin/bash`是不必要的,实际使用中可以省略。
- `$env:PACKER_LOCAL_DIR`是Packer提供的环境变量,代表当前构建过程的工作目录。
阅读全文