命令模块的应用
ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) "执行什么动作"
  • command:在一个远程主机上执行一个命令,默认模块
ansible ip -m command -a "hostname"
  • 有些符号无法识别:<、>、|、;、and、&
  • shell:在节点上执行命令,没有无法识别的
ansible -m shell -a "cd /tmp;pwd"
  • 利用shell执行脚本
  • 编写脚本
  • 脚本发送远程主机
  • 修改权限
  • 执行脚本
  • script:万能模块
  • 编写一个脚本
  • 运行ansible命令执行脚本
ansible -m script -a "./yum.sh"
  • 扩展
  • chdir:执行命令之前切换目录
ansible ip -m command -a "chdir=/tmp touch old.txt"
默认创建在家目录,加上chdir就是在切换的目录下创建文件
  • creates:如果文件存在则不执行命令
ansible ip -m command -a "creates=/tmp/hosts touch old.txt"
  • removes:如果文件存在则执行命令
ansible ip -m command -a "removes=/tmp/hosts chdir=/tmp touch old.txt"
  • free_from:-a参数后面必须写上一个合法的linux命令
文件类型的模块
  • copy:将数据信息进行批量分发
ansible ip -m copy -a "src=/etc/hosts dest=/etc/"
或进行重命名
ansible ip -m copy -a "src=/etc/hosts dest=/etc/hosts.bak"
  • owner、group设置文件传输过去后的属主、属组
ansible ip -m copy -a "src=/etc/hosts dest=/etc/ owner=oldboy group=oldboy"
  • mode:设置文件传输过去的权限
ansible ip -m copy -a "src=/etc/hosts dest=/etc/ mode=1777"
  • backup:对原文件进行备份,防止传输的文件覆盖原文件
ansible ip -m copy -a "src=/etc/hosts dest=/etc/ backup=yes"
  • content:创建一个文件并直接编辑文件信息
ansible ip -m copy -a "content='oldboy1234' dest=/etc/rsync.password"
  • remote_src::把客户端下src的文件复制到客户端的dest路径下
ansible ip -m copy -a "src='/tmp/old.txt' dest=/old remote_src=yes"
  • 复制目录信息的时候有斜线是将目录内容复制过去、没有斜线将目录本身也复制过去
  • fetch:将被控端数据传到管理端
#将172.16.1.31里/tmp/oldboy.txt拉取到本地tmp目录下
ansible 172.16.1.31 -m fetch -a "src=/tmp/oldboy.txt dest=/tmp"
  • file:设置文件属性信息
  • 基本用法
ansible ip -m file -a "dest=/etc/hosts owner=oldboy group=oldboy mode=666"
  • state:创建数据信息(文件 目录 链接文件)
  • =absent:删除数据信息
#文件
ansible ip -m file -a "dest=/old.txt state=absent"

#目录
ansible ip -m file -a "dest=/old state=absent"
  • =directory:创建一个目录信息
ansible ip -m file -a "dest=/old/old01/old02 state=directory"
  • =file:检测创建的数据是否存在,绿色存在,红色不存在
ansible ip -m file -a "dest=/old/old.txt state=file"
  • =hard:创建一个硬链接文件
ansible ip -m file -a "src=/old/1.txt dest=/old/old01/old_hard.txt state=hard"
  • =link:创建一个软链接文件
ansible ip -m file -a "src=/old/1.txt dest=/old/old01/old_link.txt state=link"
  • touch:创建一个文件信息
ansible ip -m file -a "dest=/old/1.txt state=touch"
安装卸载软件yum
ansible all -m yum -a "name=iotop state=installed"
  • name:指定安装软件名称
  • state:指定是否安装软件
  • installed:安装软件
  • absent:卸载软件
管理服务器的运行状态:service模块——停止、开启、重启
  • name:指定管理的服务名称
  • state:指定服务状态
  • started:启动
  • restarted:重启
  • stopped:停止
  • enable:指定服务是否开启自启动
ansible all -m service -a "name=nfs state=started enable=yes"
批量设置多个主机的定时任务信息:cron模块
  • minute:设置分钟信息(0-59)
  • hour:设置小时信息(0-23)
  • day:设置日期信息(1-31)
  • month:设置月份信息(1-12)
  • weekday:设置周信息(0-6)
  • job:用于定义定时任务需要干的事情
  • name:设置注释信息
  • state:
  • absent:删除定时任务
  • disable:是否注释定时任务(yes/no)

