Ansible2.7批量管理Windows

簡述

背景

Ansible是一款輕量級的開源的自動化運維工具,支持linux和windows(只支持client,而且部分模塊),利用Ansible能夠簡單批量的配置系統,安裝軟件,或者更高級的運維任務(好比滾動升級)。php

Ansible之類的運維工具對運維工做進行抽象及規範,可以極大的下降運維難度。本文只是爲了演示如何經過ansible 的各模塊對windows進行傳輸文件,管理帳號,執行腳本等批量自動化管理工做html

實驗環境

類型 系統 ip
Server Ubuntu Server 16.04.5 LTS X64 192.168.0.22
Client Windows Server 2008 R2 SP1 192.168.0.23

注意:python

若是是實驗目的,建議用Vmware,而且在關鍵操做時備份快照(好比,剛裝完環境,升級完PS和.Net後),這樣可以及時,乾淨的還原現場,節省每次重裝系統致使的時間浪費linux

Windows 被控端(Ansible Client)

Ansible 只支持Powershell 4.0及以上(用3.0會報 Process is terminated due to StackOverflowException.),因此要求最低要求Win7,或者Win server 2008,詳見 Ansible Doc host requirementsgit

升級PowerShell 和.Net Framework

官方文檔要求升級至ps3.0便可,可是實驗發現,3.0會報錯程序員

Win+R  -> PowerShell  打開PowerShellgithub

輸入 $PSVersionTable 查看 PSVersion 確保大於等於4.0(PowerShell 4.0),以及 CLRVersion 大於等於4.0(.NET Framework 4.0) ,若是版本太低,則執行下面代碼,直接複製到PowerShell 執行便可,建議使用5.1(參考 hotfixv4.trafficmanager.net dont work安裝和配置 WMF 5.1)shell

注意:windows

  • 注意用戶名密碼改爲管理員的用戶名密碼bash

  • 確保可以訪問外網

  • PowerShell以管理員模式打開

  • PS3不能直升PS5,須要卸載PS3或者保存 PSModulePath

  • 安裝PS5須要先打最新SP補丁

  • PS5要求 .NET Framework 不低於 4.5.2

  • 安裝成功後會自動重啓服務器,注意別影響其餘服務

$url = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Upgrade-PowerShell.ps1"
$file = "$env:temp\Upgrade-PowerShell.ps1"
$username = "管理員用戶名"
$password = "管理員密碼"

(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force

# PowerShell 版本,只能用 3.0, 4.0 和 5.1 
&$file -Version 5.1 -Username $username -Password $password -Verbose
複製代碼

重啓後,再次打開PS ,輸入 $PSVersionTable 查看版本

安裝WinRM,而且配置監聽

## 配置WinRM

$url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
$file = "$env:temp\ConfigureRemotingForAnsible.ps1"
(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
powershell.exe -ExecutionPolicy ByPass -File $file
複製代碼

Linux主控端(Ansible Server)

安裝Ansible和pywinrm

參考 Installing the Control Machine

$ sudo apt-get update
$ sudo apt-get install -y software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt-get install -y ansible
$ ansible --version
ansible 2.7.7
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.12 (default, Nov 12 2018, 14:36:49) [GCC 5.4.0 20160609]

$ pip install "pywinrm>=0.3.0"
複製代碼

配置Inventory

參考 Working with Inventory

默認是 Inventory /etc/ansible/hosts ,此處改成手動指定,Ansible的Inventory支持ini格式和yaml格式,本文采用yaml格式

$ mkdir ansible
$ tee ansible/test_hosts.yaml <<-'EOF'
winserver:
  hosts: 
    192.168.0.23:
  vars:
    ansible_user: Administrator
    ansible_password: 密碼
    ansible_connection: winrm
    ansible_port: 5986
    ansible_winrm_server_cert_validation: ignore

EOF
複製代碼

探測主機是否存活

$ ansible -i ansible/test_hosts.yaml winserver -m win_ping
 192.168.0.23 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
複製代碼

若是報錯

TASK [Gathering Facts] *******************************************************************************************************************************************************************************************************************************************************
fatal: [192.168.0.23]: UNREACHABLE! => {"changed": false, "msg": "ssl: HTTPSConnectionPool(host='192.168.0.23', port=5986): Max retries exceeded with url: /wsman (Caused by SSLError(SSLError(\"bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)\",),))", "unreachable": true}
複製代碼

降級一下 pip install "pywinrm==0.2.2"

更多實驗,參見參考資料中的兩篇51cto中的博文

可用的Windows模塊

根據 What modules are available? 絕大部分Module都是針對Linux編寫的,大部分在windows下不能正常使用,有一些專用的windows module 使用ps編寫的,可用在windows下使用,詳細列表參見 Windows modules

Windows常見問題

官方文檔中列舉了Ansible windows常見問題,建議仔細閱讀

Ansible Playbook

Ansible配合playbook食用更佳,上述中的 ansible 命令是adhoc命令模式,相似在bash中手動執行命令,多用於簡單,而且不須要複用場景,而 ansible-playbook 相似 bash腳本,可是更強大,適合複雜任務編排場景。

考慮後期出一個playbook的文章

推薦配合vscodeansible 插件(github repo 地址 github.com/VSChina/vsc…)

效果以下所示,比idea的ansible強大不少。

參考資料

招聘小廣告

山東濟南的小夥伴歡迎投簡歷啊 加入咱們 , 一塊兒搞事情。

長期招聘,Java程序員,大數據工程師,運維工程師。

相關文章
相關標籤/搜索