Ansible基本使用和常用模块实践
上两周跟大家初步介绍了运维自动化工具Ansible的原理和安装部署流程,本周带大家了解Ansible的常用命令和常用模块实践。
一、Ansible基本使用
#确认与主机连通性
ansible all -m ping
ansible all -m setup
#查看分组主机
ansible redis --list-hosts
#列出Ansible支持的模块
ansible-doc -l
#查看模板帮助
ansible-doc yum
#在本机执行命令,默认为command模块
ansible 127.0.0.1 -a "w"
#在所有主机上执行命令
ansible all -a "w"
#-k 提示输入密码
ansible kvm -a "w" -k
#使用shell模块来执行
ansible all -m shell -a "w" -k
#指定hosts文件
ansible all -i ./hosts -a "w" -k
#限定执行的主机
ansible all -i ./hosts -a "w" -k --limit=ceph-node-1
#帮助文档
ansible-doc -l
#ansible能够管理docker
ansible-doc -s docker
#后台异步执行,给出ansible_job_id
ansible all -m ping -B 3600 -P 0
#查询ansible_job_id运行结果
ansible all -m async_status -a "jid=326810328667.1198"
#列出每个阶段涉及到的主机
ansible-playbook infrastructure-playbooks/purge-cluster.yml --list-host
#列出任务清单
ansible-playbook infrastructure-playbooks/purge-cluster.yml -i hosts --list-tasks
1.2 Ansible使用通配符
ansible 192.168.0.* -m ping
ansible *server -m ping
#或:在redis或在docker的主机
ansible redis:docker -m ping
#与:既在redis也在docker组中的主机
ansible 'redis:&docker' -m ping
#非:在redis组中但不能docke组中
ansible 'redis:!docker' --list-hosts #注意只能用单引号
二、Ansible常用模块实践
下面,大家一起学习使用Ansible常用模块,实现各项小功能。默认路径为家目录路径:如
/root
2.1 command
不支持$ | > >>
注意-a 后面用单引号,而不是双引号
#当文件/root/aa.sh存在时,执行后面的命令
ansible all -a 'removes=/root/aa.sh cat /root/aa.sh'
#当文件/root/aa.sh不存在时,执行后面的命令
ansible all -a 'creates=/root/aa.sh cat /root/aa.sh'
#组合举例:
ansible all -a 'removes=/root/aa.sh creates=/root/bb.sh cat /root/aa.sh'
#改变目录
ansible all -a 'chdir=/root ls'
2.2 shell
支持特殊符号
支持command所有命令
ansible all -m shell -a 'echo $HOSTNAME'
2.3 script
远程执行本地脚本
ansible all -m script -a "/root/aa.sh"
2.4 copy
复制本地文件到远端,同时可指定覆盖备份、权限、属主
ansible all -m copy -a 'src=c.txt dest=/root/c.txt backup=true'
#生成内容到远端
ansible all -m copy -a 'content=d\ne dest=/root/d.txt'
2.5 fetch
从远端取文件到本地,只支持单个文件
以主机文件夹进行分类
ansible all -m fetch -a 'src=/var/log/messages dest=/data/'
[root@ansible data]# tree
├── 192.168.0.202
│ └── var
│ └── log
│ └── messages
└── 192.168.0.220
└── var
└── log
└── messages
#取单个文件,但不分类
ansible 192.168.0.202 -m fetch -a 'src=/root/aa.sh dest=/data/ flat=true'
2.6 file
创建文件夹、文件
#创建目录
ansible all -m file -a "path=/tmp/2019 state=directory"
#创建文件
ansible all -m file -a "path=/tmp/abc.txt state=touch"
#删除文件或递归删除文件夹
ansible all -m file -a "path=/root/c.txt state=absent"
ansible all -m file -a 'path=/tmp/2019 state=absent'
#创建软链接
ansible all -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"
2.7 hostname
修改主机名
ansible 192.168.0.220 -m hostname -a 'name=redis'
2.8 cron计划任务
管理计划任务
#查看或编辑计划任务
crontab -e
crontab -l
ansible all -m cron -a "name=test_reboot special_time=reboot job='ls /root'"
#分时日月周,未定义则为*
ansible all -m cron -a 'minute=*/2 job="/usr/bin/wall warning" name=test2019'
ansible all -m cron -a "name=test state=absent"
#禁用,name与job参数必选
ansible all -m cron -a 'disabled=true name=test2019 job="/usr/bin/wall warning"'
2.9 yum模块
支持yum的系统,包管理工具
前提:系统的yum配置正确,如已添加epel源
#安装,disable_gpg_check、update_cache更新缓存可选
ansible all -m yum -a 'name=httpd disable_gpg_check=yes update_cache=yes'
ansible all -a 'rpm -qa httpd'
ansible all -m yum -a 'name=httpd state=absent'
#安装本地rmp包,需要先copy到目标主机
#循环安装
- name: Install packages
name: "{{ item }}"
state: present