Azure Windows虚拟机配置开机自动运行Ansible playbook方案问询
实现方案
要同时满足Azure Windows虚拟机供应阶段执行Ansible playbook、重启后自动重跑的需求,组合使用Azure原生功能加Windows系统配置即可实现,无需额外第三方服务:
1. 供应阶段触发playbook执行
使用Azure自带的*自定义脚本扩展(Custom Script Extension for Windows)*实现部署阶段的自动触发,该功能是Azure虚拟机服务的原生扩展,不需要独立开通:
- 提前准备好Windows环境的Ansible运行依赖:如果是playbook在VM本地执行,提前在VM镜像中预装ansible、把playbook文件预置到指定路径;如果是用中心Ansible节点推送执行,提前在镜像中配置好WinRM服务、放行对应防火墙端口、配置Ansible管控所需的管理员权限。
- 部署VM时在自定义脚本扩展中填入对应触发命令:
- 本地执行场景命令示例:
ansible-playbook C:\ansible\playbook\init.yml > C:\ansible\run_logs\first_run.log 2>&1 - 中心节点推送场景:脚本内调用回调接口通知你的Ansible管控节点,对当前新创建的VM执行playbook即可。
- 本地执行场景命令示例:
- 如果使用ARM模板、Bicep、Terraform等基础设施即代码工具部署,可以直接把自定义脚本扩展的配置写入部署代码,实现全自动化。
2. 配置重启后自动执行playbook
直接在Windows系统中配置开机计划任务即可,该配置可以直接放到供应阶段的自定义脚本中自动完成,无需手动登录VM操作:
- 在自定义脚本中追加创建计划任务的命令,示例如下:
schtasks /create /tn "Ansible Playbook Auto Run" /tr "ansible-playbook C:\ansible\playbook\init.yml >> C:\ansible\run_logs\reboot_run.log 2>&1" /sc onstart /ru SYSTEM /rl highest /f - 上述命令创建的计划任务会在系统每次启动时,以系统最高权限自动执行指定playbook,无需用户登录就能正常运行。
注意事项
- 中心Ansible节点推送的场景下,需要确保VM重启后网络可达Ansible节点,也可以配置VM启动后主动上报IP/主机信息到Ansible节点触发执行,避免IP变动导致推送失败。
- 建议所有执行操作都留存日志到本地指定路径,方便后续排查执行失败的问题。
内容的提问来源于stack exchange,提问作者mohan
相关产品推荐
相关产品推荐

