讲真,Ansible 可以管理Windows?

Posted 大魏分享

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了讲真,Ansible 可以管理Windows?相关的知识,希望对你有一定的参考价值。

前言:

本文是我和李尧老师一起实验。李尧是红帽高级培训讲师,目前负责红帽中国区员工内部技术培训与认证。


一、Ansible能对windows做什么操作?

Ansible真能管Windows么?

真能!


参照http://docs.ansible.com/ansible/latest/modules/list_of_windows_modules.html,我们看一下ansible能够对windows做的操作,目前有81项。


  • win_acl - Set file/directory/registry permissions for a system user or group

  • win_acl_inheritance - Change ACL inheritance

  • win_audit_policy_system - Used to make changes to the system wide Audit Policy.

  • win_audit_rule - Adds an audit rule to files, folders, or registry keys

  • win_certificate_store - Manages the certificate store

  • win_chocolatey - Manage packages using chocolatey

  • win_command - Executes a command on a remote Windows node

  • win_copy - Copies files to remote locations on windows hosts

  • win_defrag - Consolidate fragmented files on local volumes

  • win_disk_facts - Show the attached disks and disk information of the target host

  • win_disk_image - Manage ISO/VHD/VHDX mounts on Windows hosts

  • win_dns_client - Configures DNS lookup on Windows hosts

  • win_domain - Ensures the existence of a Windows domain.

  • win_domain_controller - Manage domain controller/member server state for a Windows host

  • win_domain_group - creates, modifies or removes domain groups

  • win_domain_membership - Manage domain/workgroup membership for a Windows host

  • win_domain_user - Manages Windows Active Directory user accounts

  • win_dotnet_ngen - Runs ngen to recompile DLLs after .NET updates

  • win_dsc - Invokes a PowerShell DSC configuration

  • win_environment - Modify environment variables on windows hosts

  • win_eventlog - Manage Windows event logs

  • win_eventlog_entry - Write entries to Windows event logs

  • win_feature - Installs and uninstalls Windows Features on Windows Server

  • win_file - Creates, touches or removes files or directories.

  • win_file_version - Get DLL or EXE file build version

  • win_find - Return a list of files based on specific criteria

  • win_firewall - Enable or disable the Windows Firewall

  • win_firewall_rule - Windows firewall automation

  • win_get_url - Fetches a file from a given URL

  • win_group - Add and remove local groups

  • win_group_membership - Manage Windows local group membership

  • win_hotfix - install and uninstalls Windows hotfixes

  • win_iis_virtualdirectory - Configures a virtual directory in IIS.

  • win_iis_webapplication - Configures IIS web applications

  • win_iis_webapppool - configures an IIS Web Application Pool

  • win_iis_webbinding - Configures a IIS Web site binding.

  • win_iis_website - Configures a IIS Web site.

  • win_lineinfile - Ensure a particular line is in a file, or replace an existing line using a back-referenced regular expression.

  • win_mapped_drive - maps a network drive for a user

  • win_msg - Sends a message to logged in users on Windows hosts.

  • win_msi - Installs and uninstalls Windows MSI files 

  • win_nssm - NSSM - the Non-Sucking Service Manager

  • win_owner - Set owner

  • win_package - Installs/uninstalls an installable package

  • win_pagefile - Query or change pagefile configuration

  • win_path - Manage Windows path environment variables

  • win_ping - A windows version of the classic ping module

  • win_power_plan - Changes the power plan of a Windows system

  • win_product_facts - Provides Windows product information (product id, product key)

  • win_psexec - Runs commands (remotely) as another (privileged) user

  • win_psmodule - Adds or removes a Powershell Module.

  • win_rabbitmq_plugin - Manage RabbitMQ plugins

  • win_reboot - Reboot a windows machine

  • win_reg_stat - returns information about a Windows registry key or property of a key

  • win_regedit - Add, change, or remove registry keys and values

  • win_region - Set the region and format settings

  • win_regmerge - Merges the contents of a registry file into the windows registry

  • win_robocopy - Synchronizes the contents of two directories using Robocopy

  • win_route - Add or remove a static route.

  • win_say - Text to speech module for Windows to speak messages and optionally play sounds

  • win_scheduled_task - Manage scheduled tasks

  • win_scheduled_task_stat - Returns information about a Windows Scheduled Task

  • win_security_policy - changes local security policy settings

  • win_service - Manage and query Windows services

  • win_share - Manage Windows shares

  • win_shell - Execute shell commands on target hosts.

  • win_shortcut - Manage shortcuts on Windows

  • win_stat - returns information about a Windows file

  • win_tempfile - Creates temporary files and directories.

  • win_template - Templates a file out to a remote server.

  • win_timezone - Sets Windows machine timezone

  • win_toast - Sends Toast windows notification to logged in users on Windows 10 or later hosts

  • win_unzip - Unzips compressed files and archives on the Windows node

  • win_updates - Download and install Windows updates

  • win_uri - Interacts with webservices

  • win_user - Manages local Windows user accounts

  • win_user_right - Manage Windows User Rights

  • win_wait_for - Waits for a condition before continuing

  • win_wakeonlan - Send a magic Wake-on-LAN (WoL) broadcast packet

  • win_webpicmd - Installs packages using Web Platform Installer command-line

  • win_whoami - Returns information about the current user and process