基本用法

ansible all -m cron -a "minute=0 hour=2 job='/usr/sbin/ntpdate ntpl.aliyun.com &>/dev/null'"

扩展用法:设置的时候加上注释,如果存在就不再新建任务

ansible all -m cron -a "name='time sync' minute=0 hour=2 job='/usr/sbin/ntpdate ntpl.aliyun.com &>/dev/null'"

删除定时任务

ansible all -m cron -a "name='time sync' state=absent"

PS:ansible可以删除的定时任务,只能是ansible设置好的定时任务

批量注释定时任务

ansible all -m cron -a "name='time sync' minute=0 hour=2 job='/usr/sbin/ntpdate ntpl.aliyun.com &>/dev/null' disbale=yes"
批量进行挂载服务:mount
  • src:需要挂载的存储设备或文件信息
  • path:指定目标挂载点目录
  • fstype:指定挂载时的文件系统类型
  • state
  • present/mounted:进行挂载
  • present:不会实现立即挂载,修改fstab文件,实现开机自动挂载
  • mounted:会实现立即挂载,并会修改fstab文件,开机自动挂载
absible 172.16.1.7 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=xfs state=mounted"
  • absent/unmounted:进行卸载
  • absent:会实现立即卸载,并且会删除fstab文件信息,禁止开机自动挂载
  • unmounted:会实现立即卸载,但是不会删除fstab文件信息
absible 172.16.1.7 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=xfs state=absent"
批量创建用户:user
ansible all -m user -a "name=oldboy uid=666 group=old"
  • 指定用户uid信息:uid
  • 指定用户组信息:
  • group:同时指定属组和其他组
  • groups:只指定其他组
  • 批量创建虚拟用户
ansible all -m user -a "name=rsync create_home=no shell=/sbin/nologin"
  • 创建用户并创建密码(或给已有的用户修改密码)
ansible all -m user -a  "name=old passwd=123456"

PS:利用ansible程序user模块设置用户密码信息,需要将密码明文信息转换为密文信息进行设置。上面的命令会报错

#查看密码信息
cat /etc/shadow
  • 生成密文密码信息方法
ansible all -i localhost, -m debug -a "msg={{ 'mypassword' | password_hash('sha512','mysecretsalt') }}"

mypassword:密码信息
mysecretsalt:加密校验信息
  • 执行命令
#设置密码为123456,加密校验信息为oldboy
ansible all -i localhost, -m debug -a "msg={{ '123456' | password_hash('sha512','oldboy') }}"

localhost | SUCCESS => {
    "msg": "$6$oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1"
}


#将生成的加密密码去生成用户并设置密码,注意要用单引号,双引号会解析$,以为是变量
ansible all -m user -a  ’name=old passwd=$6$oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1‘

#客户端测试
su - old
输入密码:123456
获取内置变量模块:setup
  • 获取全部内置变量
ansible rsync -m setup
  • 筛选进行查看
ansible rsync -m setup -a "filter=ansible_hostname"
  • 常见主机信息:

参数

解释

ansible_all_ipv4_addresses

仅显示ipv4的信息

ansible_devices

仅显示磁盘设备信息

ansible_distribution

显示是什么系统,例:centos,suse等

ansible_distribution_major_version

显示是系统主版本

ansible_distribution_version

仅显示系统版本

ansible_machine

显示系统类型,例:32位,还是64位。

ansible_eth0

仅显示eth0的信息

ansible_hostname

仅显示主机名

ansible_kernel

仅显示内核版本

ansible_lvm

显示lvm相关信息

ansible_memtotal_mb

显示系统总内存

ansible_memfree_mb

显示可用系统内存

ansible_memory_mb

详细显示内存情况

ansible_swaptotal_mb

显示总的swap内存

ansible_swapfree_mb

显示swap内存的可用内存

ansible_mounts

显示系统磁盘挂载情况

ansible_processor

显示cpu个数(具体显示每个cpu的型号)

ansible_processor_vcpus

显示cpu个数(只显示总的个数)

  • 获取子信息方法:
    ansible_eth0[ipv4]