自动化运维Ansible之常用模块

目录

  • 0、Ansible模块语法
  • 1、Command模块
  • 2、Shell模块
  • 3、Scripts模块
  • 4、Copy模块
  • 5、File模块
  • 6、Yum模块
  • 7、Service模块
  • 8、Cron模块
  • 9、Group模块
  • 10、User模块
  • 11、Mount模块
  • 12、Unarchive模块
  • 13、Git模块
  • 14、Systemd模块

0、Ansible模块语法

在ansible中是指需要快速执行一条命令,并且不需要保存的命令,对于复杂的命令则为playbook

查看模块帮助:ansible-doc -l

// 统计模块数量
$ ansible-doc -l |wc -l
3387  // ansible有大量的模块

Ansible模块语法:

ansible [管理主机信息或者主机组信息] -m [模块名称] -a [相关模块参数]
主机信息:远程主机IP地址;远程主机组名称;远程所有主机all
-m:指定相应模块
-a:利用模块中某些参数功能
-f :定义每次输出内容的数量

Ansible注意事项颜色信息:

绿色:对远程节点不进行相应修改,或者只是对远程节点信息进行查看

红色:操作执行命令有异常

黄色:对远程节点进行相应修改

深紫色:表示对命令执行发出警告信息(可能存在的问题,给你提示建议)

1、Command模块

command模块的作用:默认模块,在远程主机执行命令;默认模块,可忽略-m选项

// chaidr 先切换到特定的目录,然后在执行命令
[[email protected] ~]# ansible 10.4.7.8 -m command -a "chdir=/tmp/ pwd"

// creates 判断一个文件是否存在。文件如果存在,后面命令则不会执行;如果不存在,则执行
[[email protected] /]# ansible 10.4.7.8 -m command -a "creates=/etc/rsyncd.conf hostname"

// removes 判断一个文件是否存在。文件如果存在,后面命令执行;如果不存在,则不执行
[[email protected] /]# ansible 10.4.7.8 -m command -a "removes=/etc/exports hostname"

// fress_form 使用command模块批量获取执行hostname命令
[[email protected] /]# ansible sa -m command -a "hostname"

该command模块无法和shell一样,像$HOME变量,和一些像 "<", ">", "|", ";" and "&" 这样的操作是没有办法执行(如果要支持这些特殊符号就必须要使用shell模块)错误的演示:

[[email protected] /]# ansible sa -m command -a "hostname;date"

2、Shell模块

shell模块作用:shell模块是万能模块,可以满足command模块所有功能,并且可以支持识别特殊字符

// 在10.4.7.8的机器的当前目录下执行ls和pwd命令
[[email protected] /]# ansible 10.4.7.8 -m shell -a "ls;pwd"

3、Scripts模块

scripts模块作用:专门运行脚本模块,在本地执行脚本,脚本产生所有的动作都在远端主机上执行

// 编写脚本,里面添加yum安装keepalived命令,将脚本执行命令放入到受控端执行
[[email protected] ~]# cat /server/scripts/yum.sh
#!/bin/bash
yum install -y keepalived

[[email protected] ~]# ansible 10.4.7.8 -m script -a "/server/scripts/yum.sh"
[[email protected] ~]# ansible 10.4.7.8 -m shell -a "rpm -qa keepalived"

注意:我们在管理机器上执行的脚本,远端(受控端)是不需要存在该脚本

4、Copy模块

copy模块作用:将文件从本地或远程机器复制到远程机器上的某个位置

// 将本端的/etc/hosts文件推送到远端,并且重命名为test.txt
[[email protected] ~]# ansible sa -m copy -a "src=/etc/hosts dest=/tmp/test.txt"

// 本端在/tmp/下创建文件file01.txt,推送到远端
[[email protected] ~]# touch /tmp/file01.txt
[[email protected] ~]# ansible 10.4.7.7 -m copy -a "src=/tmp/file01.txt dest=/tmp/" 

// 为本端的/tmp/file01.txt文件追加内容,并推送到远端,覆盖时备份原文件
[[email protected] ~]# cat /tmp/file01.txt
[[email protected] ~]# echo 123456 >/tmp/file01.txt
[[email protected] ~]# cat /tmp/file01.txt
123456
[[email protected] ~]# ansible 10.4.7.7 -m copy -a "src=/tmp/file01.txt dest=/tmp/ backup=yes"

