Simple, agentless IT automation 。
Ansible 是一种安装在控制节点上的无代理自动化工具,Ansible 从控制节点远程管理机器和其他设备(默认情况下,通过 SSH 协议)。命令行中使用Ansible,不需要安装数据库或运行任何守护程序。在管理服务器集群,可以通过自己编写脚本来实现,但是Ansible 工具(基于Python开发)可以代替完成所有工作。
一、安装Ansible
笔者时是centos8虚拟机,查看红帽文档的安装指南,只需要两条命令。
sudo yum install epel-release 安装常用yum源
sudo yum install ansible 安装ansible
因为是基于python开发,也可以使用pip包管理方法来安装:pip install ansible 。
安装完成后,运行ansible --version检查ansible的版本和运行环境。
二、Ansible框架图
网络上的Ansible框架图,贴在此处用于日后检索。
1、ansible.cfg:ansible的配置文件,包含各种Ansible全局性质的参数,可在不同项目下或者不同用户下创建一样的ansible.cfg文件,作为局部配置文件,检索顺序:局部-->全局。
2、inventory:设备列表,当跑脚本时,需要告诉Ansible针对哪些设备或设备组,在配置文件ansible.cfg里指定ansible.cfg里的inventory=hosts。ansible all --list-hosts 显示所有服务器 。
3、variable:变量。
4、module:模块,通过其他语言编写而成,能实现某个特定的功能的工具,例如思科配置接口的模块,修改ip地址的模块等等。
5、Jinja2:模板系统,Ansible可实现批量配置网络设备。
6、Role:角色,一套文件夹里面定义了例如变量,具体任务task。Role里面定义的内容可以实现某些特殊功能,而你在使用不同的脚本过程中可以导入Role来实现某一个功能,而不用重复写。
以上的组件,会由以下的“客户”来使用:
7、Ad-hoc:即插即用,简易模式,一条命令,一次使用。
8、playbook:剧本,基于YAML文件格式书写,可以包含Ansible任意功能,无论是设备列表,变量,jinja2模板,条件循环,模块等等。
三、Ansible测试实例
Ansible命令的主要参数, 接下来就是利用这些参数来测试的实例。
1、测试主机是否存活
ansible localhost -m ping,尝试使用默认的设定去ssh登陆远端设备,如果登陆成功,就反馈:pong,并非传统的icmp ping。
2、查看磁盘空间
ansible localhost -m command -a "df -h" ,通过command运行df -h查看磁盘空间。
3、测试ssh密钥远程腾讯云主机
编辑/etc/ansible/hosts并在其中放置一个服务器地址,ansible的前提是需要设置免密登录到这个服务器地址。具体设置方法参考笔者以前的文章-Linux怎么远程执行指令呢-SSH秘钥 ,其实也就两条命令即可。在/etc/ansible/ansible.cfg文件中进行配置,host_key_checking=False ,当第一次连接主机时,会提示yes/no,跳过此次环节,类似于ssh命令中的StrictHostKeyChecking选项,不检查远程主机是否存在于Konw_hosts文件中。
以lighthouse用户名登陆到这个服务器并测试主机是否存活与查看磁盘空间。如果不写用户名,会以默认root用户名登陆。另外可以在在/etc/ansible/hosts中的主机地址后面增加ansible_ssh_user ,主要就可以不再命令里面添加-u选项。
带参数-k既是用密码来认证,这个是由交互提示输入密码的:ansible all -m command -a "df -h" -u lighthouse -k 。
另外ansible all 的all可以替换为目标地址或者目标组。inventory默认使用/etc/ansible/hosts,可以临时指定inventory,通过-i /etc/ansible/ansible_hosts 来指定配置文件/etc/ansible/ansible_hosts 。ansible all --list-hosts 查看配置的服务器。
4、测试/etc/ansible/hosts文件中添加用户名和密码
在/etc/ansible/hosts中的主机地址后面增加ansible_ssh_user和 ansible_ssh_pass ,
ansible 192.168.31.103 -m command -a "df -h" ,此条命令就可以不使用-u指定用户名和-k指定密码,也不用配置ssh密钥,但是密码会在配置文件中暴露。在命令后面添加-vvv可以查看具体的调试信息。
可以为IP地址设置别名,请参考下面的配置,那么就可以通过ansible tcloud -m command -a "df -h"来运行。如果指定密码的话,ansible会使用sshpass来远程连接。
5、 fetch 从远程某主机获取(复制)文件到本地
ansible 192.168.31.103 -m fetch -a 'src=~/mysql_check.sh dest=~/' ,dest是用来存放文件的目录,src是在远程拉取的文件,并且必须是一个file,不能是目录。
文件保存的路径是设置的接收目录下的被管制主机ip目录 。