searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Ansible如何部署windows及部署前的配置

2023-11-13 08:03:00
66
0

一、ansible 简介

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

ansible主要由以下几个模块构成,具体如下图

 

其中几个关键模块的作用介绍如下:

    (1)、连接插件connection plugins:负责和被监控端实现通信;

    (2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

    (3)、各种模块核心模块、command模块、自定义模块;

    (4)、借助于插件完成记录日志邮件等功能;

    (5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

(2)、ansible的架构:连接其他主机默认使用ssh协议    

二、 特性

1. 模块化:调用特定的模块,完成特定任务

2. Paramiko (python对ssh的实现),PyYAML,Jinja2模板等3个模块

3. 支持自定义模块

4.基于Python语言实现

5. 部署简单,基于python和SSH,agent less

6. 安全,基于OpenSHH,可以保证安全

7.支持playbook编排任务

8.幂等性:一个任务执行一次和执行多次效果一样,不因重复执行带来意外情况

9.无需代理且不依赖PKI

10. 支持多种语言编写模块

11.通过YAML格式编排任务,支持丰富的数据结构

12.较强大的多层解决方案

三、常用相关文件介绍

1.配置文件

 /etc/ansible/ansible.cfg  主配置文件,配置ansible工作特性(一般无需修改),默认使用此配置文件:

1)配置文件详解:

[defaults]

#inventory     = /etc/ansible/hosts      # 主机列表配置文件

#library       = /usr/share/my_modules/  # 库文件存放目录

#remote_tmp    = $HOME/.ansible/tmp      # 临时py命令文件存放在远程主机目录

#local_tmp     = $HOME/.ansible/tmp      # 本机的临时命令执行目录  

#forks         = 5                       # 默认并发数,同时可以执行5次

#sudo_user     = root                    # 默认sudo 用户

#ask_sudo_pass = True                    # 每次执行ansible命令是否询问ssh密码

#ask_pass      = True                    # 每次执行ansible命令是否询问ssh口令

#remote_port   = **                     # 远程主机的端口号(默认**)

建议优化项: 

host_key_checking = False               # 检查对应服务器的host_key,建议取消注释

log_path=/var/log/ansible.log           # 日志文件,建议取消注释

module_name   = command                 # 默认模块

 /etc/ansible/hosts        主机清单(将被管理的主机放到此文件)

 /etc/ansible/roles/       存放角色的目录

2. 程序目录

/usr/bin/ansible          主程序,临时命令执行工具

/usr/bin/ansible-doc      查看配置文档,模块功能查看工具

/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具

/usr/bin/ansible-pull     远程执行命令的工具

/usr/bin/ansible-vault    文件加密工具

/usr/bin/ansible-console  基于Console界面与用户交互的执行工具

3. 主机清单详细介绍

Inventory 主机清单

1). ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名 

2). 默认的inventory file为/etc/ansible/hosts

3). inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成

4). 可以在每个主机后面指定用户名+密码:ansible_ssh_user='xxx' ansible_ssh_pass='password'

/etc/ansible/hosts文件格式

inventory文件遵循INI文件风格,中括号中的字符为组名。

可以将同一个主机同时归并到多个不同的组中;

此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明

四、ansible部署Windows的步骤

1、通过ansible部署Windows的前提条件

Ansible 从1.7+版本开始支持Windows,但前提是管理机必须为Linux系统,远程主机的通信方式也由SSH变更为PowerShell,同时管理机必须预安装Python的Winrm模块,方可和远程Windows主机正常通信,但PowerShell需3.0+版本且Management Framework 3.0+版本,实测Windows 7 SP1和Windows Server 2008 R2及以上版本系统经简单配置可正常与Ansible通信。简单总结如下:

1). 管理机必须为Linux系统且需预安装Python Winrm模块

2). 底层通信基于PowerShell,版本为3.0+,Management Framework版本为3.0+

3). 远程主机开启Winrm服务

2. ansible管理机部署安装

目前,只要机器上安装了 Python 2.6 或 Python 2.7 (windows系统不可以做控制主机),都可以运行Ansible.主机的系统可以是 Red Hat, Debian, CentOS, OS X, BSD的各种版本,等等。本文使用的管理机是centos7。

安装ansible有以下几种方式:

1). 通过源码部署

 从项目的checkout中可以很容易运行Ansible,Ansible的运行不要求root权限,也不依赖于其他软件,不要求运行后台进程,也不需要设置数据库。因此许多用户一直使用Ansible的开发版本,这样可以利用最新的功能特性,也方便对项目做贡献。因为不需要安装任何东西,跟进Ansible的开发版相对于其他开源项目要容易很多.

从源码安装的步骤如下:

  1. clone源码
git clone git://github.com/ansible/ansible.git --recursive$ cd ./ansible

    2. 安装pip

yum install pip3

    3.  安装python依赖包

使用pip命令安装python依赖包

4. 配置hosts文件

 vim /etc/ansible/hosts

[windows]
***.***.****.***
ansible_ssh_user="*****" 
ansible_ssh_pass="****" 
ansible_ssh_port=5985 
ansible_connection="winrm" 
ansible_winrm_server_cert_validation=ignore

   5.运行env-setup脚本

  一旦运行env-setup脚本,就意味着Ansible从源码中运行起来了.默认的inventory文件是 /etc/ansible/host,因此在运行env-setup脚本前必须配置host。

 source ./ansible/env-setup

至此,部署机配置完毕。

3. Windows系统配置

和Linux发版版稍有区别,远程主机系统如为Windows需预先如下配置:

  • 安装Framework 3.0+

  • 更改powershell策略为remotesigned

  • 升级PowerShell至3.0+

  • 设置Windows远端管理,英文全称WS-Management(WinRM)

 

1). 安装Framework 3.0+

       由于本次演示的Windows系统Framework已升级到4.5,所以只提供Framework的下载链接。去官网下载至本地后双击左键安装即可,期间可能会多次重启,电脑需正常连接Internet。

 2). 更改powershell策略为remotesigned

在管理员权限下打开PowerShell,执行:set-executionpolicy remotesigned,如下图:

 3). 升级PowerShell至3.0+

     Window 7和Windows Server 2008 R2默认安装的有PowerShell,但版本号一般为2.0版本,所以我们需升级至3.0+,如下图中数字1部分表示PowerShell版本过低需3.0+版本,数字2部分表示当前PowerShell版本为2.0。

下脚本保存至本地后,右键选择“使用PowerShell运行”,执行完毕重启系统后,在PowerShell执行Get-Host命令结果如下图所示PowerShell版本为3.0为正常。 具体过程如下图:

4). 设置Windows远端管理(WS-Management,WinRM)

winrm service 默认都是未启用的状态,先查看状态;如无返回信息,则是没有启动;

winrm enumerate winrm/config/listener

针对winrm service 进行基础配置:

winrm quickconfig

查看winrm service listener:

winrm e winrm/config/listener

为winrm service 配置auth:

winrm set winrm/config/service/auth @{Basic="true"}

为winrm service 配置加密方式为允许非加密:

winrm set winrm/config/service @{AllowUnencrypted="true"}

好了,ansible部署Windows的配置到此结束,接下来我们来测试配置是否成功。

4. 验证ansible管理机是否可以访问Windows

1) win_ping 是Windows系统下的ping模块,经常被用来测试主机是否存活

执行以下命令:

ansible windows -m win_ping

执行结果如下图:

2)  win_copy 用来拷贝文件到远程Windows主机

执行以下命令:

ansible windows -m win_copy -a 'src=/etc/passwd dest=F:\file\passwd'

执行结果如下:

***.***.*.**** | success >> {
    "changed": true,
    "checksum": "****",
    "operation": "file_copy",
    "original_basename": "passwd",
    "size": 2563
}

如果要将以上命令放到ansible常用的Playbook中,写法如下:

---
- name: windows module example
  hosts: windows
  tasks:
     - name: Move file on remote Windows Server from one location to another
       win_file: src=/etc/passwd dest=F:\file\test

3) win_file —创建,删除文件或目录

 

如果想删除 F:\file\test

执行以下命令:

ansible windows -m win_file -a "path=F:\file\test state=absent"

执行结果如下:

***.***.*.*** | success >> {
    "changed": true
}

好了,以上就是通过ansible部署Windows的全部介绍及演示,如果要完成复杂的部署功能,可以使用Playbook模块来执行定义的yaml文件,这样可以用简单明了的方式完成复杂的部署任务。

0条评论
0 / 1000
吕****伟
2文章数
0粉丝数
吕****伟
2 文章 | 0 粉丝
吕****伟
2文章数
0粉丝数
吕****伟
2 文章 | 0 粉丝
原创