// 在/root/下创建test.txt文件,在复制的时候修改属主和属组为root,权限644
[[email protected] ~]# ansible 10.4.7.7 -m copy -a "src=/root/test.txt dest=/test/oldboy/ owner=root group=root mode=644"

// 为对端的/tmp/test.txt文件写入内容“1”
[[email protected] ~]# ansible 10.4.7.7 -m copy -a "content=‘1‘ dest=/tmp/test.txt"

参数

- backup   # 对推送传输过去的文件,进行备份
- src      # 推送数据的源文件信息
- dest     # 推送数据的目标路径
- content  # 直接批量在被管理端文件中添加内容
- owner    # 将本地文件推送到远端,指定文件属主权限
- group    # 将本地文件推送到远端,指定文件属组权限
- mode     # 将本地文件推送到远端,指定文件权限信息

5、File模块

file模块作用:对受控端的文件属性修改/目录创建/文件创建

// 为远端主机修改/tmp/file01.txt文件的属主和属组为root,权限为600
[[email protected] ~]# ansible 10.4.7.7 -m file -a "path=/tmp/file01.txt owner=root group=root mode=600"

// 为远端主机创建文件和目录,远程创建文件/tmp/file01.txt
[[email protected] ~]# ansible 10.4.7.7 -m file -a " path =/tmp/file01.txt state=touch"

// 远程创建目录/tmp/dir01
[[email protected] ~]# ansible 10.4.7.7 -m file -a "path =/tmp/dir01 state=directory"

// 递归修改远端主机的/data目录及目录下的所有文件的属主和属组都为root
[[email protected] /]# ansible 10.4.7.7 -m file -a "path=/data state=directory owner=root group=root recurse=yes"

模块参数

- path    # 指定远程主机目录或文件信息
- recurse # 递归授权:
    yes   # 递归修改权限
    no    # 不递归修改权限(默认)
- state   # 指定需要执行的动作:
    directory  # 在远端创建目录
    touch      # 在远端创建文件
    hard       #  硬链接
    link       #软链接

6、Yum模块

yum模块作用:可以对受控端执行yum安装卸载和查看软件包

// yum安装iftop软件包
[[email protected] ~]# ansible 10.4.7.7 -m yum -a "name=iftop state=installed"

// 移除iftop软件
[[email protected] ~]# ansible 10.4.7.7 -m yum -a "name=iftop state=absent"

// 查看指定软件包名的列表
[[email protected] ~]# ansible 10.4.7.7 -m yum -a "list=iftop"

模块参数

- name  # 执行要安装软件的名称,以及软件的版本
- state # 指定需要执行的动作:
    installed、present   # 安装软件包
    latest               # 安装最新软件包
    removed、absent      # 移除软件包
- list  # 指定软件名称,查看软件是否已经安装了

7、Service模块

service模块作用:管理服务状态模块,对受控端进行服务的管理

// 将远端的crond服务关闭,并且开机不启动
[[email protected] ~]# ansible 10.4.7.7 -m service -a "name=crond state=stopped enabled=no"

// 将远端的crond服务开启,并且开机自启动
[[email protected] ~]# ansible 10.4.7.7 -m service -a "name=crond state=started enabled=yes"

模块参数

- name    # 指定需要管理的服务名称(管理的服务一定在chkconfig中可以看到)
- state   # 指定需要执行的动作:
    started     # 启动服务
    reloaded    # 平滑重启
    restarted   # 重启服务
    stopped     # 停止服务
    running     # 运行(启动)服务
- enable  # 设置服务是否开机自启动:
    yes    # 服务开机自启动
    no     # 服务开机不启动

8、Cron模块

cron模块作用:为受控端添加定时任务

x x x x x /bin/sh /server/scripts/test.sh >/dev/null 2>&1

将系统命令行的定时任务变成ansilbe的语法

传统的写法

"minute=0 hour=0 daay=* month=* weekday=* job=‘/bin/sh /server/scripts/test.sh >/dev/null 2>&1‘"

