文章目录
组件模块
包管理: 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】—— 组件模块(示例练习)