由于篇幅有限,本文将调用一下四个module验证ansible对windows的配置和管理。




二、Ansible与Windows如何连接?


Ansible管理Linux,使用openssh,那么如何连接和管理Windows?


通过WinRM。

Windows 远程管理 (WinRM) 是 WS-Management 协议的 Microsoft 实现。该协议是基于简单对象访问协议 (SOAP) 的、防火墙友好的标准协议,使来自不同供应商的硬件和操作系统能够互操作。WS-Management 协议由硬件和软件制造商群体开发,作为一种公共标准,可用于与实现该协议的任何计算机设备远程交换管理数据。使用PowerShell对服务器远程管理,要在远程服务器上启用WinRM。


那么,ansible连接windows的认证方式都有哪些?


一共有四种方式(本文后续实验都是基于AD的操作,因此调用的是Kerberos的认证方式):

讲真,Ansible 可以管理Windows?

Basic认证方式是最基本的密码方式认证;Certificate认证的方式类似于ssh的认证方式。


接下来,我们通过实验方式,展示Ansible对windows的几个操作。


三、准备工作

首先,我们需要在windows的机器上配置winrm

讲真,Ansible 可以管理Windows?

然后,在ansible管理端安装所需的软件:

讲真,Ansible 可以管理Windows?

安装pywinrm,用于和windows机器通讯:

讲真,Ansible 可以管理Windows?

安装完毕后,确认可以ping通windows,证明ansible可以给windows发送ping module:

讲真,Ansible 可以管理Windows?


四、通过Ansible为windows安装AD


我们创建一个安装windows AD的role:

主任务如下:

讲真,Ansible 可以管理Windows?

这个playbook调用参数my_ad_vars.yml后,执行 win_ad_install这个role。


我们看一下参数文件的内容,Domain Name和AD Admin User变量从下面文件中获取:

讲真,Ansible 可以管理Windows?

AD Safe Password和AD Admin Password从inventory中获取:/etc/ansible/hosts


查看win_ad_install task的yaml:

讲真,Ansible 可以管理Windows?

我们分析一下这个task,以上图红框内容为例。


win_feature代表的是anisble的module,这在ansible官网有对应的用法和描述,它的作用是:Installs and uninstalls Windows Features on Windows Server

