一、ansible发展史及功能
1.1 ansible功能
- 批量执行远程命令,可以控制多台主机进行操作
- 批量安装和配置软件服务,可以对多台主机进行自动化的方式配置和管理各种服务
- 编排高级的企业级复杂IT架构任务,例如:playbook、role
- 提供自动化韵味工具的开发API,例如:jumpserver
1.2 ansible特性
- 模块化
- 三个关键模块:Paramiko(python),pyYAML,Jinja2(模版语言)
- 基于python语言实现
- 部署简单,依赖于python和SSH
- 安全,它是基于OpenSSH
- 幂等性
- 支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构
- 较强大的多层解决方案role
1.3 ansible架构
1.3.1 Ansible组成
- INVENTORY:Ansible管理主机的清单 /etc/anaible/hosts 需要管理的服务清单
- MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
- PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
- API:供第三方程序调用的应用程序编程接口
1.3.2 ansible命令执行来源
- USER 普通用户,即SYSTEM ADMINISTRATOR
- PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
- CMDB(配置管理数据库) API 调用
- PUBLIC/PRIVATE CLOUD API调用
二、ansible安装及入门
2.1 安装
2.1.1 安装epel源和ansible

2.1.2 查看ansible配置项

2.1.3 编辑hosts

2.1.4 远程连接虚拟机二

2.1.5 远程连接虚拟机三

2.1.6 同时ping通两台虚拟机

2.1.7 查看web主机名

2.1.8 分别在web下创建文件test 
2.1.9 分别在两台虚拟机上查看test文件

2.1.10 免密登陆


2.2 查看基本信息

2.3 相关信息
- /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性,也可以在项目的目录中创建此文件,当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文件
- /etc/ansible/hosts 主机清单
- /etc/ansible/roles/ 存放角色的目录
2.4 ansible主配置文件
Ansible 的默认配置文件 /etc/ansible/ansible.cfg ,其中大部分的配置内容无需进行修改
2.5 inventory主机清单文件
默认的inventory file文件在:/etc/ansible/hosts




2.6 ansible相关工具
- /usr/bin/ansible 主程序,临时命令执行工具
- /usr/bin/ansible-doc 查看配置文档,模块功能查看工具,相当于man ansible-doc -l |grep 关键字 具体模块名字
- /usr/bin/ansible-playbook 定制自动化任务,编排剧本工具,相当于脚本
- /usr/bin/ansible-pull 远程执行命令的工具
- /usr/bin/ansible-vault 文件加密工具
- /usr/bin/ansible-console 基于Console界面与用户交互的执行工具
- /usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
2.6.1 ansible
执行临时任务一次性任务
格式:
或、且、非

ansible执行命令过程
执行返回结果
- 绿色:执行成功并且不需要做改变的操作
- 黄色:执行成功并且对目标主机做变更
- 红色:执行失败

2.6.2 ansible-doc


2.6.3 ansible-console

2.6.4 playbook
2.7 模块
2.7.1 Command模块
功能:在远程主机执行命令,此为默认模块,可忽略 -m 选项
注意:此命令不支持 $VARNAME < > | ; & 等,可能用shell模块实现,此模块不具有幂等性 



2.7.2 shell模块
功能:和command相似,用shell执行命令,支持各种符号,比如:*,$, >
注意:此模块不具有幂等性


2.7.3 scripts
功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)
注意:此模块不具有幂等性



2.7.4 copy模块
功能:从ansible服务器主控端复制文件到远程主机
注意: src=file 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件

2.7.5 Get_url模块
功能: 用于将文件从http、https或ftp下载到被管理机节点上


2.7.6 Fetch
功能:从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录
2.7.7 File模块
功能:设置文件属性,创建软链接等
| path | 指定文件路径 |
|---|---|
| state | 文件状态 有:新建(touch) 删除(absent) 文件夹(directory) 连接文件(link)等 |
| src | 源文件 |
| mode | 权限 |
| owner | 属主 |
| group | 属组 |
| recurse | 递归 |





2.7.8 stat模块
功能:检查文件或文件系统的状态
注意:对于Windows目标,请改用win_stat模块
选项:
常用的返回值判断:

2.7.9 unarchive 模块
功能:解包解压缩
实现有两种用法:
- 将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes,此为默认值,可省略
- 将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
常见参数:
2.7.10 archive模块
功能:打包压缩保存再被管理节点
2.7.11 hostname模块

