【Ansible】—— Ad-Hoc命令详解

文章目录

  • 组件模块
  • 一、执行命令
    • shell模块
    • command模块
    • raw模块
  • 二、包管理
    • yum_repository模块
    • yum模块
  • 三、服务管理
    • service模块
  • 四、用户管理
    • group模块
    • user模块
  • 五、文件操作
    • file模块
    • copy模块
    • fetch模块
    • linefile模块
    • synchronize模块
  • 六、计划任务
    • cron模块
  • 七、防火墙管理
    • firewalld模块
  • 八、网络工具
  • 九、磁盘管理
    • parted模块
    • lvg模块
    • lvol模块
    • filesystem模块
    • mount模块
  • 示例练习


组件模块

包管理: yum_repository模块yum模块
执行命令: shell模块command模块raw模块
服务管理: service模块
用户管理: group模块user模块
文件操作: file模块copy模块fetch模块linefile模块synchronize模块
计划任务: cron模块
防火墙管理: firewalld模块
网络工具: get_url模块
磁盘管理: parted模块lvg模块lvol模块filesystem模块


ansible (all/主机名/主机组名) -m 模块命令 -a ‘执行命令’

一、执行命令

shell模块

shell模块调用的都是/bin/sh指令

用法基本和command一样,通过/bin/sh进行执行。

ansible all -m shell -a hostname -o
ansible all -m shell -a ‘uname -r’ -f 5 -o

command模块

该模块通过-a跟上要执行的命令可以直接执行,命令里带上以下字符则执行不成功,($HOME,<,>,|,&)。
command模块参数选项:

  • creates:一个文件名,当该文件存在,则该命令不执行
  • free_from:要执行的linux命令
  • chdir:在执行命令之前,先切换到该指定的目录
  • removes:一个文件名,当该文件不存在,则该选项不执行
  • executable:切换shell来执行指令,该执行路径必须是一个绝对路径
    command模块不是调用shell的指令,所以没有bash的环境变量,也不能使用shell的一些操作方式,其他和shell没有区别。

raw模块

用法和shell模块一样,其他也可以执行任意命令,就像在本机执行一样。

二、包管理

yum_repository模块

yum_repository模块可以帮助我们管理远程主机的yum仓库

参数选项:

  • name:必须参数,用于指定要操作的唯一的仓库ID,也就是“ *.repo ”配置文件中每个仓库对应的“中括号”内的仓库ID。
  • baseurl:此参数用于设置yum仓库的baseurl
  • description:此参数用于设置仓库的注释信息,也就是“ *.repo ”配置文件中每个仓库对应的“name字段”对应的内容
  • file:此参数用于设置仓库的配置文件名称,即设置“ .repo ”配置文件的文件名前缀,在不使用此参数的情况下,默认以name参数的仓库ID作为“ .repo ”配置文件的文件名前缀,同一个yum源可以存在多个yum源
  • enabled:用于设置是否激活对应的yum源,此参数默认值为yes,表示启用对应的yum源,设置为no,表示不启用对应的yum源
  • gpgcheck:用于设置是否开启rpm包验证功能,此参数默认值为no,表示不启用包验证,设置为yes,表示启用包验证
  • gpgcakey:当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥
  • state:默认值为 present,当值设置为 absent 时,表示删除对应的yum源

yum包示例:

file(name).repo
[name]
name=description
baseurl=
enabled=yes
gpgcheck=no

ansible all -m yum_repository -a "name=AppStream description='RHEL8.0 - AppStream' baseurl='http://192.168.150.200/rhel8/AppStream/' gpgcheck=no file=rhel8"
ansible all -m shell -a 'cat /etc/yum.repos.d/rhel8.repo'		//验证
/*列出一台机器上的信息*/
master | CHANGED | rc=0 >>
[AppStream]
name = RHEL8.0 - AppStream
baseurl = http://192.168.150.200/rhel8/AppStream/
gpgcheck = 0

yum模块

参数选项:

  • config_file:yum的配置文件
  • disable_gpg_check:关闭gpg_check
  • disablerepo:不启用某个源
  • enablerepo:启用某个源
  • name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径
  • state:状态(present/installed,absent/removed,latest),默认为present

present和installed等效,表示确保软件已经安装;
absent和removed等效,表示删除的意思;
latest表示安装yum中最新的版本;

yum和dnf用法类似

安装软件包
ansible all -m yum -a ‘name=httpd state=latest’
卸载软件包
ansible all -m yum -a ‘name=httpd state=absent’

三、服务管理

service模块

参数选项:

  • arguments:给命令行提供一些选项
  • enabled:是否开机启动 yes|no
  • name:必选项,服务名称
  • pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运
  • runlevel:运行级别
  • sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
  • state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
ansible all -m service -a 'name=httpd state=started
enabled=yes'

四、用户管理

group模块

