目录
1.什么是ansible
2、ansible的特性
3、ansible的优点(为什么使用ansible)
4.ansible 配置文件
1)文件内容详解
2)文件调用优先级
5.ansible的工作模型
6.ansible的工作流程
7.ansible的常用模块
8.playbook详解
1)Playbook简介
2)playbook的核心元素
3)playbook格式
4)执行简单的playbook文件:
5)playbook中的触发器
6)playbook中的角色
9.ansible对比常用自动化工具
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装客户端,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。
(1)、no agents:不需要在被管控主机上安装任何客户端;
(2)、no server:无服务器端,使用时直接运行命令即可;
(3)、modules in any languages:基于模块工作,可使用任意语言开发模块;
(4)、yaml,not code:使用yaml语言定制剧本playbook;
(5)、ssh by default:基于SSH工作;
(6)、strong multi-tier solution:可实现多级指挥。
(1)、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
(2)、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
(3)、使用python编写,维护更简单;
(4)、支持sudo。
ansible的使用场景
ansible的用法
命令ansi:ad-hoc
脚本:playbook
模块:期望执行操作类型
ansible 的配置文件为/etc/ansible/ansible.cfg
,ansible 有许多参数,下面我们列出一些常见的参数:
inventory = /etc/ansible/hosts #这个参数表示资源清单inventory文件的位置
library = /usr/share/ansible #指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
forks = 5 #并发连接数,默认为5
sudo_user = root #设置默认执行命令的用户
remote_port = 22 #指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全
host_key_checking = False #设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例
timeout = 60 #设置SSH连接的超时时间,单位为秒
log_path = /var/log/ansible.log #指定一个存储ansible日志的文件(默认不记录日志)
(1)首先找执行ansible命令的当前目录中,是否有 ansible.cfg文件
./ansible.cfg
(2)如果找不到,再 找 当前用户的家目录下是否有 .ansible.cfg
~/.ansible.cfg
(3)如果还找不到,就找 /etc/ansible/ansible.cfg
/etc/ansible/ansible.cfg
(1) Ansible,是Ansible的命令工具,核心执行工具;一次性或临时执行的操作都是通过该命令进行。
(2) Ansible Playbook,任务剧本(又称任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,yam格式。
(3) Inventory,Ansible管理主机的清单,默认是/etc/ansible/hosts文件。
(4) Modules,Ansible执行命令的功能模块,Ansible2.3版本为止,共有1039个模块。还可以自定义模块。
(5) Plugins,插件,模块功能的补充,常有连接类型插件,循环插件,变量插件,过滤插件,插件功能用的比较少。
(6) API,提供给第三方程序调用的应用程序编程接口。
使用者使用ansible或ansible-playbook(会额外读取playbook文件)时,在服务器终端输入ansible的ad-hoc命令集或playbook后,ansible会遵循预先编排的规则将playbooks逐条拆解为play,再将play组织成ansible可识别的任务(task)。随后调用任务涉及的所有模块(module)和插件(plugin),根据inventory中定义的主机列表通过ssh将任务集以临时文件或命令的形式传输到远程客户端执行并返回执行结果,如果临时文件执行完毕则自动删除.
https://blog.csdn.net/qq_34646546/article/details/86606408?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159944420919195162150037%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=159944420919195162150037&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~rank_business_v1-1-86606408.ecpm_v3_rank_business_v1&utm_term=ansible%E7%9A%84%E6%A8%A1%E5%9D%97&spm=1018.2118.3001.4187
handlers触发器的使用示例如下:
将多种不同的tasks的文件集中存储在某个目录下,则该目录就是角色。角色一般存放在/etc/ansible/roles/目录下,可通过ansible的配置文件来调整默认的角色目录,/etc/ansible/roles/目录下有很多子目录,其中每一个子目录对应一个角色,每个角色也有自己的目录结构,结构如下:
上面的目录中,tasks、handlers、vars、meta、default至少应该包含一个main.yml文件,该目录下也可以有其他.yml文件,但是需要在main.yml文件中用include指令将其他.yml文件包含进来。
有了角色后,可以直接在yaml文件(playbook配置文件)中调用角色,示例如下:
可以只调用一个角色,也可以调用多个角色,当定义了角色后,用ansible-playbook PALYBOOK文件执行即可。此时ansible会到角色集合的目录(/etc/ansible/roles)去找mysql和httpd目录,然后依次运行mysql和httpd目录下的所有代码。