ansible的写法(* 号是可以省略的)

ansible 10.4.7.7 -m cron -a "minute=0 hour=0 job=‘/bin/sh /server/scripts/test.sh >/dev/null 2>&1‘"

定时任务示例

// 添加一条定时任务
[[email protected] ~]# ansible 10.4.7.7 -m cron -a "minute=0 hour=0 job=‘/bin/sh /server/scripts/test.sh >/dev/null 2>&1‘"

// 设置定时任务注释信息,防止重复设置
[[email protected] ~]# ansible 10.4.7.7 -m cron -a "name=‘cron01‘ minute=0 hour=0 job=‘/bin/sh /server/scripts/test.sh >/dev/null 2>&1‘"

// 删除指定的name
[[email protected] ~]# ansible 10.4.7.7 -m cron -a "name=‘cron01‘ minute=0 hour=0 job=‘/bin/sh /server/scripts/test.sh >/dev/null 2>&1‘ state=absent"

// 也可以直接指定定时任务项的名称,进行定时任务的删除
[[email protected] ~]# ansible 10.4.7.7 -m cron -a "name=‘cron02‘ state=absent"

// 使用 disabled 参数来注释定时任务
[[email protected] ~]# ansible 10.4.7.7 -m cron -a "name=‘cron01‘ minute=0 hour=0 job=‘/bin/sh /server/scripts/test.sh >/dev/null 2>&1‘ disabled=yes"

// 取消注释
[[email protected] ~]# ansible 10.4.7.7 -m cron -a "name=‘cron01‘ minute=0 hour=0 job=‘/bin/sh /server/scripts/test.sh >/dev/null 2>&1‘ disabled=no"

模块参数

- name # 为新的定时任务条目设置名称(防止定时任务项的重复)
- state  # 需要指定的动作:
    absent   # 添加定时任务
    preset   # 删除定时任务
- disabled # 是否禁用定时任务(是否注释):
    yes   # 禁用定时任务项(注释掉)
    no    # 开启定时任务项(取消注释)
# 该参数需要和job一起使用
- minute  # 分钟 0-59
- hour    # 小时 0-23
- day     # 天数 1-31
- month   # 月份 1-12
- weekday # 周 0-6

9、Group模块

group模块作用:可以为远端创建用户组

// 创建组,组名为demo,组id为1012
[[email protected] ~]# ansible 10.4.7.7  -m group -a "name=demo gid=1012"

模块参数

- name # 必须参数,指定创建的组名
- gid  # 指定用户的gid
- state
    absent   # 移除远端主机的组
    present  # 创建远端主机的组(默认)

10、User模块

user模块作用:可以为远端进行创建用户修改用户删除用户

// 创建用户名test,uid为999,组为test,shell为/sbin/nologin,并且不创建家目录
[[email protected] ~]# ansible 10.4.7.7 -m user -a "name=test uid=1010 shell=/sbin/nologin createhome=no"

// 创建普通用户alx,并配置对应的用户密码(-1 使用MD5加密)
[[email protected] /]# echo ‘123456‘ | openssl passwd -1 -stdin
$1$yGnjv/n3$J.tO.qSIyLy5q547tSisz/
[[email protected] /]# ansible 10.4.7.7 -m user -a ‘name=alx password="$1$yGnjv/n3$J.tO.qSIyLy5q547tSisz/"‘

模块参数

- name     # 必须参数,指定用户名
- group    # 指定用户组名称
- groups   # 指定附加组名称,多个组之间用逗号","分隔
- shell    # 指定用户登录的shell
- uid      # 指定用户的uid
- comment  # 指定用户的注释信息
- password # 给用户添加密码
- state  # 指定用户是否存在于受控主机中:
    preset  # 创建用户(默认)
    absent  # 删除用户
- createhome # 是否创建家目录:
    yes  # 创建家目录(默认)
    no   # 不创建家目录
- home  # 指定家目录,需要和createhome互相配合使用

密码设置:必须要将预先设置的密码做openssl加密处理后输出的一串数值,然后还数值就作为新创建用户的密码,如果添加的是明文密码的话是无效的。

11、Mount模块

mount模块作用:可以将挂载参数写入到/etc/fastb文件

