一、部署

Ansible官方网站:

1、安装ansible
关闭selinux
使用yum直接安装:yum -y install ansible

2、部署ansible

有三个主要的文件需要关注:

ansible可以批量操控windows吗 ansible批量关机_缩进


ansible.cfg:ansible的配置文件

hosts文件:写入需要管理的主机的IP地址。

roles:角色目录

需提前确认管理主机已将SSH秘钥分发到被管理主机,否则无法登录被管理主机。
被管理主机不需要安装任何软件

3、测试管理主机

ansible没有守护进程,直接使用ansible命令来执行管理命令。
执行简单的测试来验证一下效果:获取所有被管理的主机的主机名


二、架构组成

  • Inventory 主机清单
  • Module 常用模块:
  • 模块的应用语法格式:ansible [主机地址/主机名/主机组名/所有主机(all)] -m [模块名称] -a [执行动作] 参数之间要有空格
    各个模块的使用需要参考官网的详细说明文档

1.COMMAND模块:
举例:ansible 192.168.80.128 -m command -a hostname
command模块的参数:command模块参数

chdir参数示例:ansible 192.168.80.128 -m command -a “chdir=/tmp/ touch test.txt”

其他常用参数还有:creates removes

2.SHELL模块

又叫万能模块,可以执行相当于在本地shell执行的所有命令。比command模块更强大。

3.script模块

可以将本地的脚本在远程主机上执行。(不需要将脚本拷贝至远程主机)

4.copy模块

批量数据分发

ansible [xxx.xxx.xxxx.xxx] -m copy -a “src=[需要分发的数据] dest=[保持目录]”

ansible可以批量操控windows吗 ansible批量关机_主机名_02


还有常用参数:owner :Name of the user that should own the file/directory, as would be fed to chown. 传输时修改属主

group :Name of the group that should own the file/directory, as would be fed to chown. 传输时修改属组

mode:The permissions of the destination file or directory. 修改权限

backup:在传输之前把文件做备份。=YES/NO

5.File模块
修改文件属性信息。
ansible [xxx.xxx.xxxx.xxx] -m file -a “dest=[目标文件/目录/链接] owner= group= mod=”

6.yum模块
ansible [xxx.xxx.xxxx.xxx] -m yum -a “name=wget state=installed”
installed:安装软件
absent:卸载软件

7.service模块
管理服务的运行:启动、停止、重启
ansible [xxx.xxx.xxxx.xxx] -m yum -a “name=sshd state=started enabled=yes”
name=服务名
state= started restarted stopped
enbled=是否开机自启

8.cron模块
批量设置定时任务
minute
hour
day
month
weekday
ansible [xxx.xxx.xxxx.xxx] -m cron -a “name=‘任务注释信息’ minute=0 hour=2 job=‘XXXX’”
每天2点执行
day/month/weekday不写则默认表示*。
job表示要执行的任务,用单引号包围。可选择性添加name注释
删除指定定时任务:
ansible [xxx.xxx.xxxx.xxx] -m cron -a “name=‘任务注释信息’ state=absent”
ansible只能删除ansible自己设置的任务,手动创建的任务无法删除。

9.mount模块

ansible可以批量操控windows吗 ansible批量关机_linux_03


例子:

ansible可以批量操控windows吗 ansible批量关机_主机名_04


使用present参数:不会立即进行挂载,而是修改了/etc/fstab文件,开机才能挂载。

ansible可以批量操控windows吗 ansible批量关机_配置文件_05


使用mounted参数:立即进行挂载,且修改/etc/fstab文件,开机自动挂载。

使用absent参数: 立即卸载,并删除/etc/fstab文件自动挂载

使用umounted参数: 立即卸载,但是不删除/etc/fstab文件自动挂载

更多模块使用方法可参考官网文档或者使用:
ansible-doc l 查看模块使用简介
ansible-doc -s shell 查看模块使用详细说明

10.user模块

批量管理用户

ansible可以批量操控windows吗 ansible批量关机_缩进_06


ansible可以批量操控windows吗 ansible批量关机_配置文件_07


如果是创建用户密码,则需要通过密码生成密文,其中一种方法如下:msg后面的就是密文

ansible可以批量操控windows吗 ansible批量关机_主机名_08


再执行设置密码命令:

ansible可以批量操控windows吗 ansible批量关机_配置文件_09


密文用单引号包围,否则会发生正则解析错误。

- Playbooks 剧本
编写规范:pyyaml

1.合理的缩进。且不能用Tab键缩进,用空格缩进。
2.冒号的用法。
hosts:
tasks:
冒号后面要有一个空格,但以冒号结尾或冒号出现在注释中时,可以不加空格。
3.短横线的用法。
短横线构成列表信息,后面需要有一个空格。

首先创建一个目录存放剧本文件,便于管理:/etc/ansible/ansible-playbook,剧本的扩展名为:yaml