(http://docs.ansible.com/ansible/latest/modules/win_feature_module.html?highlight=win_feature)


我们看一下社区上的例子:


讲真,Ansible 可以管理Windows?

而在实验中,我们是要通过win_feature这个module,做AD-Domain-Services的安装。安装的时候,需要将AD管理工具装上( include_management_tools: yes),并且把AD的子功能模块也装上( include_sub_features: yes),而AD的子安装模块,对应类似内容如下:


讲真,Ansible 可以管理Windows?


都配置完成以后,执行ad.yml:

讲真,Ansible 可以管理Windows?安装成功:

讲真,Ansible 可以管理Windows?


五、为Ansible节点配置kerberos认证


首先在ansible节点上安装kerberos模块,以便ansible可以通过kerberos和windows AD进行认证:

讲真,Ansible 可以管理Windows?

然后配置配置kerberos的配置文件,里面是要连接的AD信息:

讲真,Ansible 可以管理Windows?

首先确认可以通过/etc/ansible/host中的密码,可以对windows的administrator进行认证:

讲真,Ansible 可以管理Windows?

kinit是初始化kerberos票据:

讲真,Ansible 可以管理Windows?

查看票据是否获取成功以及票据的有效期等信息:

讲真,Ansible 可以管理Windows?

登录成功,说明ansible能通通过kerberos方式登录AD:

讲真,Ansible 可以管理Windows?


六、通过Ansible为windows配置OpenSSH


创建playbook的执行文件:

讲真,Ansible 可以管理Windows?

我们可以看到,做配置的主机是windows( hosts: windows),进行操作的时候,传参的文件是./ssh_var.yml,执行的role是:win_service_config


win_service_config这个role的task yaml文件如下:

讲真,Ansible 可以管理Windows?

我们把这个yaml中的红框部分内容拿出来分析一下:

win_chocolatey指的是ansible module,它的功能是: Manage packages using chocolatey

(http://docs.ansible.com/ansible/latest/modules/win_chocolatey_module.html?highlight=win_chocolatey)


在社区上可以看到它的用例:


讲真,Ansible 可以管理Windows?

而在这个红框中,我们需要的做的事情是:用win_chocolatey这个模块安装package,而package的名字是个变量( package_name ),在变量文件中。安装 package的时候,需要指定的参数也是变量: parameters;安装最新版本。


接下来,我们再看一下变量文件的内容:

讲真,Ansible 可以管理Windows?

执行playbook:

讲真,Ansible 可以管理Windows?


七、通过Ansible为windows创建AD组和用户

需要创建的AD用户和组列表如下:

讲真,Ansible 可以管理Windows?

首先创建一个playbook:

讲真,Ansible 可以管理Windows?

这个playbook是调用./ad_user_vars.yml文件的参数,执行win_ad_user这个role。


我们看一下win_ad_user这个role的内容:

讲真,Ansible 可以管理Windows?

我们分析下红框的内容。

win_domain_group是ansible的module,它的作用是:creates, modifies or removes domain groups。


我们在社区中可以看到它的用法:

讲真,Ansible 可以管理Windows?

在实验中,我们通过win_domain_group这个模块,创建一个AD组,名称为变量:item.group_name,范围是变量:item.group_scope,状态则需要这个组为present。


接下来,我们看一下变量文件:

讲真,Ansible 可以管理Windows?

我们帖一行出来:

 user_info:- { name: 'james', firstname: 'James', surname: 'Jockey', password: 'redhat@123', group_name: 'dev', group_scope: 'domainlocal'}

可以看到,参数文件中包含多个变量的复制,group_name、group_scope都是有的,和main.yml中的内容可以对应起来。


执行playbook:


讲真,Ansible 可以管理Windows?

成功以后,通过ssh进行验证,可以通过新创建的AD用户,远程ssh登录windows。

讲真,Ansible 可以管理Windows?



魏新宇

"大魏分享"运营者、红帽资深解决方案架构师

专注开源云计算、容器及自动化运维在金融行业的推广

拥有红帽RHCE/RHCA、VMware VCP-DCV、VCP-DT、VCP-Network、VCP-Cloud、ITIL V3、Cobit5、C-STAR、AIX、HPUX等相关认证。


文章打赏随意(转发和赞赏都是对作者原创的鼓励):


更多精彩内容,欢迎继续关注大魏分享:


以上是关于讲真,Ansible 可以管理Windows?的主要内容,如果未能解决你的问题,请参考以下文章

ansible管理windows server怎么部署

Ansible基础知识

ansible自动运维入门

ansible管理windows server怎么部署

ansible自动化运维实战一

自动化运维神器Ansible,你会用它批量管理Windows服务器吗?