2.7.12 cron模块
功能:计划任务
支持时间:minute,hour,day,month,weekday
关键字:



2.7.13 yum和apt模块
功能:yum 管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其它版本apt 模块管理 Debian 相关版本的软件包
关键字:
| name | 所安装的包的名称 |
|---|---|
| state | present——安装,lastest——安装最新的,absent——卸载软件 |
| update_cache | 强制更新yum缓存 |
| conf_file | 指定远程yum安装时所以来的配置文件(安装本地已有的包) |
| disable_gpg_check | 是否禁止GPG checking,只用于presentor latest |
| disablerepo | 临时禁止使用yum库,只用于安装或更新时 |
| enablerepo | 临时使用的yum库。只用于安装或更新时 |

2.7.14 yum_repository模块
功能:建立yum仓库模块
关键字:
| name参数 | 必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中每个仓库对应的”中括号”内的仓库ID。 |
|---|---|
| baseurl参数 | baseurl参数:此参数用于设置 yum 仓库的 baseurl。 |
| description参数 | 此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的”name字段”对应的内容。 |
| file参数 | 此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库ID作为”.repo”配置文件的文件名前缀,同一个”.repo” 配置文件中 可以存在多个 yum 源。 |
| enabled参数 | 此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum 源,设置为 no 表示不启用对应的 yum 源。 |
| gpgcheck参数 | 此参数用于设置是否开启 rpm 包验证功能,默认值为 no,表示不启用包验证,设置为 yes 表示开启包验证功能。 |
| gpgcakey参数 | 当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥。 |
| state参数 | 默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源。 |

2.7.15 service模块
功能:管理服务
关键字:
| name参数 | 此参数用于指定需要操作的服务名称,比如:nginx |
|---|---|
| state参数 | 此参数用于指定服务的状态,比如,我们想要启动远程主机中的 nginx,则可以将 state 的值设置为 started;如果想要停止远程主机中的服务,则可以将 state 的值设置为 stopped。此参数的可用值有started、stopped、restarted、reloaded |
| enabled参数 | 此参数用于指定是否将服务设置为开机 启动项,设置为 yes 表示将对应服务设置为开机启动,设置为 no 表示不会开机启动 |





2.7.16 mount挂载和卸载
功能: 挂载和卸载文件系统
2.7.17 User模块
功能:管理用户
| comment | 用户的描述信息 |
|---|---|
| createhome | 是否创建家目录 |
| force | 在使用state=absent时, 行为与userdel –force一致. |
| group | 指定基本组 |
| groups | 指定附加组,如果指定为(groups=)表示删除所有组 |
| home | 指定用户家目录 |
| move_home | 如果设置为home=时, 试图将用户主目录移动到指定的目录 |
| name | 指定用户名 |
| non_unique | 该选项允许改变非唯一的用户ID值 |
| password | 指定用户密码,使用 SHA512 hash |
| remove | 在使用state=absent时, 行为是与userdel –remove一致 |
| shell | 指定默认shell |
| state | 设置帐号状态,不指定为创建,指定值为absent表示删除 |
| system | 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户 |
| uid | 指定用户的uid |
| update_ password | |
| always | 如果password参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为always |
| on_create | 如果password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定 |

2.7.18 group模块
功能:管理组


2.7.19 reboot模块

2.7.20 lineinfile模块
ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换 。其实在ansible自身提供了两个模块:lineinfile模块和replace模块,可以方便的进行替换一般在ansible当中去修改某个文件的单行进行替换的时候需要使用lineinfile模块
regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。
如果想进行多行匹配进行替换需要使用replace模块
功能:相当于sed,可以修改文件内容
关键字:
| path | 指定要操作的文件 |
|---|---|
| regexp | 使用正则表达式匹配对应的行 |
| line | 修改为新的内容 |
| insertafter | 将文本插入到“指定的行”之后 |
| insertbefore | 将文本插入到“指定的行”之前 |
| state | 删除对应的文本时,需要state=absent |
| backrefs | 1.支持向后引用 2.当未匹配到内容则不操作文件 |
| backup | 是否在修改文件之前对文件进行备份 |
| create | 当要操作的文件并不存在时,是否创建对应的文件 |
2.7.21 replace
该模块有点类似于sed命令,主要也是基于正则进行匹配和替换


2.7.22 setup模块
功能: setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度
可以使用 gather_facts:
| no | 禁止 |
|---|---|
| Ansible | 收集 |
| facts | 信息 |


























