Ansible模块说明

格式:ansible [主机清单] -m [模块] -a '[命令]'

查看主机清单列表

ansible webservers --list


前提说明

  • -o参数表示单行显示
  • 主机清单可以写成IP,并且可以使用 192.168.111.* 这种形式

Ping模块

ansible webservers -m ping -o


Ansible中一共有三个命令模块,分别是command模块、shell模块和scripts模块。利用命令模块,Ansible可以控制在客户端设备上执行指定的命令

Command模块

command模块是Ansible的默认模块,当我们使用Ansible时,可以不使用-m参数来指定command。不建议使用Command模块,因为Command模块多符号都不支持(例如$符号),缺陷很大

ansible webservers -m command -a 'ls /opt'

 

Shell模块

和Command模块类似,虽然shell模块也不是所有符号都支持,但是总比command好

ansible webservers -m shell -a 'echo $HOSTNAME' -o

Script模块

Script模块的作用是在远程主机上运行ansible服务器上的脚本

ansible webservers -m script -a 'test.sh'


Copy模块

将ansible主机上的文件复制到远程主机(src为本地路径,dest为远程主机路径)

注:若复制的是目录,若目录下面没有任何东西将无法被复制到远程主机,只有当目录下面存在文件或者目录才可以。并且若指定的远程主机目录不存在,则会自行创建

ansible web01 -m copy -a "src=/opt/test dest=/opt"

Fetch模块

将远程的主机某个文件复制到我们ansible主机上(src为远程主机路径,dest为本地)

注:不可以复制目录。并且若指定到的我们ansible主机上的目录不存在,则会自行创建

ansible web01 -m fetch -a 'src=/opt/msg.txt dest=/data/'


Files模块

Files模块的作用是对远程主机进行文件或目录的增删操作

创建文件(touch)

注:目标主机的文件目录必须存在

ansible web01 -m file -a 'path=/opt/msg.txt state=touch'

