使用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

广告
将在 10 秒后关闭
bannerAds