官网地址
1、安装ansible 关闭selinux; 使用yum直接安装:yum -y install ansible
2、部署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=[保持目录]” 还有常用参数: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模块 例子: 使用present参数:不会立即进行挂载,而是修改了/etc/fstab文件,开机才能挂载。 使用mounted参数:立即进行挂载,且修改/etc/fstab文件,开机自动挂载。 使用absent参数: 立即卸载,并删除/etc/fstab文件自动挂载 使用umounted参数: 立即卸载,但是不删除/etc/fstab文件自动挂载
更多模块使用方法可参考官网文档或者使用: ansible-doc l 查看模块使用简介 ansible-doc -s shell 查看模块使用详细说明
10.user模块 批量管理用户 如果是创建用户密码,则需要通过密码生成密文,其中一种方法如下:msg后面的就是密文 再执行设置密码命令: 密文用单引号包围,否则会发生正则解析错误。
- Playbooks 剧本 编写规范:pyyaml
1.合理的缩进。且不能用Tab键缩进,用空格缩进。 2.冒号的用法。 hosts: tasks: 冒号后面要有一个空格,但以冒号结尾或冒号出现在注释中时,可以不加空格。 3.短横线的用法。 短横线构成列表信息,后面需要有一个空格。
首先创建一个目录存放剧本文件,便于管理:/etc/ansible/ansible-playbook,剧本的扩展名为:yaml 例如编写剧本rsync_server.yaml 编写格式: -name是注释信息
编写完成后,检查语法格式,看是否有报错: 再执行一下“彩排”:-C参数不会正真修改远程主机。 如果没问题,再正真执行剧本: 以部署rsync服务服务端为例: 编写剧本: 如何配置主机清单:/etc/ansible/hosts 1、分组配置:vi /etc/ansible/hosts 执行时可用组名替代IP地址 2、使用匹配方式:使用主机名时需要有域名解析 或者这样不需要主机名解析也可以。 3、跟上端口号:如果被管理机远程端口变成25000,则可以在配置中修改。 4、跟上变量:这种方式可以不需要配置分发公钥就可连接远程主机。 5、IP地址前加上主机名:命令输出信息便于查看 6、组合并:合并后的组名需要加上一个特定字段children 7、变量引用: 剧本中可以使用主机清单的组对相同操作进行合并。
更多详细配置参考官网
剧本的扩展应用: 1.变量:可以在剧本中直接定义或者在命令行指定变量的值。 2、注册信息:例如如何验证服务端口是否启动 3、条件判断: 由于远程主机可能系统版本、架构、主机名等等各不相同,在执行命令时需要根据具体信息具体执行。这是就需要根据远程主机的信息进行判断,用setup模块可获取主机信息: 常用参数有很多,不一一举例: 以ansible_hostname为例:在条件中判断主机名为web01时,执行安装rsync操作: 4、触发信息: 5、剧本整合: 6、角色的功能 作用:让剧本编写更加规范。 在/etc/ansible/roles目录下创建角色目录,例如/etc/ansible/roles/rsync/,再在这个角色目录下创建几个固定的子目录: files:保存需要分发的文件; handles:保存触发器配置文件; tasks:保存要执行的动作文件 templates:保存需要分发的模板文件; vars:保存变量配置文件
如何使用: 1、先写tasks文件: 该文件的内容即rsync_serive.yaml中tasks部分:注意缩进 2.编写变量配置文件:也是固定的文件名 文件内容就是变量定义,有多少变量写多少变量 3.将需要分发的配置文件保存在file目录中 那么tasks中的main.yaml文件就可修改一下: 4.编写目录handlers中的文件: 还是有个固定名称的文件:main.yaml 直接将红色部分复制到main.yaml文件中(service:前面多了个-,去掉) 5.在roles目录下创建一个剧本文件:rsync.yaml 名称可自定义 内容很简单: 再执行roles目录下的这个剧本:ansible-playbook rsync.yaml
template目录作用:(可选) 可以将配置文件用包含变量的方式写成模板,将变量写在vars目录里,在tasks中调用配置文件时使用template模块去推送配置文件。