使用 Packer 构建基于 Windows Server 2019 的 AMI,并使用 Ansible 作为配置程序。
这是provisioners
我的部分packer-build.json
:
"provisioners": [
{
"type": "ansible",
"playbook_file": "./provisioners/ansible/ansible_playbook.yml",
"user": "Administrator",
"use_proxy": false,
"extra_arguments": ["-e", "ansible_winrm_server_cert_validation=ignore"]
}
]
这是我的ansible_playbook.yml
:
---
- name: Jenkins node playbook
hosts: all
tasks:
- include_tasks: update_system.yml
- include_tasks: install_dependencies.yml
- include_tasks: create_user.yml
我至少可以确认这一点update_system.yml
并install_dependencies.yml
成功运行。
这是我的create_user.yml
:
---
- name: Ensure user jenkins is present
ansible.windows.win_user:
name: jenkins
password: ***REDACTED***
state: present
groups:
- Users
.
.
.
这时我收到一个错误:
amazon-ebs:任务 [确保用户 jenkins 在场] *******************************************
amazon-ebs:致命:[默认]:无法到达!=> {“changed”:false,“msg”:“basic:尝试对已标记为删除的注册表项进行非法操作。(扩展故障数据:{'transport_message':'从服务器返回错误的 HTTP 响应。代码 500','http_status_code':500,'wsmanfault_code':'2147943418','fault_code':'s:Receiver','fault_subcode':'w:InternalError'})“,”unreachable“:true}
谷歌搜索“ansible 对已标记为删除的注册表项尝试进行非法操作”并没有找到任何有用的信息。
在写这个问题的时候,我试图重现这个问题,为了得到更快的结果,我改变ansible_playbook.yml
了
---
- name: Jenkins node playbook
hosts: all
tasks:
- include_tasks: update_system.yml
- include_tasks: install_dependencies.yml
- include_tasks: create_user.yml
到
---
- name: Jenkins node playbook
hosts: all
tasks:
- include_tasks: create_user.yml
- include_tasks: update_system.yml
- include_tasks: install_dependencies.yml
所以放在第一位create_user.yml
。
结果:错误不再重现。
然后我恢复到原始配置,并且不再出现错误。
这对我来说毫无意义,我不相信它。听起来像海森堡大部头书。
这是什么错误?我怎样才能确保它不再发生?
@分号update_system.yml
在评论中询问和的内容install_dependencies.yml
。
---
- name: Install all critical and security updates
win_updates:
category_names:
- CriticalUpdates
- SecurityUpdates
state: installed
register: update_result
- name: Reboot host if required
win_reboot:
when: update_result.reboot_required
---
- name: Install AWS CLI
win_shell: Import-Module AWSPowerShell
- name: install the Win32-OpenSSH service
win_chocolatey:
name: openssh
package_params: /SSHServerFeature
state: present
- name: Install required software
win_chocolatey:
name: '{{ item }}'
state: present
loop:
- openjdk11
- maven
- git
- ghostscript
- imagemagick
- nodejs
- nuget.commandline
- visualstudio2017buildtools