ansible常见模块使用
一、特性
幂等值: 一个任务执行一次和执行n此的效果一样,不因重复执行带来意外
模块化:调用特定的模块,完成特定任务
有Paramiko,PyYAML,Jinja2 (模板语言) 三个关键模块
支持自定义模块
部署简单,基于SSH
支持playbook编排任务
无需代理
Ansible 主要组成部分
USER 普通用户
CMDB(配置管理数据库) API调用
公有云私有云API调用
USER -> Ansible Playbook -> Ansible
利用ansible实现管理的方式
Ad-Hot ansible命令,主要用于临时命令使用场景
Ansible-playbook主要用于长期规划好的,大型项目场景
安装和模块使用
服务端
yum -y install ansible
ssh-keygen
ssh-copy-id -i 远程主机
ansible-doc -s 模块名 查看模块的用法
ansible all --list-hosts 查看能被管理的主机
配有配置ssh的时候也可以手动输入密码执行
ansible ip -m ping -k (验证信息在一定时间内是有缓存的)
-u 指定远程执行命令的用户,默认是root
-b 代理旧版的sudo
--become-user=UserName 指定sudo的用户,默认是root
-K 提示输入sudo的口令
二、常见模块使用
ansible的host-pattern
逻辑与
ansible "websever:&dbserver" -m ping
在webserver组并且在dbserver组中的主机
逻辑非
ansible 'websever:!dbserver' -m ping
在webserver组不在在dbserver组中的主机
正则表达式
综合逻辑
ansible命令执行
1. 加载自己的配置文件
2.加载自己对应的模块文件
3.通过ansible将模块或命令生成对应的临时py文件,并将文件传输至远程服务器对应执行用户$/home/tmp/...
4.给文件+x权限
5.执行并返回结果
6.删除临时py文件,退出
ansible使用示例
以wang用户执行ping存活检测
ansible all -m ping -u wang -k
以wang sudo至root执行ping存活检测
ansible all -m ping -u wang -b -k
以wang sudo至ivy用户执行ping存活检测
ansible all -m ping -u wnag -k -b --become-user=ivy
以wang sudo至root用户执行ls
ansible all -m command -u wang -a 'ls /root' -b become-user=root -k -K
补充配置文件修改的两个地方
host_key_checking=False 检查对应服务器的host_key, 建议取消注释
log_path=/var/log/ansible.log 日志文件
模块使用
查看模块帮助信息
ansible-doc -s 模块名称
command:在远程主机执行命令,默认模块,可忽略-m 选项
command
此模块是默认的可以不写
ansible all -m command -a 'ls /data'
却换到目录里面在执行
ansible all -m command -a 'chdir=/data ls'
如果文件存在就不执行,不存在就执行
ansible all -m command -a 'creates=/etc/fstab ls'
如果文件不存在就执行
ansible all -m command -a 'remove=/etc/fstab ls'
shell:和command相似,用shell执行命令
给用户改密码
ansible all -m shell -a 'echo ivy | passwd --stdin wang'
查看主机名
ansible all -m shell -a 'echo $HOSTNAME'
script: 在远程主机上运行ansible服务器上的脚本
ansible all -m script -a '/script/script.sh'
copy: 从主控端复制文件到远程主机
ansible all -m copy -a 'src=/etc/fstab dest=/data'
复制时改权限
ansible all -m copy -a 'src=/etc/fstab dest=/data mode=600 owner=wang group=bin backup=yes'
指定内容,直接生成目标文件
ansible all -m copy -a "content='内容' dest=/data/file.txt"
fetch: 从远程端抓取文件过来,和copy相反,但目前只支持文件
ansible all -m fetch -a 'src=/etc/fstab dest=/data'
抓过来的文件,会以远程主机ip命令生成一个文件夹,文件放在此文件夹下
file: 修改远程主机上已存在的文件属性
ansible all -m file -a 'path=/data/fstab owner=wang mode=700'
创建软连接, 需要指明基于哪个文件来创建,创建的文件放在哪里
ansible all -m file -a 'src=/data/fstab path=/data/fstab.link state=link'
创建空文件
ansible all -m file -a 'path=/data/f1.txt state=touch'
删除文件
ansible all -m file -a 'path=/data/f1.txt state=absent'
清空文件夹下的所有,一般要注意了,除了挂载点删不了别的都能删
ansible all -m file -a 'path=/data/ state=absent'
unarchive: 解压缩
1. 将ansible主机上的压缩包在 本地加压后传到远程主机上,设置copy=yes
2. 将远程主机上的某个压缩包解压到指定路径下,设置copy=no
src: 源路径
dest: 远程主机上的目标路径
mode: 设置解压后的文件权限
传压缩包的过程中顺便解包
ansible all -m unarchive -a 'src=/root/fstab.tar.gz dest=/data/ owner=wang mode=700'
解远程压缩包
ansible all -m copy -a 'src=fstab.tar.gz dest=/data/'
ansible all -m unarchive -a 'src=/data/fstab.tar.gz dest=/data/ copy=no'
archive: 打包压缩
ansible all -m archive -a 'path=/etc/sysconfig dest=/data/sysconfig.tar.bz2 format=bz2 owner=wang mode=0777'
path: 代表要打包的路径
dest: 代表打包后存放的路径
format: 代表达包的方式
hostname: 管理主机名, 针对单个主机
ansible 192.63.1.1 -m hostname -a 'centos'
cron: 计划任务
支持时间: minute hour day month weekday
创建计划任务
ansible all -m cron -a "minute=*/5 job='/usr/sbin/ntpdate name=synctime'"
禁用计划任务
ansible all -m cron -a "minute=*/5 job='/usr/sbin/ntpdate name=synctime disabled=true'"
删除计划任务
ansible all -m cron -a "minute=*/5 job='/usr/sbin/ntpdate name=synctime state=absent'"
yum: 管理包
ansible all -m yum -a 'name=httpd state=present' 安装
ansible all -m yum -a 'name=httpd state=absent' 删除
service: 管理服务
ansible all -m service -a 'name=httpd state=stopped' 停止服务
ansible all -m service -a 'name=httpd state=started enabled=yes' 启用服务
ansible all -m service -a 'name=httpd state=reloadded' 重载包
ansible all -m service -a 'name=httpd state=restarted' 重启服务
user: 管理用户
ansible all -m user -a 'name=user1 comment="test user" uid=2088 home=/app/user1 group=root'
组要事先已经存在的 否则会报错
创建系统用户
ansible all -m user -a 'name=sysuser1 system=yes home=/app/sysuser'
删除用户
ansible all -m user -a 'name=user1 state=absent remove=yes'
remove=yes: 代表连家目录也一并删除
group: 管理组
ansible all -m group -a 'name=testgroup system=yes'
ansible all -m group -a 'name=testgroup state=absent'
工具
ansible-galaxy: 把别人写好的role下载下来
ansible-pull: 推送命令至远程,效率无限提升,对运维要求比较高
ansible-ploybook
ansible-console: 交互式运行
ansible-valut: 管理加密yml文件
ansible-vault [create|decrypt|edit|encrypt|rekey|view]
创建新文件 解密 编辑 加密 修改口令 查看