Packer Ansible provisioner执行Ansible playbook时win_unzip等任务未生效
win_unzip 压缩包未删除原因及解决方案
- 版本兼容问题:
delete_archive参数是Ansible 2.7版本才正式加入win_unzip模块的,低于该版本的Ansible会直接忽略该参数,不会执行删除逻辑。版本过低时可升级Ansible,或额外添加任务手动删除压缩包:
- name: Delete BgInfo zip archive win_file: path: C:\Bginfo\BgInfo64.zip state: absent
- 权限或文件占用问题:确认执行任务的Windows账户拥有C:\Bginfo目录的删除权限,同时检查压缩包是否被其他进程锁定导致无法删除。
win_regedit 注册表写入失败原因及解决方案
- 权限不足:修改HKLM节点下的注册表需要本地管理员权限,需确认Ansible连接Windows的账户属于本地管理员组,且已配置UAC绕过,避免写入操作被系统拦截。
- 参数缺失:旧版本win_regedit模块未显式指定
state: present时不会执行写入操作,建议补充该参数。 - 64位系统重定向:如果运行任务的PowerShell为32位版本,写入HKLM:\SOFTWARE会被自动重定向到HKLM:\SOFTWARE\Wow6432Node节点下,不会在64位注册表的Run节点生效,可添加
view: 64bit参数强制访问64位注册表视图,修改后的配置如下:
- name: Run Bginfo at startup win_regedit: key: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run name: Bginfo data: C:\Bginfo\Bginfo64.exe C:\Bginfo\default.bgi /timer:0 /nolicprompt type: string state: present view: 64bit
- 配置文件缺失:当前playbook未将
default.bgi配置文件上传到目标机器,即使注册表写入成功,开机启动时也会因为找不到配置文件报错,需额外添加win_copy或win_get_url任务上传对应配置文件。
额外注意事项
当前playbook存在YAML缩进不规范问题,win_get_url下的url和dest参数缩进和上层模块参数层级不一致,YAML对缩进要求严格,缩进错误会导致参数解析异常,任务无法按预期执行,建议统一使用2空格层级缩进规范。
内容的提问来源于stack exchange,提问作者Kelvin A. Vasquez
相关产品推荐
相关产品推荐