参数选项:

  • name参数:必须参数,用于指定要操作的组名称。
  • state参数:用于指定组的状态,两个值可选,present,absent,默认为present,设置为absent 表示删除组。
  • gid参数:用于指定组的gid。
  • system参数:系统组。
/*创建一个组,并定义为系统组*/
ansible all -m group -a 'name=rhce system=yes'

user模块

参数选项:

  • name=:用户名
  • uid:用户的uid
  • group:所属组,即私有组
  • groups:附加组
  • state:状态
ansible all -m user -a ‘name=tom password=“123456”’
/*删除用户,连同家目录一起*/
ansible webservers -m user -a 'name=tom state=absent remove=yes'
/*创建用户,指定附加组*/
ansible webservers -m user -a 'name=tom groups=rhce'
/*为bob用户生成密钥对*/
ansible webservers -m user -a 'name=tom generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa'

五、文件操作

file模块

参数选项:

  • force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
  • group:定义文件/目录的属组
  • mode:定义文件/目录的权限
  • owner:定义文件/目录的属主
  • path:必选项,定义文件/目录的路径
  • recurse:递归的设置文件的属性,只对目录有效
  • src:要被链接的源文件的路径,只应用于state=link的情况
  • dest:被链接到的路径,只应用于state=link的情况
  • state:
state 说明
directory 如果目录不存在,创建目录
file 即使文件不存在,也不会被创建
link 创建软链接
hard 创建硬链接
touch 如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent 删除目录、文件或者取消链接文件

附加:

  • path:指明对哪个文件做管理。也可以使用dest和name。
  • 创建文件的符号链接:src=:指明源文件,path=:指明符号链接文件路径
  • setype:修改selinux的安全性上下文
/*创建软链接*/
ansible all -m file -a 'src=test.txt dest=link_test state=link'
/*修改文件属主、属组及权限*/
ansible all -m file -a 'path=/share owner=root group=root mode=1777'
/*修改selinux的安全上下文*/
ansible all -m file -a 'path=/mnt/rhce state=directory mode=666 owner=root group=root setype=samba_share_t'

copy模块

参数选项:

  • backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
  • content:用于替代"src",可以直接设定指定文件的值
  • dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
  • directory_mode:递归的设定目录的权限,默认为系统默认权限
  • force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
  • others:所有的file模块里的选项都可以在这里使用
  • src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/“来结尾,则只复制目录里的内容,如果没有使用”/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts
owner=root group=root mode=644 backup=yes'

fetch模块

参数选项:

  • dest 目标地址
  • src 源
/*从被管理节点复制到管理节点*/
ansible all -m fetch -a 'src=/etc/hosts dest=/opt'

linefile模块

文件内容修改、在某行前面添加一行、在某行后面添加一行、删除某一行、末尾加入一行、替换或添加某一行。

ansible all -m lineinfile -a 'path=/etc/selinux/config regexp="^SELINUX=" line=SELINUX=enforcing'
其中regexp为要修改的源内容的正则匹配,line为修改后的内容

/*在某一行前面插入一行*/
ansible all -m lineinfile -a 'dest=test.txt insertbefore="test(.*)" line="one"'
/*某一行后面加入一行*/
ansible all -m lineinfile -a 'dest=test.txt insertafter="test(.*)" line="end"'
/*删除匹配的行*/
ansible localhost -m lineinfile -a 'path=test.txt regexp="test(.*)" state=absent'

synchronize模块

synchronize 基于rsync命令批量同步文件,做这个模块的时候,必须保证远程服务器上有rsync这个命令。

参数选项:

  • src:源文件
  • dest: 目标文件
  • archive : 是否采用归档模式同步,保证源文件和目标文件属性一致
  • rsync_opts : 使用rsync参数
  • –exclude=*.log : 此处为忽略.log结尾的文件, 必须和rsync_opts使用例(rsync_opts=–exclude=.txt) exclude前面有两个短杠
/*将全部节点的/etc/hosts 目录拉取到主控节点的/tmp 目录下*/
ansible all -m synchronize -a 'src=/etc/hosts dest=/tmp mode=pull'
注意:mode默认为push,要拉取到主控节点,需要配置mode为pull

/*将本地/tmp目录内除.txt结尾的数据无差异且保持属性的同步到对端/mnt目录无差异化*/
ansible all -m syncronize -a "src=/tmp/ dest=/mnt archive=yes delete=yes rsync_opts=--excloud=*.txt “

六、计划任务

cron模块

参数选项:

  • backup:对远程主机上的原任务计划内容修改之前做备份
  • cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划
  • day:日(1-31,/2,……)
  • hour:小时(0-23,/2,……)
  • minute:分钟(0-59,/2,……)
  • month:月(1-12,/2,……)
  • weekday:周(0-7,*,……)
  • job:要执行的任务,依赖于state=present
  • name:该任务的描述
  • special_time:指定什么时候执行,参数:
  • reboot,yearly,annually,monthly,weekly,daily,hourly
  • state:确认该任务计划是创建还是删除
  • user:以哪个用户的身份执行
