命令模块的应用
ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) "执行什么动作"
-
command:在一个远程主机上执行一个命令,默认模块
ansible ip -m command -a "hostname"
- 有些符号无法识别:<、>、|、;、and、&
-
shell:在节点上执行命令,没有无法识别的
ansible -m shell -a "cd /tmp;pwd"
- 利用shell执行脚本
- 编写脚本
- 脚本发送远程主机
- 修改权限
- 执行脚本
- 利用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]