ansible中的常用模块

命令模块

1.shell模块

是ansible模块中最强大的模块,同时也是最不建议使用的模块

shell是不能保证幂等性

ansible node1 -m shell -a '参数=值 参数=值 ’
常用参数:
chdir:改变当前工作目录,默认是在被控端用户的家目录下
$ ansible node1 -m shell -a ‘chdir=/tmp pwd’
creates:一个文件名,当该文件存在,则该命令不执行
removes:一个文件名,当该文件不存在,则该命令不执行

2.command模块

command模块:该模块通过-a跟上要执行的命令可以直接执行,不过命令里如果有带有如下字符部分则执行不成功 “ “<”, “>”, “|”, “&” ;
如果不指定模块,则默认是command模块

3.raw模块

raw模块:用法和shell模块一样,也可以执行任意命令,就像在本机执行一样;和command、shell模块不同的是其没有chdir、creates、removes参数;

4.scritp模块

将管理端的shell 在被管理主机上执行,其原理是先将shell 复制到远程主机,再在远程主机上执行。
ansible node1 -m script -a ‘file.sh’

ansible常用模块

1.file模块

file模块主要用于远程主机上的文件操作,file模块包含如下选项:
path:必选项,定义文件/目录的路径
state:
file:查看文件状态,默认选项,若文件不存在,也不会被创建,会报错文件不存在
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新时间戳
absent:删除目录、文件或者取消链接文件
directory:如果目录不存在,创建目录
link:创建软链接
hard:创建硬链接
owner:定义文件/目录的属主
group:定义文件/目录的属组
mode:定义文件/目录的权限
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

2.copy模块

默认是将主控端的文件复制到被控端
复制文件到远程主机,copy模块包含如下选项:
src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/“来结尾,则只复制目录里的内容,如果没有使用”/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
dest:必选项。要将源文件复制到的远程主机的绝对路径。
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代“src”,可以直接设定指定文件的值
others:所有的file模块里的相关文件属性选项都可以在这里使用
remote_src:复制远程主机的文件, 取值为yes|no,默认是no

3.yum_repository 模块

使用yum_repository管理yum仓库,其选项有:
file:配置文件的名字,不包含.repo
name:yum仓库的名字
description:仓库的描述信息
baseurl:yum源地址
enabled:是都开启yum仓库,yes/on
gpgcheck:是否检查软件包的完整性,yes/no
gpgkey:公钥地址
state: present是创建和修改 ,absent是删除

使用示例
ansible node1 -m yum_repository -a ‘file=media name=BaseOS description= BaseOS baseurl=file:///media/BaseOS enabled=yes gpgcheck=yes gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release’

ansible node1 -m yum_repository -a ‘baseurl=file:///mnt/cdrom/BaseOS enabled=yes file=rhel gpgcheck=yes gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release name=BaseOS description=“rhel8.4 BaseOS”’
ansible node1 -m yum_repository -a ‘baseurl=file:///mnt/cdrom/AppStream enabled=yes file=rhel gpgcheck=yes gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release name=AppStream description=“rhel8.4 BaseOS”’

4.yum模块

使用yum包管理器来管理软件包,其选项有:
name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径
state:状态(present安装,absent卸载,latest最新版本)

ansible node1 -m yum -a 'name="*" state=latest'  将所有的软件包升级到最新版本
ansible node1 -m yum -a 'name="@Development Tools" state=present'  安装包组

5.service模块

service restart vsftpd
name: 服务的名字
state: 对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
enabled: yes 设置开机启动

6.systemd模块

systemctl restart vsftpd
name: 服务的名字
state: 对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
enabled: yes 设置开机启动
daemon-reload: yes 重新加载配置文件,相当于执行:systemctl daemon-reload

ansible node1 -m service -a 'name=httpd state=started enabled=yes'  #首次启动started
ansible node1 -m service -a 'name=httpd state=restarted enabled=yes' #变更httpd配置文件,restarted
ansible node1 -m service -a 'name=httpd state=restarted enabled=yes daemon-reload=yes'	#如果变更了systemd的配置文件,则需要daemon_reload

7.cron模块

用于管理计划任务,包含如下选项:
name:该任务的描述
state:确认该任务计划是创建还是删除,present创建,absent删除
user:以哪个用户的身份执行
day:日(1-31,,/2,……)
hour:小时(0-23,,/2,……)
minute:分钟(0-59,,/2,……)
month:月(1-12,,/2,……)
weekday:周(0-7,,……)
job:要执行的任务,依赖于state=present
cron_file:指定配置文件,例如/etc/crontab,/etc/cron.d/

ansible node1 -m cron -a 'name="test" hour=10,12 minute=*/5 job="echo hello"'
ansible node1 -m cron -a 'name="test" hour=10,12 minute=*/5 job="echo hello" user=admin cron_file=/etc/crontab'
ansible node1 -m cron -a 'name="test" hour=10,12 minute=*/5 job="echo hello" user=admin cron_file=/etc/cron.d/test'

8.user模块

