好久没玩ansible了,再来回顾一下使用过程。ansible只需要在ansible controller节点(操作机)安装即可,其它节点可以直接通过SSH协议进行连接操作。
1.安装
控制端安装epel-release yum源
yum -y install epel-release
安装ansible
yum -y install ansible
验证安装是否成功安装
rpm -qa | grep ansible
2.主机清单
ansible controller在对主机进行操作时,仅认为主机清单中定义的主机列表,即从主机清单中读取到主机列表时才可进行配置。主机清单用于ansible读取配置主机列表,实现主机分组功能。
主机清单存储位置:
vim /etc/ansible/hosts
比如常见分组(主机名需要能够解析),把web的服务器地址放在一个分组里,涉及特殊端口和主机名的形式:
[web] 192.168.31.220 192.168.31.221:5222 web01
3.应用案例
案例1:ping
首先要对多主机之前实现免密登录:
ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ''
传递公钥
ssh-copy-id 远程主机名称
比如我这里对192.168.31.220这台主机进行ping测试,-m后接模块名称:
ansible 192.168.31.220 -m ping
如果返回结果为pong,表明通了。注意:这里的ping其实是一种“假”ping,实际是使用ssh功能连接到客户端中,表明此服务器正常,并不是使用icmp返回数据包的形式。
案例2:cron时间同步
用法:
ansible 主机清单中IP或分组名称 -m 模块 -a "参数"
定义主机每小时与时钟源同步一次
ansible 192.168.31.220 -m cron -a 'name="test cron1" job="ntpdate ntp.aliyun.com" minute=0 hour=*/1'
请到远程查看主机结果,我这里在同一台机器上:
crontab -l
可以看到已经添加好定时任务。
案例3:copy同步文件
比如我有一个需求,需要把本地主机的/etc/hosts文件拷贝到目标主机的/tmp目录下,使用copy模块。用法:
ansible 主机清单中IP或分组名称 -m 模块 -a "参数"
copy模块应用(我这里已经事先定义好ansible hosts文件):
ansible blog.aoarasi.com -m copy -a "src=/etc/hosts dest=/tmp" # 通过content直接提供文件内容,\n表示回车 ansible blog.aoarasi.com -m copy -a "content='hello world\n' dest=/tmp/a.txt"
案例4:fetch模块
与copy类似,但是作用相反,可以将其它主机的文件拷贝到本地
ansible blog.aoarasi.com -m fetch -a "src=/etc/hostname dest=/tmp"
ansible会自己创建一个目标主机的目录,防止同名冲突。
案例5:yum 模块
# 安装zip软件包 ansible blog.aoarasi.com -m yum -a "name=unzip state=present" # 升级zip软件包,软件名称可以是*,代表升级所有软件包 ansible blog.aoarasi.com -m yum -a "name=unzip state=latest" # 卸载unzip软件包 ansible blog.aoarasi.com -m yum -a "name=unzip state=absent"