包管理: 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模块调用的都是/bin/sh指令
用法基本和command一样,通过/bin/sh进行执行。
ansible all -m shell -a hostname -o
ansible all -m shell -a ‘uname -r’ -f 5 -o
该模块通过-a跟上要执行的命令可以直接执行,命令里带上以下字符则执行不成功,($HOME,<,>,|,&)。
command模块参数选项:
用法和shell模块一样,其他也可以执行任意命令,就像在本机执行一样。
yum_repository模块可以帮助我们管理远程主机的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
参数选项:
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’
参数选项:
ansible all -m service -a 'name=httpd state=started
enabled=yes'
参数选项:
/*创建一个组,并定义为系统组*/
ansible all -m group -a 'name=rhce system=yes'
参数选项:
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'
参数选项:
state | 说明 |
---|---|
directory | 如果目录不存在,创建目录 |
file | 即使文件不存在,也不会被创建 |
link | 创建软链接 |
hard | 创建硬链接 |
touch | 如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间 |
absent | 删除目录、文件或者取消链接文件 |
附加:
/*创建软链接*/
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'
参数选项:
ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts
owner=root group=root mode=644 backup=yes'
参数选项:
/*从被管理节点复制到管理节点*/
ansible all -m fetch -a 'src=/etc/hosts dest=/opt'
文件内容修改、在某行前面添加一行、在某行后面添加一行、删除某一行、末尾加入一行、替换或添加某一行。
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 基于rsync命令批量同步文件,做这个模块的时候,必须保证远程服务器上有rsync这个命令。
参数选项:
/*将全部节点的/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 “
参数选项:
/*创建计划任务*/
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"
/*开启防火墙*/
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下载到本地节点上
参数选项:
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'
参数选项:
查看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'
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'
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'
参数选项:
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'
参数选项:
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】—— 组件模块(示例练习)