ansible-doc -s 模块名 (用来查看用法说明)
1.ansible自动化管理工具
[root@node1 ~]# yum info ansible 查看yun源里ansible的版本号
[root@node1 yum.repos.d]# yum -y install epel-release
[root@node1 yum.repos.d]# yum -y install ansible
ansible是属于一次性任务,不是持续性的
安装之后不需要启动服务
2./etc/ansible/ansible.cfg (主配置文件)
#inventory = /etc/ansible/hosts #主机列表配置文件
#library = /usr/share/my_modules/ #库文件存放目录
#remote_tmp = ~/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp = ~/.ansible/tmp #本机临时命令执行目录
#forks = 5 #默认并发数
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
#ask_pass = True
#remote_port = 22
#host_key_checking = False #检查对应服务器的host_key,建议取消注释
#log_path = /var/log/ansible.log #日志文件,建议使用
#module_name = command #默认模块,可以修改为shell模块
3.被管理机的地址 /etc/ansible/hosts (主机清单文件)
如果被管理的主机过多可以选择分类,一般用[]来注释标签
如果目标主机用了非默认的ssh端口,还可以在主机名称之后使用冒号加端口号来标明
如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机
范例:
ntp.magedu.com
[webservers]
www1.magedu.com:2222
www2.magedu.com
[dbservers]
db1.magedu.com
db2.magedu.com
[websrvs]
www[1:100].example.com
[dbsrvs]
db-[a:f].example.com
[appsrvs]
10.0.0.1[1:100]
4.常用命令
/usr/bin/ansible Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
/usr/bin/ansible-doc Ansible 模块功能查看工具
/usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块 的官网平台,基于网络的
/usr/bin/ansible-playbook Ansible 定制自动化的任务集编排工具
/usr/bin/ansible-pull Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)
/usr/bin/ansible-vault Ansible 文件加密工具
/usr/bin/ansible-console Ansible基于Linux Consoble界面可与用户交互的命令执行工具
其中,我们比较常用的是/usr/bin/ansible和/usr/bin/ansible-playbook
5.通过ssh协议,实现远程主机的配置管理,应用部署,任务执行
如果被管路主机的虚拟机比较多,可以用脚本实现
利用sshpass批量实现基于key验证
ssh-keygen -f /root/.ssh/id_rsa -P ''
NET=192.168.20
export SSHPASS=123456
for IP in {22,23};do
sshpass -e ssh-copy-id $NET.$IP
done
6.ansible常用模块
command模块
功能:在远程主机上执行命令,默认模块,可忽略-m选项
注意:此命令不支持 $VARNAME <> | ; &等,用shell模块实现
例子:
[root@node1 ~]# ansible websrvs -m command -a 'chdir=/etc cat centos-release' 或 [root@node1 ~]# ansible websrvs -m command -a 'cat /etc/centos-release'
注意:chdir的意思是直接cd到/etc下
7.shell模块
功能:和command相似。用shell执行命令
例子:[root@node1 ~]# ansible websrvs -m shell -a 'echo $HOSTNAME'
192.168.20.22 | CHANGED | rc=0 >>
node2
192.168.20.23 | CHANGED | rc=0 >>
node3
扩展:修改默认模块
在主配置文件中的这一串#module_name = command 修改成module_name = shell就可以了
就是将默认的command改成shell模块,不用重启服务
8.Script模块
功能:在远程主机上运行ansible服务器上的脚本
例子:[root@node1 ~]# ansible websrvs -m script -a '/data/test.sh'
运行结束之后,被远程的主机会把脚本自动删除
远程主机的脚本在[root@node2 ~]# vim .ansible/tmp/ansible-tmp-1623120230.12-4051-84352792118513/test.sh
9.Copy模块
功能:从ansible服务器主控端复制文件到远程主机
#如目标存在,默认覆盖,此处指定先备份,也可以拷贝文件夹
例子:[root@node1 ~]# ansible websrvs -m copy -a 'src=/data/test.sh dest=/tmp/test.sh owner=root mode=600 backup=yes'
说明:src是ansible主机的目录 dest是目标主机的目录 wener是目标主机的用户 mode是文件的权限 backup是复制一份
#指定内容。直接生成目标文件
例子:[root@node1 ~]# ansible websrvs -m copy -a "content='test line1 est line2' dest=/tmp/test.sh"
说明:content是生成新的目标文件content是文件内容
#复制/etc/下的文件,不包括/etc/目录自身
例子:[root@node1 ~]# ansible websrvs -m copy -a 'src=/etc/selinux dest=/backup'
10.Fetch模块
功能:从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录
例子:[root@node1 ~]# ansible all -m fetch -a 'src=/etc/redhat-release dest=/data/
说明:将远程主机上的/etc/redhat-release文件,放入ansible的/data/目录下
11.Fire模块
功能:设置文件属性
例子:
#创建空文件夹,然后再创建文件
[root@node1 ~]# ansible all -m shell -a 'mkdir /data/'
[root@node1 ~]# ansible all -m file -a 'path=/data/ceshi.txt state=touch'
[root@node1 ~]# ansible all -m file -a 'path=/data/ceshi.txt state=absent' absent是删除的意思
[root@node1 ~]# ansible all -m file -a 'path=/data/ceshi.txt owenr=root mode=755'
#创建目录
[root@node1 ~]# ansible all -m file -a 'path=/data/mysql state=directory owner=root group=mysql'
说明:directory就是创建的意思 后面是指定的用户和所属组
#创建软连接
[root@node1 ~]# ansible all -m file -a 'path=/data/testfile dest=/data/testfile-link state=link'
12.unarchive模块
功能:解包压缩包
实现的两种方法:
1.将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes
2.将远程主机上的某个压缩包解压到指定目录下,设置copy=no 远程主机上面的操作,不涉及ansible服务端
参数:
copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件
src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
例子:[root@node1 data]# ansible all -m unarchive -a 'src=/data/etc.tar.gz dest=/data owner=zhang mode=0600'
13.hostname模块
功能:管理主机名
例子:[root@node1 data]# ansible 192.168.20.23 -m hostname -a 'name=node4'
14.cron模块
功能:计划任务
支持时间:minute hour day month weekday(分时日月周)
例子:
#备份数据库脚本
mysqldump -A -F --single-transaction --master-data=2 -q -uroot | gzip > /data/mysql_`date+%F_%T`.sql.gz
#创建任务
[root@node1 data]# ansible 192.168.20.22 -m cron -a "hour=2 minute=30 weekday=1-5 name='backup mysql' job=/data/mysql_backup.sh"
意思是说:周一至周五的2点30分执行一次mysql_backup.sh 任务的名字叫backup mysql
[root@node1 data]# ansible all -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &> /dev/null'name=Synctime"
#禁用计划任务
[root@node1 data]# ansible 192.168.20.22 -m cron -a "hour=2 minute=30 weekday=1-5 name='backup mysql' job=/data/mysql_backup.sh disabled=yes"
#启用计划
[root@node1 data]# ansible 192.168.20.22 -m cron -a "hour=2 minute=30 weekday=1-5 name='backup mysql' job=/data/mysql_backup.sh disabled=no"
#删除计划
[root@node1 data]# ansible 192.168.20.22 -m cron -a "name='backup mysql' state=absent"
15.yum模块
功能:管理软件包,只支持RHEL Centos fedora 不支持ubuntu其他版本
例子:
#安装http
[root@node1 data]# ansible all -m yum -a 'name=httpd'
#启动httpd
[root@node1 data]# ansible all -m shell -a 'systemctl start httpd'
#查看进程
[root@node1 data]# ansible all -m shell -a 'ps -ef | grep httpd'
#卸载httpd
root@node1 data]# ansible all -m yum -a 'name=httpd state=absent'
16.lineinfile模块
ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换。其实再ansible自身提供了两个模块:lineinfile模块和replace模块,可以方便的进行替换
功能:相当于sed,可以修改文件内容
例子:
[root@node1 data]# ansible all -m lineinfile -a 'path=/etc/selinux/config regexp="^SELINUX=" line="SELINUX=enforcing"'
[root@node1 data]# ansible all -m lineinfile -a 'path=/etc/fstab state=absent regexp="^#"'
17.replace模块
类似于sed命令,主要也是基于正则进行匹配和替换
例子:
[root@node1 data]# ansible all -m replace -a 'pash=/etc/fstab regexp="^(UUID.*)" replace="#1"'
意思是说:把/etc/fstab以UUID.开头的前面加#注释掉
[root@node1 data]# ansible all -m replace -a 'pash=/etc/fstab regexp="^#(.*)" replace="1"'
意思是说:去掉#号
18.setup模块
功能:收集每个远程主机的信息
例子:
[root@node1 data]# ansible 192.168.20.22 -m setup
[root@node1 data]# ansible 192.168.20.22 -m setup -a 'filter="ansible_distribution_major_version"'
[root@node1 data]# ansible 192.168.20.22 -m setup -a 'filter="ansible_python_version"'
[root@node1 data]# ansible 192.168.20.22 -m setup -a 'filter="ansible_processor_vcpus"'