Ansible的介绍
ansible是一种自动化运维工具,基于paramiko开发的,并且基于模块化工作,Ansible是一种集成IT系统的配置管理、应用部署、执行特定任务的开源平台,它是基于python语言,由Paramiko和PyYAML两个关键模块构建。集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的.
Ansible的基本价架构
Ansible的下载:
可以通过源码下载安装,也可以用yum安装,这里我用比较方便的yum安装。
yum -y install ansible
下载完成后,我们需要和被控主机相和呼应,这就用到了ssh无密码登陆,我的博客里有。做完这些后我们就需要在主机清单里添加被控主机的ip地址。
vim /etc/ansible/hosts 10.6.12.71#在最后一行添加主机IP地址
做完这些我们就可以通过ansible来控制其他主机了!
ansible 10.6.12.71 -m ping#查看其他主机网络状态
Ansible中比较重要的文件
/ect/ansible/ansible.cfg----主配置文件
/ect/ansible/hosts--------主机清单
/etc/ansible/roles/--------存放角色的目录。角色就是好多playbook的集合
/usr/bin/ansible------主程序,临时执行命令工具
/usr/bin/ansible-doc------查看配置模块,模块功能查看工具
/usr/bin/ansible- galaxy-------下载/上传优秀代码或Roles模块的官网平台
/usr/bin/ansible-playbook-----制定自动化任务,编排剧本
/usr/bin/absible-pull------远程执行命令工具
/usr/bin/ansible-vault----文件加密工具
/usr/bin/nsible-console-----基于console界面与用户交互的执行工具
Ansible调用基本模块
可以通过Ansible --help来查看怎么用这个命令。
ansible 10.6.12.71 -m ping -k#-m是指定调用什么模块,-k是交互输入口令,建议做ssh无密码登陆。
Anaible的文件之/etc/hosts,注意***在当ssh端口改变的是时候要指定ssh端口***
1.可以添加单个主机的IP地址
2.可以添加主机组,在主机组里再添加主机ip可以批量控制主机
3.进行命令测试
Ansible的主配置文件/etc/ansible/ansilnble.cng(一般保持默认)
[defaults] # some basic default values... #inventory = /etc/ansible/hosts#主机列表配置文件 #library = /usr/share/my_modules/#库文件存放目录 #module_utils = /usr/share/my_module_utils/#模块路径 #remote_tmp = ~/.ansible/tmp#临时py命令文件存放在远程主机目录 #local_tmp = ~/.ansible/tmp#本机的临时命令执行目录 #forks = 5#默认并发数 #poll_interval = 15 #sudo_user = root#默认sudo用户 #ask_sudo_pass = True#每次执行ansible敏玲是否询问ssh密码 #ask_pass = True #transport = smart #remote_port = 22 #module_lang = C #module_set_locale = False
#host_key_cheking=False#建议取消注释,检查对应服务器的host_key
#log_path=/var/log/ansible.log#日志文件建议启用
Ansible系列命令
ansible ansible-doc ansible- playbook ansible-vault
ansible-console ansible-galaxy ansible-pull
ansible-doc:显示模块帮助
ansible-doc [options] [modul..]
-a 显示所有模块的文档
-I, --list 列出可用模块
-s, --snippet显示指定模块的playbook片段
示例:
ansible-doc -|列出所有模块
ansible-doc ping查看指定模块帮助用法
ansible-doc -s ping 查看指定模块帮助用法
Ansible命令用法
例子:以下面这条命令为例,需要做ssh无密码登陆,然后需要给zr用户sudo的权限,这样才可以访问被控制端的目录文件等等
授权可以在visudo修改,将zr用户加入到%whell组中,免密登陆的时候就修改visudo,然后增加这个%wheel ALL=(ALL) NOPASSWD: ALL
ansible 10.612.56 -a 'la /root' -u zr -k -b -K
当有多个主机组需要执行操作时:
Ansible命令执行过程
1.加载自己的配置文件 默认/etc/ansible/ansible.cfg
2.加载自己对应的模块文件,如command
3.通过ansible将模块或命令生成对应的临时py文件,并将该文件传送至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/xxx.py文件
4.给文件+x执行
5.执行并返回结果
6.删除临时py文件,sleep 0退出
Ansible的相关模块:-m 指定模块默认是command
以command为例子:
- chdir#到一个目录下执行命令时需要这个ansible all -a 'chdir=/etc/fs cat /etc/fstab' Change into this directory before running the command. [Default: (null)] version_added: 0.6 - creates#将一个文件存在将不进行下面的操作ansible all -a 'createst=/etc/fs cat /etc/fstab' A filename or (since 2.0) glob pattern, when it already exists, this step will *not* be run. [Default: (null)] = free_form The command module takes a free form command to run. There is no parameter actually named 'free form'. See the examples! - removes#如果不存在将不执行后续命令ansible all -a 'removes=/etc/fs cat /etc/fstab' A filename or (since 2.0) glob pattern, when it does not exist, this step will *not* = free_form The command module takes a free form command to run. There is no parameter actually named 'free form'. See the examples! - removes A filename or (since 2.0) glob pattern, when it does not exist, this step will *not* be run. [Default: (null)] version_added: 0.8 - stdin Set the stdin of the command directly to the specified value. [Default: None] version_added: 2.4 - warn If command_warnings are on in ansible.cfg, do not warn about this particular line if set to `no'. [Default: yes] type: bool version_added: 1.8
但是commdel这个模块的缺点就是命令里不能有管道、重定向等符号无法处理,所以在需要的时候需要-m指定所需要的模块。
Shell模块:和command相似,用shell执行命令
Script:运行脚本
只需要在控制端写好要运行的脚本,Script就会自动给其他被控主机推送脚本。
ansible all -m script -a '/root/ansible/host.sh'
COPY模块:ansible-doc -s copy查看选项参数
例子:修改selinux的状态
[root@localhost ~]# ansible all -m copy -a 'src=/root/ansible/selinux dest=/etc/selinux/config backup=yes'
src是指定源 dest是指定目的 backup做复制的时候会备份
例子:在被控主机上直接生成文件
ansible all -m copy -a 'content="hello thanks " dest=/data/fs'#直接在被控主机生成内容为
hello thanks 的文件/data/fs1
Fetch模块:从客户端取文件至服务器端和cp是相反的
ansible src -m fetch -a “src=/root/a.sh dast=/data/scripts”
file模块:设置文件属性
重要的参数state:可以创建文件,目录,和软连接,具体和state的状态有关
ansible srv -m file -a "pas=/root/a.sh owner=wang mode=755" ansible web -m file -a 'src=/app/testfile dest=/app/testfile-like state=link'#创建软连接
ansible all -m file -a 'name=/data/g3 state=touch'#创建一个文件,对象是/data/g3
ansible all -m file -a 'name=/data/g3 state=absent'#删除一个文件也能删除文件夹,对象是/data/g3
ansible all -m file -a 'name=/data/g3 state=dirrectory'#创建一个文件夹,对象是/data/g3
unarchive模块:打包模块
archive模块:解包模块
hostname模块:修改主机名
ansible 192.168.157.131 -m hostname -a 'name=node'#把主机名改为node
cron模块:计划任务#和crontab -e 差不多
ansible all -m crom -a 'minute=* week=1,3,5 job="/usr/bin/wall FBIwaring" name=warningcron'#在这里name=的内容会写入定时任务的注释部分
ansible all -m crom -a 'disabled=ture job="/usr/bin/wall FBIwaring" name=warningcron'#关闭定时任务
删除任务
ansible all -m crom -a 'state=absent name=warningcron'
yum模块:
ansible all -m yum -a 'name=vsftpd'#list可以查看所有安装的包,如果是安装多个包的话可以用逗号隔开
ansible all -m yum -a 'name=vsftpd state=absent'#删除包
services模块:开机自启动设置,也可以启动服务
ansible all -m service -a 'name=vsftpd enabled=yes'#启动服务是state=start
user模块:管理用户
ansible srv -m user -a 'name=user1 comment="test user”uid= 2048 home=/app/user1 group=root'#comment是对用户的描述 ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1’#system系统信息 ansible srv -m user -a 'name=user1 state=absent remove=yes'#删除用户及家目录等数据
geoup模块:管理组
ansible srv -m group -a"name=testgroup system=yes' ansible srv -m group -a "name=testgroup state=absent"
Ansible-galaxy命令
连接http://aglaxy.ansible.com下载响应的roles(角色)角色就是许多playbook的组合,而playbook是调用许多模块的组合 列出所有安装的galaxy
ansible-galaxy list
安装galaxy
ansible-galaxy install geerlingguy.redis
删除galaxy
ansible-galaxy remove geerlingguy.redis
Ansible-pull命令
推送命令至远程,效率无限提升,对运维要求比较高