目录
一、ansible——自动化运维工具
1.1 Ansible 自动运维工具特点
1.2 Ansible 运维工具原理
二、安装ansible
三、ansible命令模块
3.1 command模块
3.2 shell模块
3.3 cron模块
3.4 user模块
3.5 group 模块
3.6 copy模块
3.7 file模块
3.8 ping模块
3.9 service模块
3.10 script模块
3.11 yum模块
3.12 setup模块
Ansible 自动运维管理工具优点:
#192.168.19.2
hostname ansible
su
#192.168.19.3
hostname webserver
su
#192.168.19.4
hostname mysql
su
systemctl stop firewalld
setenforce 0
#安装epel扩展源
yum -y install epel-release
yum -y install ansible
#树型查询工具
yum -y install tree
tree /etc/ansible
vim /etc/ansible/hosts
#配置主机清单
[webservers]
192.168.19.3
[dbservers]
192.168.19.4
#生成密钥对
ssh-keygen -t rsa
123123
123123
ssh-copy-id [email protected]
ssh-copy-id [email protected]
每次查询都需要输入密钥
#可以使用ssh-agent代理
ssh-agent bash
ssh-add
123123
ansible webserver -m command -a 'date'
命令格式:ansible [主机] [-m 模块] [-a args]
#列出所有已安装的模块,按q退出
ansible-doc -l
#所有主机执行data命令,其中all可以换成IP或者分类名称,例:192.168.19.2 / webserver
ansible all -m command -a 'date'
#不加-m模块,则默认使用command模块
ansible all -a 'date'
ansible all -a 'ls /'
//常用的参数:
chdir:在远程主机上运行命令前提前进入目录
creates:判断指定文件是否存在,如果存在,不执行后面的操作
removes:判断指定文件是否存在,如果存在,执行后面的操作
ansible all -m command -a "chdir=/home ls ./"
//在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能)
ansible-doc -s shell
ansible dbservers -m shell -a 'echo 123456 | passwd --stdin test'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}") | cut -d " " -f2'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print \$2}")'
//在远程主机定义任务计划。其中有两种状态(state):present表示添加(可以省略),absent表示移除。
ansible-doc -s cron #按 q 退出
//常用的参数:
minute/hour/day/month/weekday:分/时/日/月/周
job:任务计划要执行的命令
name:任务计划的名称
ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'
ansible webservers -a 'crontab -l'
ansible webservers -m cron -a 'name="test crontab" state=absent' #移除计划任务,假如该计划任务没有取名字,name=None即可
user模块是请求三条指令,useradd,userdel,usermod
#模块信息
ansible-doc -s user
#创建用户
ansible all -m user -a 'name=yh'
#查看用户账户信息
ansible all -m 'command' -a 'tail -1 /etc/passwd'
#移除指令
ansible all -m user -a 'name="yh" state=absent'
//用户组管理的模块
ansible-doc -s group
ansible dbservers -m group -a 'name=mysql gid=306 system=yes' #创建mysql组
ansible dbservers -a 'tail /etc/group'
ansible dbservers -m user -a 'name=test01 uid=306 system=yes group=mysql' #将test01用户添加到mysql组中
ansible dbservers -a 'tail /etc/passwd'
ansible dbservers -a 'id test01'
对文件进行有效的复制
ansible-doc -s copy
ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.back'
ansible dbservers -a 'ls /opt'
ansible dbservers -a 'cat /opt/fstab.back'
ansible dbservers -m copy -a 'content="hello lic" dest=/opt/test.txt'
ansible dbservers -a 'cat /opt/test.txt'
ansible-doc -s file
ansible dbservers -m user -a 'name=mysql system=yes'
ansible dbservers -m file -a 'owner=mysql group=mysql mode=600 path=/opt/test.txt'
ansible dbservers -a 'ls -l /opt/test.txt'
#创建
#ansible dbservers -m file -a 'path=/opt/abc.txt state=touch'
ansibledbservers -m file -a 'src=/opt/test.txt path=/opt/test.txt.link state=link'
ansible dbservers -a 'ls -l /opt'
#移除文件/opt/test.txt
ansible dbservers -m file -a 'path=/opt/test.txt state=absent'
ansible all -m ping
ansible-doc -s service
#192.168.19.3执行
yum -y install httpd
ansible webserver -a 'systemctl status httpd'
ansible webserver -m service -a 'enabled=true name=httpd state=started'
systemctl status httpd
systemctl is-enabled httpd
ansible-doc -s script
vim test.sh
#!/bin/bash
echo 'hello ansible from script' > /opt/script.txt
chmod +x test.sh
ansible all -m script -a 'test.sh'
ansible-doc -s yum
ansible dbservers -m yum -a 'name=httpd'
ansible dbservers -a 'rpm -q httpd'
ansible dbservers -m yum -a 'name=httpd state=absent'
ansible dbservers -a 'rpm -q httpd'
ansible-doc -s setup
#获取MySQL组主机的facts信息
ansible dbservers -m setup