user模块请求的是useradd, userdel, usermod 三个指令:
state:是创建还是删除
name:指定用户名
uid:指定用的uid
group:指定用户属组
groups:指定用户的附加组
comment:定义用户描述信息
create_home:是否创建家目录 yes|no
home:指定用户的家目录,需要与createhome配合使用
shell:指定用户的shell环境
password:指定用户的密码
remove:当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r

使用示例:
ansible test -m user -a ‘name=johnd comment=“John Doe” uid=1040 group=admin’
ansible test -m user -a ‘name=james shell=/bin/bash groups=admins,developers append=yes’
ansible test -m user -a ‘name=johnd state=absent remove=yes’ #删除用户

#需要说明的是,在指定password参数时,不能使用明文密码,因为后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,所以需要先将密码字符串进行加密处理。然后将得到的字符串放到password中即可。
#使用下面的密码创建用户

echo “yutian” | openssl passwd -1 -salt $(< /dev/urandom tr -dc ‘[:alnum:]’ | head -c 32) -stdin

$1 4 P 4 P l F u E 4P4PlFuE 4P4PlFuEur9ObJiT5iHNrb9QnjaIB0
ansible all -m user -a ‘name=foo password=“$1 4 P 4 P l F u E 4P4PlFuE 4P4PlFuEur9ObJiT5iHNrb9QnjaIB0”’

9.group模块

goup模块请求的是groupadd, groupdel, groupmod 三个指令:
gid:指定组id
name:指定组名
state:创建还是删除组,选项:present|absent

10.fetch模块

fetch模块与copy模块正好相反,copy是把主控端的文件复制到被控端,而fetch则是把被控端的文件复制到主控端。并且在主控端指定的目录下,以被控端主机名的形式来组织目录结构。常用选项有:
src:被控端要复制的文件地址,只能是文件,不能是目录
dest:主控端存放文件的地址
flat:默认为no,表示在主控端目录下以被控端主机名的形式来组织目录结构。yes表示不会以被控端主机名的形式来组织目录结构,dest必须以/结尾。

使用示例:
ansible node1 -m fetch -a 'src=/etc/shadow dest=test’
ansible node1 -m fetch -a ‘src=/etc/shadow dest=test/ flat=yes’

11.get_url模块

该模块主要用于从http、ftp、https服务器上下载文件(类似于wget),主要有如下选项:
url:下载的URL
url_password、url_username:主要用于需要用户名密码进行验证的情况
dest:目标目录
mode:权限
owner:拥有人
group:拥有组

使用示例:
ansible node1 -m get_url -a ‘url=https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/Packages/samba-4.9.1-8.el8.x86_64.rpm dest=/tmp/samba.rpm mode=0440’

12.unarchive模块

用于解压文件,模块包含如下选项:
src:默认指定的是主控端的压缩文件路径
dest:远程主机上的一个路径,即文件解压的路径
remote_src:如果为yes,则文件会从主控端端复制到被控端。否则会直接尝试从被控端查找文件。默认为no。
owner:解压后文件或目录的属主
group:解压后的目录或文件的属组
mode:解决后文件的权限
creates:指定一个被控端的文件名,当该文件存在时,则解压指令不执行
list_files:如果为yes,则会列出压缩包里的文件,默认为no

示例:
ansible node1 -m unarchive -a 'src=ansible.tgz dest=/tmp/dir01/ #将主控端的压缩文件解压到被控端
ansible node1 -m unarchive -a ‘src=/root/etc.tgz dest=/tmp/ remote_src=yes’ #将被控端的压缩文件解压到被控端

ansible node1 -m unarchive -a ‘src=https://example.com/nginx.tgz dest=/usr/local remote_src=yes’ #

13.synchronize模块

使用rsync同步文件,其参数如下:
src:要复制的文件,目录以/结尾表示包含目录本身,目录不以/结尾表示不包含目录本身
dest:目录路径
archive: 归档,相当于同时开启recursive(递归)、links、perms、times、owner、group、-D选项都为yes ,默认该项为开启
compress:是否开启压缩,默认是yes
rsync_opts:rsync的选项,选项之间用逗号隔开,例如-a,-v,-z等等
delete: 删除不存在的文件,默认no
dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议
mode: push或pull 模块,push模式的话,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件,默认是push。

ansible node1 -m synchronize -a ‘src=/home/admin/ansible dest=/tmp/ archive=no rsync_opts=-rogt,–delete’

使用示例:
ansible node1 -m synchronize -a 'src=/etc dest=/tmp/’
ansible node1 -m synchronize -a 'src=/etc dest=/tmp/ archive=no rsync_opts=-r links=yes’
push 在主控端执行
ansible node1 -m synchronize -a 'archive=yes dest=/data/ src=/data/ rsync_opts=-vz mode=push’
以上等同于rsync -avz /data/* 192.168.40.131:/data/
push 在被控端执行
ansible node1 -m synchronize -a ‘archive=yes compress=yes dest=/data/ src=/data/ rsync_opts=-vz mode=pull’
以上等同于rsync -avz 192.168.40.130:/data/* /data/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值