// 仅将挂载的配置写入到/etc/fastb,并不会执行挂载
[[email protected] ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=present"

// 临时挂载设备,并将挂载的配置写入到/etc/fastb
[[email protected] ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=mounted"

// 临时卸载,不会清理/etc/fstab
[[email protected] ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=unmounted"

// 卸载,不仅临时卸载,同时会清理/etc/fstab
[[email protected] ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=absent"

模块参数

- present   # 开机挂载,不会执行挂载指令,仅将挂载的配置写入到/etc/fastb
- mounted   # 挂载设备,并将挂载的配置写入到/etc/fastb
- unmounted # 卸载设备,不会清除/etc/fastb写入的配置
- absent    #卸载设备,会清理/etc/fastb写入的配置

注意:path 所指定的挂载目录不需要手动创建,当执行挂载命令的时候,会自动的创建并挂载

12、Unarchive模块

Unarchive模块作用:解压缩

该模块有两种用法:

  • 将ansible主机上的压缩包在本地解压缩后传到远程主机上,这种情况下,copy=yes. 本地解压缩,解压缩位置不是默认的目录,没找到或传完删了 后传到远程主机
  • 将远程主机上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no 远程主机上面的操作,不涉及ansible服务端
// 将本地的压缩文件解压后传到远程主机
[[email protected] ~]# ansible 10.4.7.7 -m unarchive -a "src=/opt/src/apache-tomcat-8.5.53.tar.gz dest=/opt copy=yes mode=0755"

// 将远程主机的压缩文件解压
[[email protected] ~]# ansible 10.4.7.7 -m unarchive -a "src=/opt/src/apache-tomcat-8.5.53.tar.gz dest=/opt copy=no mode=0755"

模块参数

- src  # 源压缩包路径
- dest # 压缩包解压后存放路径
- copy # yes:本地压缩,no:远程压缩
    yes
    no
- mode # 解压后的目录/文件权限

13、Git模块

Git模块作用:管理git仓库的git checkout以部署文件或软件。

// 拉取git仓库commit id 为78d5d96的代码到指定目录
[[email protected] ~]# ansible 10.4.7.7 -m git -a "repo=https://gitee.com/jasonminghao/dubbo-demo-service.git dest=/data/git_repo/dubbo-demo-service version=78d5d96 accept_hostkey=yes"

模块参数

- repo    # git仓库地址(https/ssh)
- dest    # 将代码克隆到指定路径
- version # 克隆指定版本分支/commit id
- accept_hostkey # 类似于-o StrictHostKeyChecking=no
    yes
    no

14、Systemd模块

systemd模块作用:如果使用systemctl 管理程序的话,可以使用systemd模块,systemctl 可以控制程序,reload,start,status,restart等

// 拉取git仓库commit id 为78d5d96的代码到指定目录
[[email protected] ~]# ansible 10.4.7.7 -m systemd -a  "name=nfs state=started enabled=yes daemon_reload=true"

模块参数

- name     # 需要管理的服务名称
- state    # 执行动作
    reloaded  # 平滑重启
    restarted # 重启
    started   # 启动
    stopped   # 停止
- enabled # 是否开机启动
- daemon_reload # 在执行任何其他操作之前运行daemon-reload,以确保systemd已经读取了任何更改。
     yes
     no

原文地址:https://www.cnblogs.com/jasonminghao/p/12635616.html

时间: 2024-10-14 00:39:46

自动化运维Ansible之常用模块的相关文章

自动化运维Ansible之Playbook剧本(持续更新)

附上前两篇关于Ansible的博客地址,以供查阅,欢迎学习交流!自动化运维之Ansible概述及Ansible部署Ansible命令应用之常用模块 Playbook简介 playbook是ansible用于配置,部署,和管理被控节点的剧本. 通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态.playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成. 也可以这么理解,playbook 字面意思,即剧本,现实中

Linux下的自动化运维ansible工具

什么是自动化运维     随着信息时代的持续发展,IT运维已经成为IT服务内涵中重要的组成部分.面对越来越复杂的业务, 面对越来越多样化的用户需求,不断扩展的IT应用需要越来越合理的模式来保障IT服务能灵活便捷.安 全稳定地持续保障,这种模式中的保障因素就是IT运维(其他因素是更加优越的IT架构等).从初期的 几台服务器发展到庞大的数据中心,单靠人工已经无法满足在技术.业务.管理等方面的要求,那么标 准化.自动化.架构优化.过程优化等降低IT服务成本的因素越来越被人们所重视.其中,自动化最开始作

自动化运维Ansible批量部署服务+shell脚本批量推送公钥

一.概述分析 由于互联网的快速发展导致产品更新换代速度逐渐加快,运维人员每天都要进行大量的维护操作,仍旧按照传统方式进行维护会使得工作效率低下.这时,部署自动化运维就可以尽可能安全.高效地完成这些工作.一般会把自动化运维工具划分为两类:一类是需要使用代理工具的,也就是基于专用的ABem程序来完成管理功能,如: Puppet.Func. Zabbix等:另外一类是不需要配置代理工具的,可以直接基于SSH服务来完成管理功能,如: Ansible. Fabric等. - 下面介绍几款功能类似的自动化运

3.2 企业自动化运维ansible

ansible的Host-pattern ansible的Host-pattern 匹配主机的列表All :表示所有Inventory中的所有主机 ansible all –m ping:通配符 ansible "" -m ping 这个"*"号相当于all全部主机 ansible 192.168.1.* -m ping ansible "*srvs" -m ping 或关系 ansible "websrvs:appsrvs"

自动化运维-Ansible (第二部)

Ansible 命令应用基础 之前的一篇文章讲到了Ansible 的安装和作用,有兴趣的可以看看Ansible 介绍与安装.学习 ansible 就是重新学习一次命令和语法. Ansible 可以使用命令行进行自动化管理,基本语法如下: ansible <host-patterm> [-m module_name] [-a args] <host-patterm>:对哪些主机生效 [-m module_name]:要使用的模块 [-a args] :模块特有参数 Ansible 的

自动化运维Ansible实践(一)

第 1 章 Ansible概述 1.1 IT自动化的好处1.1.1 团队影响? 节省时间,提高工作效率? 消除重复任务? 更少的错误风险? 改善协作和工作满意度1.1.2 企业影响? 克服复杂性? 更多创新资源? 加强问责制和合规性1.2 Ansible是什么Ansible是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新.Ansible适用于管理企业IT基础设施,从具有少数主机的小规模到数千个实例的企业环境.Ansible也是一种简单的自动化语言,可

自动化运维Ansible之playbook剧本的使用

YAML简介 YAML是一种表达资料序列的格式,由于参考了其他多种语言,所以具有很高的可读性.其特性如下: 具有很好的可读性,易于实现 表达能力强,扩展性好 和脚本语言的交互性好 有一个一致的信息模型 可以基于流来处理 1.YAML中两种常用的数据类型,分别是list和directory list -teacher -student 2.列表的所有元素均使用"-"开头 directory 3.字典通过key和value进行标识如: name:zhangsan job:teacher a

自动化运维-Ansible (第三部:Playbook 介绍)

前言 之前有两篇文章分别讲了 Ansible 的部署.Ansible 的 模块使用,对 Ansible 有了最初的了解,这篇文章最主要是要介绍 Playbook.需要了解 Ansible 的部署请点击:Ansible 第一部 :部署需要了解 Ansible 的模块庆典节:Ansible 第二部:模块使用 Playbook 介绍 Playbook 是由一个或多个play 组成的列表,主要功能是将task 定义好的角色归并为一组进行统一管理,也就是通过task 调用 Asible 的模板将多个 pl

自动化运维Ansible之安装部署

目录 1.SSH分发 2.安装Ansible 3.Ansible清单管理 1.SSH分发 ansible自动化部署条件 1.建议基于ssh密钥方式建立远程连接 2.基于ssh口令方式建立远程连接(不建议) 在部署之前需要保证管理主机和受控主机能够基于ssh密钥的方式进行远程连接 管理主机生成SSH密钥(私钥和公钥),分发公钥到每台受控主机: 1.安装sshpass [[email protected] ~]# yum install sshpass -y 2.生成密钥 // 直接生成密钥 [[e