运维自动化发展历程及技术应用
ansible命令执行过程
- 加载自己的配置文件 默认/etc/ansible/ansible.cfg
- 加载自己对应的模块文件,如command
- 通过ansible将模块或命令生成对应的临时py文件,并将该 文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
- 给文件+x执行
- 执行并返回结果
- 删除临时py文件, sleep 0退出
执行状态:
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败
ansible常用模块
Command:在远程主机执行命令,默认模块,可忽略-m选项
- ansible srvs -m command -a ‘service vsftpd start’
- ansible srvs -m command -a ‘echo magedu |passwd --stdin wang’不成功
- 此命令不支持 $VARNAME < > | ; & 等,用shell模块实现
Shell:和command相似,用shell执行命令
- ansible srv -m shell -a ‘echo magedu |passwd –stdin wang’
- 调用bash执行命令 类似 cat /tmp/stanley.md | awk -F‘|’ ‘{print $1,$2}’
- &> /tmp/example.txt 这些复杂命令,即使使用shell也可能会失败,解决办法:写到脚本时, copy到远程,执行,再把需要的结果拉回执行命令的机器
Copy:从服务器复制文件到客户端
示例:将主机/etc/fstab文件复制到websrvs组中所有机器上,改名为fstab2,并将所有者改为xie。
若目标存在,则默认覆盖,并生成备份
在websrvs组中的目标主机上的/data/目录下生成selinux文件,并且内容为SELINUX=disable\nSELINUXTYPE
Fetch:从客户端取文件至服务器端, copy相反,目录可先tar
示例:抓取目标主机上的fstab2文件到本机的/data/目录下
【src只能抓取对文件,不能抓取目录,若要抓取目录,可先对目录打包,然后再抓取】
示例:将目标主机的/data目录打包到/root/data.rar,然后再将打包后的data.rar抓取到目标主机
[root@ansible data]#ansible websrvs -m fetch -a 'src=/root/data.rar dest=/data'
File:设置文件属性
创建空文件 :
#ansible websrvs -m file -a 'name=/data/file1 state=touch mode=600'
针对改空文件创建软连接:
#ansible websrvs -m file -a 'src=/data/file1 dest=/data/file1-link state=link'
创建文件夹:
#ansible websrvs -m file -a 'path=/data/dir1 state=directory'
删除文件夹:
#ansible websrvs -m file -a 'path=/data/dir1 state=absent'
清空目录数据:
#ansible websrvs -m file -a 'path=/data/ state=absent'
Hostname:管理主机名
将目标主机主机名改为centos66
#ansible 192.168.36.6 -m hostname -a 'name=centos66'【这样的更改是永久更改,直接改了文件名配置文件】
Cron:计划任务
查询计划任务:
#ansible websrvs -a 'crontab -l'
创建计划任务:为目标主机创建计划任务,每十分钟,自动和172.20.0.1同步时间,并为该任务起名为synctime
#ansible websrvs -m cron -a 'minute=*/10 job="ntp 172.20.0.1 &> /dev/null" name=synctime'
禁用计划任务:(加disable=true)
#ansible websrvs -m cron -a 'disabled=true minute=*/10 job="ntp 172.20.0.1 &> /dev/null" name=synctime'
删除计划任务:(加state=absent)
#ansible websrvs -m cron -a 'state=absent minute=*/10 job="ntp 172.20.0.1 &> /dev/null" name=synctime'
Yum:管理包
查看包是否安装:
#ansible websrvs -a 'rpm -q httpd'
安装包:(可以同时安装多个包,包名中间用逗号隔开即可)
#ansible websrvs -m yum -a 'name=httpd'
卸载包:(可以同时卸载多个包,包名中间用逗号隔开即可)
#ansible websrvs -m yum -a 'name=httpd state=absent'