Ansible如何部署windows及部署前的配置

2023-11-13 08:03:00
66
0

一、ansible 简介

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

ansible主要由以下几个模块构成,具体如下图

 

其中几个关键模块的作用介绍如下:

    (1)、连接插件connection plugins:负责和被监控端实现通信;

    (2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

    (3)、各种模块核心模块、command模块、自定义模块;

    (4)、借助于插件完成记录日志邮件等功能;

    (5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

(2)、ansible的架构:连接其他主机默认使用ssh协议    

二、 特性

1. 模块化:调用特定的模块,完成特定任务

2. Paramiko (python对ssh的实现),PyYAML,Jinja2模板等3个模块

3. 支持自定义模块

4.基于Python语言实现

5. 部署简单,基于python和SSH,agent less

6. 安全,基于OpenSHH,可以保证安全

7.支持playbook编排任务

8.幂等性:一个任务执行一次和执行多次效果一样,不因重复执行带来意外情况

9.无需代理且不依赖PKI

10. 支持多种语言编写模块

11.通过YAML格式编排任务,支持丰富的数据结构

12.较强大的多层解决方案

三、常用相关文件介绍

1.配置文件

 /etc/ansible/ansible.cfg  主配置文件,配置ansible工作特性(一般无需修改),默认使用此配置文件:

1)配置文件详解:

[defaults]

#inventory     = /etc/ansible/hosts      # 主机列表配置文件

#library       = /usr/share/my_modules/  # 库文件存放目录

#remote_tmp    = $HOME/.ansible/tmp      # 临时py命令文件存放在远程主机目录

#local_tmp     = $HOME/.ansible/tmp      # 本机的临时命令执行目录  

#forks         = 5                       # 默认并发数,同时可以执行5次

#sudo_user     = root                    # 默认sudo 用户

#ask_sudo_pass = True                    # 每次执行ansible命令是否询问ssh密码

#ask_pass      = True                    # 每次执行ansible命令是否询问ssh口令

#remote_port   = **                     # 远程主机的端口号(默认**)

建议优化项: 

host_key_checking = False               # 检查对应服务器的host_key,建议取消注释

log_path=/var/log/ansible.log           # 日志文件,建议取消注释

module_name   = command                 # 默认模块

 /etc/ansible/hosts        主机清单(将被管理的主机放到此文件)

 /etc/ansible/roles/       存放角色的目录

2. 程序目录

/usr/bin/ansible          主程序,临时命令执行工具

/usr/bin/ansible-doc      查看配置文档,模块功能查看工具

/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具

/usr/bin/ansible-pull     远程执行命令的工具

/usr/bin/ansible-vault    文件加密工具

/usr/bin/ansible-console  基于Console界面与用户交互的执行工具

3. 主机清单详细介绍

Inventory 主机清单

1). ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名 

2). 默认的inventory file为/etc/ansible/hosts

3). inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成

4). 可以在每个主机后面指定用户名+密码:ansible_ssh_user='xxx' ansible_ssh_pass='password'

/etc/ansible/hosts文件格式

inventory文件遵循INI文件风格,中括号中的字符为组名。

可以将同一个主机同时归并到多个不同的组中;

此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明

四、ansible部署Windows的步骤

1、通过ansible部署Windows的前提条件

Ansible 从1.7+版本开始支持Windows,但前提是管理机必须为Linux系统,远程主机的通信方式也由SSH变更为PowerShell,同时管理机必须预安装Python的Winrm模块,方可和远程Windows主机正常通信,但PowerShell需3.0+版本且Management Framework 3.0+版本,实测Windows 7 SP1和Windows Server 2008 R2及以上版本系统经简单配置可正常与Ansible通信。简单总结如下:

1). 管理机必须为Linux系统且需预安装Python Winrm模块

2). 底层通信基于PowerShell,版本为3.0+,Management Framework版本为3.0+

3). 远程主机开启Winrm服务

2. ansible管理机部署安装

目前,只要机器上安装了 Python 2.6 或 Python 2.7 (windows系统不可以做控制主机),都可以运行Ansible.主机的系统可以是 Red Hat, Debian, CentOS, OS X, BSD的各种版本,等等。本文使用的管理机是centos7。

安装ansible有以下几种方式:

