ansible是什么:
Ansible是一个简单的自动化运维管理工具,基于Python语言实现,由Paramiko和PyYAML两个关键模块构建,可用于自动化部署应用、配置、编排task(持续交付、无宕机更新等)。
(1)、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可,部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
(2)、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
(3)、使用python编写,维护更简单,ruby语法过于复杂;(4)、支持sudo。默认使用SSH协议对设备进行管理;通过Playbooks来定制强大的配置、状态管理;
Ansible核心组件说明:
Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载
Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能.
Custom Modules:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。
基础环境的安装与配置
ssh免密登录配置(如果不配置需要在host中指定ssh密码)
yum install ansible
ansible host配置
1.连续的IP写法,表示192.168.1.20到192.168.1.50,共31台主机:
[test1]
name1 ansible_ssh_host=192.168.1.[20:50]
ansible_ssh_user="root"
ansible_ssh_pass="1234"
ansible_ssh_port=22
eg:
[compute]172.17.3.[74:79] ansible_ssh_pass='123'
2.带参数的群组,vars底下为群组共同便变量,包括已定义变量和自定义变量:
[test1]
name1 ansible_ssh_host=192.168.1.[20:50]
[test1:vars]
ansible_ssh_user=root ansible_ssh_pass="1234"testvar="test"
eg
[az06]
172.18.3.[40:43]
[az07]
172.18.3.[93:99]
[az06:vars]
ansible_ssh_user=root ansible_ssh_pass=123
[az07:vars]
ansible_ssh_user=root ansible_ssh_pass=123
ansible常用命令
ansible all -i hosts -m MOD_NAME -a MOD_ARGS
表示调用什么模块,使用模块的那些参数
command:在远程主机执行命令;不支持|管道命令(shell支持)
command模块为ansible默认模块,不指定-m参数时,使用的就是command模块; comand模块比较简单,常见的命令都可以使用,但其命令的执行不是通过shell执行的,所以,像这些 “<”, “>”, “|”, and "&"操作都不可以,当然,也就不支持管道; 缺点:不支持管道,没法批量执行命令;
eg:
ansible all -a "ls –al /tmp/resolv.conf"
copy:复制文件到远程主机,可以改权限等
eg:
`ansible test -m copy -a "src=/root/test dest=/home/testcopy mode=640"`
mode=640 设置权限
对shell模块的使用可以分成两块:
- 如果待执行的语句少,可以直接写在一句话中,如上例。
- 如果在远程待执行的语句比较多,可写成一个脚本,通过copy模块传到远端,然后再执行;但这样就又涉及到两次ansible调用;对于这种需求,ansible已经为我们考虑到了,script模块就是干这事的;
3)scripts模块使用scripts模块可以在本地写一个脚本,在远程服务器上执行:
ansible all -i hosts -m script -a "/etc/ansible/net.sh"
eg(常用):
ping网
ansible all -i hosts -m ping
批量拷贝
ansible all -i hosts -m copy -a 'src=/root/update_packages dest=/root/'
批量重启
ansible all -i hosts -m shell -a 'systemctl restart openstack-nova-compute'