五、adhoc与模块
5.1 adhoc
Ansible支持两种方式执行任务,一种是adhoc,通过命令行的方式执行Ansible任务,一次只能执行一个任务。还有一种是playbook,通过playboot文件来批量执行任务。
- adhoc的语法
ansible 选择主机 -m 模块名 -a '模块的参数'
- 举例
ansible all -m file -a 'path=/opt/test.txt state=touch'
注意:参数与参数之间要用空格隔开,参数的值用=号连接。
5.2 模块帮助
Ansible安装后,内置了很多模块,能够满足我们绝大部分的需求,那么我们应该如何使用模块呢?Ansible提供了一个命令供我们查询模块的文档帮助。
ansible-doc
- 查询所有的模块
ansible-doc -l
- 查看模块的参数介绍
ansible-doc -s file
- 查看模块更详细的介绍,包括playbook示例(常用)
ansible-doc file
/EX # 搜索关键词EXAMPLE,查找使用示例
5.3 命令执行模块
命令执行模块用于远程执行命令,有4个模块可以实现远程执行命令的功能。
-
command模块:该模块通过-a跟上要执行的命令可以直接执行命令,不过命令里如果有带有如下字符部分则执行不成功
><&|
; -
shell模块:用法基本和command一样,不过其是通过/bin/sh进行执行,所以shell模块可以执行任何命令就像在本机执行一样;
-
raw模块:用法和shell模块一样,也可以执行任意命令,就像在本机执行一样,和command、shell模块不同的是其没有chdir、 creates、 removes参数;
-
script模块:将管理端的shell脚本在被管理主机上执行,其原理是先将shell脚本复制到远程主机,再到远程主机上执行。
模块对比
模块名 | 参数支持 | 限制 |
---|---|---|
command | 支持 | 部分特殊字符不支持 |
shell | 支持 | 无 |
raw | 不支持 | 无 |
script | 支持 | 只能是shell脚本 |
shell模块adhoc示例
- chdir:执行命令前,先切换到指定路径
- removes:判断文件是否不存在,如果不存在则不执行命令。
- creates:判断文件是否存在,如果存在则不执行命令。
5.4 文件管理模块
5.4.1 file模块
file模块用于管理文件,可以实现创建、删除文件/目录,给文件进行软链接、硬链接。
可以实现rm
、ln
、chmod
、chown
命令的功能。
参数说明
- path:文件的路径
- state:动作
- file:查看文件的属性
- touch:创建文件
- directory:创建目录
- absent:删除文件/目录
- link:创建软链接
- hard:创建硬链接
- owner:指定文件/目录的拥有者
- group:指定文件/目录的拥有组
- mode:指定文件/目录的权限
- src:指定链接的源文件,用于动作是link和hard的时候
- dest:指定链接的目标文件,用于动作是link和hard的时候
- force:是否强制生成链接文件,当源文件不存在时,或链接目标文件存在时
adhoc示例
# 创建文件
ansible all -m file 'path=/opt/test.txt state=touch'
# 创建文件,并指定拥有组为devops,权限为600
ansible all -m file -a 'path=/opt/test1.txt state=touch group=devops mode=600'
# 创建目录
ansible all -m file 'path=/opt/dir state=directory'
# 删除文件
ansible all -m file ''path=/opt/test.txt state=absent'
# 创建软链接
ansible all -m file 'src=/web dest=/var/www/html/web state=link'
5.4.1 copy模块
copy模块用于拷贝文件,默认是将主控端的文件拷贝到被控。可以实现cp
命令的功能。
参数说明
-
src:复制文件/目录的源文件路径,复制目录时,如果路径使用
/
来结尾,则只复制目录里的内容,如果没有/
结尾,则复制整个目录。 -
dest:复制文件/目录的目标文件路径。
-
force:当目标文件存在时是否覆盖,值为yes|no,默认为yes。
-
backup:覆盖目标文件前是否先备份文件,值为yes|no。
-
content:用于替代src,可以将内容写到目标文件。
-
remote_src:src是主控端,还是被控端,值为yes|no,yes表示src是被控端的文件,no表示src是主控端的文件,默认是no。
-
...:所有file模块的参数都可以用。
adhoc示例
# 将主控端的/etc/hostname拷贝到所有被控端的/opt/目录下
ansible all -m copy -a 'src=/etc/hostname dest=/opt/'
# 将被控端的/etc/passwd拷贝到被控端的/opt/目录下
ansible all -m copy -a 'src=/etc/hostname dest=/opt/ remote_src=yes'
# 在被控端写入一个网页文件,内容为hello world !
ansible all -m copy -a 'content="hello world!" dest=/var/www/html/index.html'
5.4.3 unarchive模块
unarchive模块用于解压文件到被控端。可以实现tar
、gunzip
、bunzip2
、unzip
命令的功能。
参数说明
- src:被解压的源文件
- dest:解压到被控端哪个位置
- remote_src:如果为yes,则源文件在被控端查找,如果为no,则源文件在主控端查找
- owner:解压后文件的拥有者
- group:解压后文件的拥有组
- mode:解压后文件的权限
- list_files:列出压缩包里的内容
adhoc示例
# 将主控端的/opt/etc.tar解压到被控端的/opt/下,并列出压缩包内的文件
ansible all -m unarchive -a 'src=/opt/etc.tar dest=/opt/ list_files=yes'
# 将被控端的/opt/etc.tar解压到被控端的/tmp/下
ansible node1 -m unarchive -a 'src=/opt/etc.tar dest=/tmp/ remote_src=yes'
5.4.4 fetch模块
fetch模块用于将被控端的文件下载到主控端。
参数说明
- src:被控端要被下载的文件名,不能为目录
- dest:下载到主控端哪个路径,必须以/结尾
- flat:下载的文件不放在被控端的主机名目录中,默认为no,会创建一个被控端主机名的目录,并将文件保存到此目录中。
adhoc示例
# 下载所有被控端主机的/etc/hostname文件
ansible all -m fetch -a 'src=/etc/hostname dest=/opt/'
5.4.5 get_url模块
get_url模块用于下载网络文件。可以实现wget
命令的功能。
参数说明
- url:下载地址
- url_username:当网站需要认证时,认证的用户名
- url_password:当网站需要认证时,认证的密码
- dest:保存文件到哪
- mode:保存的时候指定权限
- owner:保存的时候指定拥有者
- group:保存的时候指定拥有组
adhoc示例
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'
5.4.6 synchronize模块
synchronize模块用于同步文件。可以实现rsync
命令的功能。
参数说明
-
src:要同步的源目录,目录以
/
结尾表示包含目录本身,目录不以/
结尾表示不包含目录本身 -
dest:目录路径
-
mode:值为push或pull,push为上传模式,将本机文件同步到被控端,pull为下载模式,将被控端的文件同步到主控端。
-
archive:是否开启归档,相当于同时开启recursive(递归)、links、perms、 times、owner、group、-D选项都为yes,默认该项为开启
-
compress:是否开启压缩
-
rsync opts:rsync的选项,选项之间用逗号隔开,例如-a,-v,-z等等
-
delete:删除源端不存在的文件,默认no
-
dest port:默认目录主机上的端口,默认是22,走的ssh协议
adhoc示例
# 将主控端的/opt/目录同步到被控端的/tmp目录,使被控端的/tmp目录和主控端/opt目录一模一样
ansible node1 -m synchronize -a 'src=/opt/ dest=/tmp/ delete=yes'
# 将主控端的/opt/目录同步到被控端的/opt/目录,并保留被控端原有的文件
ansible node1 -m synchronize -a 'src=/opt/ dest=/opt/'
# 将被控端的/etc/目录拷贝到主控端的/tmp/目录
ansible node1 -m synchronize -a 'src=/etc/ dest=/tmp/ mode=pull'
5.5 用户管理模块
5.5.1 user模块
user模块用于管理用户,可以实现添加用户、删除用户、修改用户属性、修改用户密码。
可以实现useradd
、usermod
、userdel
、passwd
命令的功能。
参数说明
- name:指定用户名
- state:执行的动作
- present:创建/修改
- absent:删除
- uid:指定uid
- group:指定用户私有组
- groups:指定用户附加组
- comment:描述信息
- create_home:是否创建家目录
- home:指定家目录路径,需要和create_home配合使用
- shell:指定用户的shell
- password:指定用户的密码,这里不能参明文密码,要对密码进行加密
- remove:当删除用户时,是否连同用户的家目录一起删除
adhoc示例
# 创建用户zhangsan,设置uid为2000,附加组为root,并设置密码为123456
openssl passwd -6 123456
ansible all -m user -a 'name=zhangsan uid=2000 groups=root password="$6$vq6Y7JxKEyfSpunv$lKTq9JaQ6pMvaE78dioHouwKrIAFNbUKRInA.Enu72shTSyJs4AvTkHUwllkROH6SPK3c/JYaOUxVTfVruDLL/" state=present'
# 创建一个用户tom,并设置不允许登录
ansible all -m user -a 'name=tom shell=/sbin/nologin state=present'
# 修改tom的登录shell,改为/bin/bash
ansible all -m user -a 'name=tom shell=/bin/bash state=present'
5.5.2 group模块
group用于管理组。可以实现groupadd
、groupdel
命令的功能。
参数说明
- name:指定组名称
- state:执行的动作
- present:创建组
- absent:删除组
- gid:指定组id
adhoc示例
# 创建一个admins组
ansible all -m group -a 'name=admins state=present'
5.6 软件管理模块
5.6.1 yum_repository模块
yum_repository模块用于配置yum仓库。
参数说明
- file:指定配置文件的名字,不包含.repo
- name:yum仓库的名字
- description:仓库的描述信息
- baseurl:yum源地址
- enabled:是否开启yum仓库,值为yes/on,默认yes
- gpgcheck:是否检查软件包的签名,值为yes/no
- gpgkey:公钥地址
adhoc示例
ansible all -m yum_repository -a 'file=local name=BaseOs description= BaseOs baseurl=file:///media/BaseOS enabled=yes gpgcheck=yes gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release'
5.6.2 yum模块
yum模块用于安装卸载软件。可以实现yum
命令的功能。
参数说明
- name:软件的包名,也可以写一个rpm包的本地路径或者URL。
- state:执行的动作
- present:安装
- absent:卸载
- latest:更新到最新版
adhoc示例
# 安装httpd
ansible webservers -m yum -a 'name=httpd state=present'
# 更新所有软件包
ansible webservers -m yum -a 'name="*" state=latest'
# 卸载httpd
ansible webservers -m yum -a 'name=httpd state=absent'
# 安装包组
ansible webservers -m yum -a 'name="@Development Tools" state=present'
注意:安装包组的时候要在包组名称前面加一个@,表示这是一个包组。
5.6.3 systemd模块
systemd模块用于管理服务启动。可以实现systemd
命令的功能。
参数说明
- name:指定服务的名称
- state:服务的动作
- started:启动服务
- stopped:停止服务
- restarted:重启服务
- reloaded:重新加载服务
- enabled:是否开机自启
- daemon_reload:当服务配置文件发生改变时使用。
adhoc示例
# 启动httpd服务并设置为开机自启
ansible webservers -m systemd -a 'name=httpd state=started'
5.7 文本管理模块
5.7.1 replace模块
5.7.2 lineinfile模块
5.7.3 blockinfile模块
5.8 磁盘管理模块
5.8.1 parted模块
5.8.2 lvg模块
5.8.3 lvol模块
5.8.4 filesystem模块
5.8.5 mount模块
5.9 其他模块
5.9.1 cron模块
cron模块用于管理计划任务。可以实现crontab
命令的功能。
参数说明
- name:任务的名称,用于描述任务的功能,同时也可以标记计划任务,删除计划任务时必须有标记才能删除。
- state:执行的动作
- present:创建计划任务
- absent:删除计划任务,必须要跟上name
- minute:分钟配置,*可以不写。
- hour:小时配置,*可以不写。
- day:日期配置,*可以不写。
- month:月配置,*可以不写。
- weekday:星期配置,*可以不写。
- job:要执行的计划任务命令。
- user:以什么用户执行
adhoc示例
# 每2分钟执行一次echo "hello world !" >> /tmp/hello.txt
ansible all -m cron -a 'name="cron-hello" state=present minute="*/2" job="echo \"hello world !\" >> /tmp/hello.txt"'
# 删除刚刚配置的计划任务
ansible all -m cron -a 'name="cron-hello" state=absent'
# 每周日备份一次/etc目录到/data/下,并以备份日期命名
ansible all -m cron -a 'name="cron-backup" state=present weekday=7 job="cp -a /etc/ /data/etc.`date -I`"'
标签:opt,文件,src,adhoc,state,ansible,模块
From: https://www.cnblogs.com/xxth/p/17899592.html