/*创建计划任务*/
ansible all -m cron -a " name='crontab test' minute=5 hour=1 job='echo test'"
/*删除计划任务*/
ansible all -m cron -a " name='crontab test' state=absent"

七、防火墙管理

firewalld模块

/*开启防火墙*/
ansible all -m service -a 'name=firewalld state=started enabled=true'
/*允许http服务*/
ansible all -m firewalld -a 'service=http permanent=true immediate=true state=enabled'
/*允许端口*/
ansible all -m firewalld -a 'port=80/tcp permanent=true immediate=true state=enabled'
/*富规则*/
ansible all -m firewalld -a 'rich_rule="rule family=ipv4 source address=192.168.150.0/24 service name=http accept" permanent=true immediate=true state=enabled'
/*端口转发*/
ansible all -m firewalld -a 'rich_rule="rule family=ipv4 forward-port port=443 protocol=tcp to-port=8443" permanent=true immediate=true state=enabled'
/*masquerade*/
ansible webservers -m firewalld -a 'masquerade=yes state=enabled permanent=yes immediate=yes'

八、网络工具

用途: 用于将文件或软件从http、https或ftp下载到本地节点上

参数选项:

  • dest:指定将文件下载的绝对路径—必须
  • url:文件的下载地址(网址)—必须
  • url _username: 用于http基本认证的用户名
  • url _password:用于http基本认证的密码
  • validate_certs:如果否,SSL证书将不会验证。这只应在使用自签名证书的个人控制站点上使用
  • owner:指定属主
  • group:指定属组
  • mode:指定权限
ansible all -m get_url -a 'url=http://rpmfind.net/linux/epel/playground/8/Everything/x86_64/os/Packages/s/sl-5.02-1.epel8.playground.x86_64.rpm dest=/test'

九、磁盘管理

parted模块

参数选项:

  • device:磁盘路径
  • number:命名为第几个区域
  • part_start:分区的开始节点
  • part_end:分区的结束节点
查看nvme0n2磁盘信息
lsblk | grep nvme0n2
/*创建一个1G的磁盘*/
ansible all -m parted -a 'device=/dev/nvme0n2 number=1 part_end=1GiB state=present'
/*创建一个lvm分区*/
ansible all -m parted -a 'device=/dev/nvme0n2 number=2 flags=lvm part_start=1GiB part_end=2GiB state=present'
/*查看磁盘详细信息
fdisk /dev/nvme0n2
然后输入命令p*/
/*删除已分配的区域*/
ansible all -m parted -a 'device=/dev/nvme0n2 number=2 state=absent'

lvg模块

ansible all -m lvg -a 'pvs=/dev/nvme0n2p1 vg=vg1'
/*查看vg分区*/
vgs vg1
ansible all -m parted -a 'device=/dev/nvme0n2 number=2 flags=lvm part_start=1GiB part_end=2GiB state=present'
ansible all -m lvg -a 'pvs=/dev/nvme0n2p2 vg=vg2 pesize=16'

lvol模块

ansible all -m lvol -a 'vg=vg1 lv=lv1 size=512'
/*查看lv分区*/
lvs /dev/vg1/lv1
ansible localhost -m lvol -a 'vg=vg1 lv=lv2 size=512 pvs=/dev/nvme0n2p3'

filesystem模块

参数选项:

  • dev:目标块设备
  • force:在一个已有文件系统的设备上强制创建
  • fstype:文件系统的类型
  • opts:传递给mkfs命令的选项
ansible all -m lvg -a 'vg=vg2 state=absent'
ansible all -m filesystem -a 'dev=/dev/nvme0n2p2 fstype=ext4 force=yes'
ansible all -m filesystem -a 'dev=/dev/vg1/lv1 fstype=xfs force=yes'

mount模块

参数选项:

  • src:需要挂载的存储设备或文件信息
  • path:挂载点
  • force:在一个已有文件系统的设备上强制创建
  • state:
    present/mounted 挂载,present修改/etc/fstab开机自动挂载,mounted立即挂载并且修改fstab文件
    absent/unmounted 卸载,absent立即卸载并删除fstab里面信息,unmounted立即卸载但不删除fstab里面信息
ansible all -m mount -a 'src=/dev/sr0 path=/mnt/dev fstype=iso9660 state=present'
//使用UUID挂载
ansible all -m mount -a 'src=UUID=ee73dd09-6d24-4d01-b2ba-00da1305229a path=/data fstype=ext4 state=mounted'

示例练习

关于组件模块的练习:【Ansible】—— 组件模块(示例练习)

你可能感兴趣的:(Ansible,运维,linux)