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]
创建新文件 解密 编辑 加密 修改口令 查看

 

posted @ 2020-07-25 11:47  ivy_wang  阅读(572)  评论(0编辑  收藏  举报