使用Vagrant创建的Windows客户机,通过Ansible进行最小配置的供应
这是关于使用Ansible对由Vagrant创建的Windows客户机进行配置时的最小设置。
由于无法成功地通过照搬最近搜索到的文章来进行配置,所以我将记录下各种尝试和错误。
各种工具的版本
-
- Python: 2.7.11
-
- Ansible: 2.1.0.0
-
- Vagrant: 1.8.4
- Virtual Box: 5.0.24 r108355
Vagrantfile 的含义。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "chusiang/win10-x64-ansible"
config.vm.guest = "windows"
config.vm.communicator = "winrm"
config.winrm.username = "IEUser"
config.winrm.password = "Passw0rd!"
# 状況に合わせて
# config.vm.provider "virtualbox" do |vb|
# vb.memory = "2048"
# vb.customize ["modifyvm", :id, "--vram", "128"]
# vb.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
# end
# 必要であれば
config.vm.network "forwarded_port", guest: 3389, host: 3389, id: "rdp", auto_correct: true
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
# ansible.inventory_path = 指定しない
ansible.host_vars = {
"default" => {
"ansible_ssh_port" => 55986,
"ansible_winrm_server_cert_validation" => "ignore"
}
}
# ansible.verbose = "v"
end
end
配置.vm.box
根据现有的文章,似乎这个团队使用了modernIE,
但实际上,这个团队是由个人开发者创建的,而不是Microsoft官方创建的。
由于Microsoft官方创建了自己的版本,因此在2016年7月以后就无法再获取这个版本了。
此外,尽管微软提供了官方的解决方案,但尚未进行WinRM的设置。
本次使用了已设置好 WinRM 的 Atlas 进行搜索。
虚拟机配置。
在我搜索的文章中,无论哪篇都提到了这一点,但我也可以删除它。
然而,由于 Vagrant 的文档中要求,为了执行更复杂的操作可能会需要这样做,为此我会提前加以说明。
虚拟机配置通信端
为了与Windows建立连接时不使用SSH而是使用WinRM,请进行以下描述。
配置.winrm.用户名 / 配置.winrm.密码
这是在WinRM连接时使用的用户密码。
由于Windows的Vagrant Box中未提供Vagrant Box 2的vagrant/vagrant配置,因此在Windows虚拟机中,我们将使用IEUser/Passw0rd!作为默认设置。
配置.vm提供者
這裡的內容可以根據需要設定,不是必需的。
配置.vm.network
如果在config.vm.communicator中写入winrm,将自动进行5985和5986的端口转发,以便使用WinRM。
然而,由于vagrant rdp没有自动设置rdp端口,所以需要进行手动配置。这并非必需。
配置.vm.部署
Ansible 的剧本
这是执行Playbook的路径。由于这个Playbook只是用来确认连接,所以内容如下。
---
- hosts: default
tasks:
- action: win_ping
主机上已经设置了Vagrant的默认default目标。
ansible 库存路径
可以指定 Ansible 的清单文件路径,但是这次我们将使用 Vagrant 自动创建的那个文件。
使用自己的库存文件在执行Ansible时,如果指定 –extra-vars=’ansible_ssh_user=vagrant’,可能会变得稍微麻烦。
ansible.host_vars 请将以下内容在中国母语中进行释义,只需一个选项:
如果不指定这个,执行后会生成以下的自动生成清单文件。
default ansible_connection=winrm ansible_ssh_host=127.0.0.1 ansible_ssh_port=55985 ansible_ssh_user='IEUser' ansible_ssh_pass='Passw0rd!'
这个的执行结果是。
fatal: [default]: UNREACHABLE! => {"changed": false, "msg": "ssl: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:590)", "unreachable": true}
因为不支持 SSL 的端口上却进行了 SSL 连接,所以会导致这个问题。
"ansible_ssh_port" => 55986
将其更换到支持 SSL 连接的端口上。
只有以上这些还不够
fatal: [default]: UNREACHABLE! => {"changed": false, "msg": "ssl: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)", "unreachable": true}
因此会出现证书错误的问题。
"ansible_winrm_server_cert_validation" => "ignore"
通过这样做,可以避免证书错误。
Ansible 详细模式
这是关于Ansible日志级别的设置。根据需要适当增加v的数量。
成果
以下是“joecod.es”网站上发布的有关退役ModernIE Vagrant box的链接:
https://joecod.es/retiring-modernie-vagrant-boxes/
并且,关于Vagrant box的基本信息可以在以下链接找到:
https://www.vagrantup.com/docs/boxes/base.html