首页 > 其他分享 >五、adhoc与模块

五、adhoc与模块

时间:2023-12-13 17:44:06浏览次数:27  
标签:opt 文件 src adhoc state ansible 模块

五、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,查找使用示例

image-20230917134320202

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:执行命令前,先切换到指定路径

image-20230916172015710

  • removes:判断文件是否不存在,如果不存在则不执行命令。

image-20230916172327878

  • creates:判断文件是否存在,如果存在则不执行命令。

image-20230916172609031

5.4 文件管理模块

5.4.1 file模块

file模块用于管理文件,可以实现创建、删除文件/目录,给文件进行软链接、硬链接。

可以实现rmlnchmodchown命令的功能。

参数说明

  • 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模块用于解压文件到被控端。可以实现targunzipbunzip2unzip命令的功能。

参数说明

  • 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模块用于管理用户,可以实现添加用户、删除用户、修改用户属性、修改用户密码。

可以实现useraddusermoduserdelpasswd命令的功能。

参数说明

  • 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用于管理组。可以实现groupaddgroupdel命令的功能。

参数说明

  • 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

相关文章

  • Traceback模块
    traceback模块提供了在程序中处理和分析异常时的工具,帮助开发人员更好地理解程序出现问题的原因。使用traceback.format_exc()函数可以获取当前异常的堆栈信息。print(traceback.format_exc())可以直接将错误异常打印出来,显得十分直观,还不影响程序继续运行。importtraceback......
  • java学习01-项目,模块,包,类的关系
    一.引言在Java编程语言中,项目、模块、包和类是组织代码的不同层次,它们之间的关系构成了Java程序的框架和结构。下面将详细解释这些概念以及它们之间的关系。二.定义项目(Project):项目是最大的组织单位,通常代表一个完整的软件应用或一组相关的应用。一个项目可以包含多个模块,这些......
  • Python——第五章:logging模块
    filename:文件名format:数据的格式化输出。最终在日志文件中的样子时间-名称-级别-模块:错误信息datefmt:时间的格式level:错误的级别权重,当错误的级别权重大于等于leval的时候才会写入文件importlogginglogging.basicConfig(filename='x1.txt',format='%(asc......
  • Python——第五章:shutil模块
    复制文件把dir1的文件a.txt移动到dir2内importshutilshutil.move("dir1/a.txt","dir2")复制两个文件句柄f1=open("dir2/a.txt",mode="rb")#准备读f1f2=open("dir1/b.txt",mode="wb")#准备写f2shutil.copyfileobj(f1,......
  • springboot+vue小白升级之路07-快速实现批量删除、小白升级之路08-实现批量导入导出ex
    我们接着之前的内容,全部代码我贴一下,大家参考使用。数据库droptableifexistsan_user;createtablean_user( idintnotnullauto_incrementprimarykeycomment'主键id', namevarchar(255)notnulluniquecomment'姓名', `password`varchar(255)notnullcomment......
  • Python——第五章:hashlib模块
    hashlib模块hashlib模块是Python中用于加密散列(hash)算法的模块。它提供了对常见的哈希算法(如MD5、SHA-1、SHA-256等)的支持,使得开发者可以轻松地在其应用中进行数据的安全散列。以下是hashlib模块中一些常用的哈希算法:MD5(MessageDigestAlgorithm5):产生128位的哈......
  • 【python】文件锁模块fcntl
      #!/usr/bin/python#coding:utf8importosimportsysimporttimeimportfcntl#导入模块classFLOCK(ojbect):def__init__(self,name):""":paramname:文件名"""self.fobj=open(name,'......
  • 深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现
     网络和Web开发是Python中不可或缺的重要领域,而其核心模块如urllib、requests和http在处理网络请求、HTTP请求和响应以及Web开发中扮演着关键的角色。这些模块为开发者提供了丰富的工具,使其能够灵活处理网络通信、构建Web应用和与远程服务器进行交互。深入了解这些模块的用法和作......
  • Nest 核心概念:模块
    前言上篇文章《NestJS扫盲篇:TypeScript类和装饰器》中,我们介绍了TS中类和装饰器的用法。Nest应用基于面向对象和面向切面开发,大量应用了类和装饰器。所以掌握这两个语法,再去学习Nest,是一个很有必要的基础。MVC分层架构在本系列更文的第一篇,较为细致的分析了HelloWorld的......
  • Python——第五章:json模块
    什么是json:json模块是用于处理JSON(JavaScriptObjectNotation)数据的模块,翻译过来叫js对象简谱。JSON是一种轻量级的数据交换格式,常用于将数据在不同语言之间进行传递。我们先来看一段json代码:wf={"name":"汪峰","age":18,"hobby":"上头条","wife"......