例如编写剧本rsync_server.yaml

编写格式:

ansible可以批量操控windows吗 ansible批量关机_配置文件_10


-name是注释信息编写完成后,检查语法格式,看是否有报错:

ansible可以批量操控windows吗 ansible批量关机_linux_11


再执行一下“彩排”:-C参数不会正真修改远程主机。

ansible可以批量操控windows吗 ansible批量关机_配置文件_12


如果没问题,再正真执行剧本:

ansible可以批量操控windows吗 ansible批量关机_linux_13


以部署rsync服务服务端为例:

编写剧本:

ansible可以批量操控windows吗 ansible批量关机_配置文件_14


ansible可以批量操控windows吗 ansible批量关机_缩进_15


如何配置主机清单:/etc/ansible/hosts

1、分组配置:vi /etc/ansible/hosts 执行时可用组名替代IP地址

ansible可以批量操控windows吗 ansible批量关机_缩进_16


2、使用匹配方式:使用主机名时需要有域名解析

ansible可以批量操控windows吗 ansible批量关机_缩进_17


或者这样不需要主机名解析也可以。

ansible可以批量操控windows吗 ansible批量关机_配置文件_18


3、跟上端口号:如果被管理机远程端口变成25000,则可以在配置中修改。

ansible可以批量操控windows吗 ansible批量关机_linux_19


4、跟上变量:这种方式可以不需要配置分发公钥就可连接远程主机。

ansible可以批量操控windows吗 ansible批量关机_主机名_20


5、IP地址前加上主机名:命令输出信息便于查看

ansible可以批量操控windows吗 ansible批量关机_缩进_21


6、组合并:合并后的组名需要加上一个特定字段children

ansible可以批量操控windows吗 ansible批量关机_linux_22


7、变量引用:

ansible可以批量操控windows吗 ansible批量关机_缩进_23


剧本中可以使用主机清单的组对相同操作进行合并。

更多详细配置参考官网

剧本的扩展应用:

1.变量:可以在剧本中直接定义或者在命令行指定变量的值。

ansible可以批量操控windows吗 ansible批量关机_缩进_24


2、注册信息:例如如何验证服务端口是否启动

ansible可以批量操控windows吗 ansible批量关机_linux_25


3、条件判断:

由于远程主机可能系统版本、架构、主机名等等各不相同,在执行命令时需要根据具体信息具体执行。这是就需要根据远程主机的信息进行判断,用setup模块可获取主机信息:

ansible可以批量操控windows吗 ansible批量关机_配置文件_26


常用参数有很多,不一一举例:

ansible可以批量操控windows吗 ansible批量关机_主机名_27


以ansible_hostname为例:在条件中判断主机名为web01时,执行安装rsync操作:

ansible可以批量操控windows吗 ansible批量关机_缩进_28


4、触发信息:

ansible可以批量操控windows吗 ansible批量关机_主机名_29


5、剧本整合:

ansible可以批量操控windows吗 ansible批量关机_主机名_30


6、角色的功能

作用:让剧本编写更加规范。

在/etc/ansible/roles目录下创建角色目录,例如/etc/ansible/roles/rsync/,再在这个角色目录下创建几个固定的子目录:

ansible可以批量操控windows吗 ansible批量关机_配置文件_31


files:保存需要分发的文件;

handles:保存触发器配置文件;

tasks:保存要执行的动作文件

templates:保存需要分发的模板文件;

vars:保存变量配置文件如何使用:

1、先写tasks文件:

ansible可以批量操控windows吗 ansible批量关机_缩进_32


该文件的内容即rsync_serive.yaml中tasks部分:注意缩进

ansible可以批量操控windows吗 ansible批量关机_主机名_33


2.编写变量配置文件:也是固定的文件名

ansible可以批量操控windows吗 ansible批量关机_配置文件_34


文件内容就是变量定义,有多少变量写多少变量

ansible可以批量操控windows吗 ansible批量关机_缩进_35


3.将需要分发的配置文件保存在file目录中

那么tasks中的main.yaml文件就可修改一下:

ansible可以批量操控windows吗 ansible批量关机_配置文件_36


4.编写目录handlers中的文件:

还是有个固定名称的文件:main.yaml

直接将红色部分复制到main.yaml文件中(service:前面多了个-,去掉)

ansible可以批量操控windows吗 ansible批量关机_缩进_37


5.在roles目录下创建一个剧本文件:rsync.yaml 名称可自定义

内容很简单:

ansible可以批量操控windows吗 ansible批量关机_配置文件_38


再执行roles目录下的这个剧本:ansible-playbook rsync.yamltemplate目录作用:(可选)

可以将配置文件用包含变量的方式写成模板,将变量写在vars目录里,在tasks中调用配置文件时使用template模块去推送配置文件。

ansible可以批量操控windows吗 ansible批量关机_linux_39