创建目录(directory

注:递归创建

ansible web01 -m file -a 'path=/data/test state=directory'

删除文件或目录(absent

ansible web01 -m file -a 'path=/data state=absent'

更改文件或目录的属性

ansible web01 -m file -a 'path=/startKa.sh group=bin mode=600'


unarchive模块

将压缩文件复制至远程主机并解压(src为压缩文件路径,dest为远程主机路径)

注:远程主机目录必须存在。如果压缩文件远程主机上有,则不需要复制,在后面加上copy=no即可

ansible web01 -m unarchive -a 'src=/opt/test.tar.gz dest=/opt/'

archive模块

将远程主机文件进行打包(path为要压缩的文件路径,dest为压缩过后放置的路径,并指定压缩的格式)

ansible web01 -m archive -a 'path=/opt/test dest=/opt/test.tar.gz'


Hostname模块

设置远程主机的主机名

ansible web01 -m hostname -a 'name=node1'


Cron模块

参数说明:

##########时间参数
minute参数:设置分钟(0-59,*,*/2),当不使用此参数时,分钟设定位的值默认为”*”
hour参数:设置小时(0-23,*,*/2),当不使用此参数时,小时设定位的值默认为”*”
day参数:设置日(0-31,*,*/2),当不使用此参数时,日设定位的值默认为”*”
month参数:设置月(1-12,*,*/2),当不使用此参数时,月设定位的值默认为”*”
weekday参数:设置周(0-6或1-7,*),当不使用此参数时,周几设定位的值默认为”*”
special_time参数:special_time 参数的可用值有 reboot(重启后)、yearly(每年)、annually(每年,与yearly相同)、monthly(每月)、weekly(每周)、daily(每天)、hourly(每时)
注意:当上述时间单位设定参数都未指定时,计划任务的时间设定默认会被设定为”* * * * *”,这样表示每秒都会执行一次计划任务

user参数:新建任务计划的用户,当不使用此参数时,默认为管理员用户
job参数:计划执行的命令或者脚本
name参数:设置计划任务的名称,计划任务的名称会以注释的形式显示,当不指定计划任务的名称时,ansible 会默认为计划任务加入注释,注释的内容为 #Ansible: None,在一台机器中,计划任务的名称应该具有唯一性,方便我们以后根据名称修改或删除计划任务
state参数:当计划任务有名称时,我们可以根据名称修改或删除对应的任务,当删除计划任务时,需要将 state 的值设置为 absent
disabled参数:当计划任务有名称时,我们可以根据名称使对应的任务”失效”或”生效”,该参数的使用还需要同时指定任务的job和时间的设定,需能够完全对应上
backup参数:如果此参数的值设置为 yes,那么当修改或者删除对应的计划任务时,会先对计划任务进行备份,然后再对计划任务进行修改或者删除,具体的备份文件名称会在返回信息的 backup_file 字段中看到,推荐将此此参数设置为 yes

创建远程主机的定时任务,若定时任务名称已存在,则会变成修改操作

#我这里随便写了一个每周一至周五1点18分删除/opt/test文件

ansible web01 -m cron -a "hour=1 minute=18 weekday=1-5 name='delete test' job='rm -rf /opt/test'" 

查看远程主机的定时任务

ansible web01 -m shell -a 'crontab -l'

禁用或开启远程主机的某个定时任务,其实就是将其加上注释或去掉注释(原命令上增加disabled=yes则为禁止,启用定时任务的话就是disabled=no)

ansible web01 -m cron -a "hour=1 minute=18 weekday=1-5 name='delete test' job='rm -rf /opt/test' disabled=yes" 

删除远程主机上的某个定时任务

ansible web01 -m cron -a 'name="delete test" state=absent'

备份远程主机上的某个定时任务

#当我们修改定时任务或删除定时任务时加上backup=yes可以对其定时任务先进行一个备份的操作

ansible web01 -m cron -a "hour=1 minute=18 weekday=1-5 name='delete test' job='rm -rf /opt/testJob' backup=yes"


Yum模块

远程主机下载软件

ansible web01 -m yum -a 'name=httpd state=present'

远程主机卸载软件

ansible web01 -m yum -a 'name=httpd state=absent'


Service模块

远程主机启停服务,enable代表是否开机自启

ansible web01 -m service -a 'name=httpd state=started'

ansible web01 -m service -a 'name=httpd state=started enable=yes'

ansible web01 -m service -a 'name=httpd state=stopped'

ansible web01 -m service -a 'name=httpd state=reloaded'


Group模块

远程主机创建组

ansible web01 -m group -a 'name=nginx'

远程主机删除组

ansible web01 -m group -a 'name=nginx state=absent'

User模块

参数说明:

name参数:这个是必须参数,指定要操作用户的名称
group参数:指定用户所在的基本组
shell参数:指定用户默认登陆shell
uid参数:指定用户uid,一般不做设置
comment参数:用作用户的注释信息
state参数:指定用户是否在远程机器,有2个可选值。默认是present,用户存在远程机器上,absent删除远程机器上的用户
remove参数:当我们删除用户,也就是state参数值是absent的时候。默认是不会删除家目录的。也就是remove值默认是no,如果要删除家目录remove值yes
password参数:用于设置用户密码 ,但是这个密码不是明文的,而是加密后的和/etc/shadow文件中密码字段一样 

远程主机创建用户,若指定组,组需要事先存在

ansible web01 -m user -a 'name=nginx uid=2048 group=nginx'

远程主机删除用户

ansible web01 -m user -a 'name=nginx state=absent remove=yes'


Lineinfile模块

代替sed命令修改远程主机上的文件内容

参数说明:

path/dest: 目标文件绝对路径+文件名,必须参数
line: 替换/插入的内容
regexp: 待匹配内容
insertbefore: 匹配行前面插入
insertafter: 匹配行后面插入
state: 删除匹配行,需要将值设为absent,默认值present
create: 当要操作的文件并不存在时,是否创建对应的文件(yes/no)
backup: 可用于修改或删除时的操作,默认为no,yes则会对原文件进行一个备份,备份路径会以backup字段输出
backrefs:yes/no
1.backrefs为no时,如果没有匹配,则添加一行line。如果匹配了,则把匹配内容替被换为line内容,默认为no
2.backrefs为yes时,如果没有匹配,则文件保持不变。如果匹配了,把匹配内容替被换为line内容

替换文件内容,若匹配的内容不存在,则会在底部将line内容插入

ansible web01 -m lineinfile -a "path=/etc/selinux/config regexp='^SELINUX=' line='SELINUX=disabled'"

匹配行前面插入内容

ansible web01 -m lineinfile -a "path=/etc/selinux/config insertbefore='^SELINUX=' line='#你好'"

删除文件内容,删除开头为'#你'的行

ansible web01 -m lineinfile -a "path=/etc/selinux/config state=absent regexp='#你'"


Setup模块

查看远程主机上的主机信息

ansible web01 -m setup

不过单纯只使用上方命令的话,输出的内容会很多,建议搭配filter选择信息进行过滤

ansible web01 -m setup -a "filter=ansible_machine"

常用信息如下:

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个数(只显⽰总的个数)

 

 

posted @ 2022-05-27 12:45  RFAA  阅读(88)  评论(0编辑  收藏  举报