1). 通过源码部署

 从项目的checkout中可以很容易运行Ansible,Ansible的运行不要求root权限,也不依赖于其他软件,不要求运行后台进程,也不需要设置数据库。因此许多用户一直使用Ansible的开发版本,这样可以利用最新的功能特性,也方便对项目做贡献。因为不需要安装任何东西,跟进Ansible的开发版相对于其他开源项目要容易很多.

从源码安装的步骤如下:

  1. clone源码
git clone git://github.com/ansible/ansible.git --recursive$ cd ./ansible

    2. 安装pip

yum install pip3

    3.  安装python依赖包

使用pip命令安装python依赖包

4. 配置hosts文件

 vim /etc/ansible/hosts

[windows]
***.***.****.***
ansible_ssh_user="*****" 
ansible_ssh_pass="****" 
ansible_ssh_port=5985 
ansible_connection="winrm" 
ansible_winrm_server_cert_validation=ignore

   5.运行env-setup脚本

  一旦运行env-setup脚本,就意味着Ansible从源码中运行起来了.默认的inventory文件是 /etc/ansible/host,因此在运行env-setup脚本前必须配置host。

 source ./ansible/env-setup

至此,部署机配置完毕。

3. Windows系统配置

和Linux发版版稍有区别,远程主机系统如为Windows需预先如下配置:

  • 安装Framework 3.0+

  • 更改powershell策略为remotesigned

  • 升级PowerShell至3.0+

  • 设置Windows远端管理,英文全称WS-Management(WinRM)

 

1). 安装Framework 3.0+

       由于本次演示的Windows系统Framework已升级到4.5,所以只提供Framework的下载链接。去官网下载至本地后双击左键安装即可,期间可能会多次重启,电脑需正常连接Internet。

 2). 更改powershell策略为remotesigned

在管理员权限下打开PowerShell,执行:set-executionpolicy remotesigned,如下图:

 3). 升级PowerShell至3.0+

     Window 7和Windows Server 2008 R2默认安装的有PowerShell,但版本号一般为2.0版本,所以我们需升级至3.0+,如下图中数字1部分表示PowerShell版本过低需3.0+版本,数字2部分表示当前PowerShell版本为2.0。

下脚本保存至本地后,右键选择“使用PowerShell运行”,执行完毕重启系统后,在PowerShell执行Get-Host命令结果如下图所示PowerShell版本为3.0为正常。 具体过程如下图:

4). 设置Windows远端管理(WS-Management,WinRM)

winrm service 默认都是未启用的状态,先查看状态;如无返回信息,则是没有启动;

winrm enumerate winrm/config/listener

针对winrm service 进行基础配置:

winrm quickconfig

查看winrm service listener:

winrm e winrm/config/listener

为winrm service 配置auth:

winrm set winrm/config/service/auth @{Basic="true"}

为winrm service 配置加密方式为允许非加密:

winrm set winrm/config/service @{AllowUnencrypted="true"}

好了,ansible部署Windows的配置到此结束,接下来我们来测试配置是否成功。

4. 验证ansible管理机是否可以访问Windows

1) win_ping 是Windows系统下的ping模块,经常被用来测试主机是否存活

执行以下命令:

ansible windows -m win_ping

执行结果如下图:

2)  win_copy 用来拷贝文件到远程Windows主机

执行以下命令:

ansible windows -m win_copy -a 'src=/etc/passwd dest=F:\file\passwd'

执行结果如下:

***.***.*.**** | success >> {
    "changed": true,
    "checksum": "****",
    "operation": "file_copy",
    "original_basename": "passwd",
    "size": 2563
}

如果要将以上命令放到ansible常用的Playbook中,写法如下:

---
- name: windows module example
  hosts: windows
  tasks:
     - name: Move file on remote Windows Server from one location to another
       win_file: src=/etc/passwd dest=F:\file\test

3) win_file —创建,删除文件或目录

 

如果想删除 F:\file\test

执行以下命令:

ansible windows -m win_file -a "path=F:\file\test state=absent"

执行结果如下:

***.***.*.*** | success >> {
    "changed": true
}

好了,以上就是通过ansible部署Windows的全部介绍及演示,如果要完成复杂的部署功能,可以使用Playbook模块来执行定义的yaml文件,这样可以用简单明了的方式完成复杂的部署任务。

文章来自个人专栏
云备份
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0