Ansible 常用基础模块

Ansible的执行

  • ad-hoc
  • playbook

Ansible ad-hoc

ad-hoc:简而言之就是“临时命令”,执行完即结束,并不会保存

ad-hoc模式的使用场景

比如在多台机器上查看某个进程是否启动,或拷贝指定文件到本地,等等

ad-hoc模式的命令使用

语法:
ansible 主机名(主机清单中的主机名或主机组) -m 模块名 [-a '动作']

ad-hoc结果返回颜色

  • 绿色:被管理端执行成功,代表被管理端主机没有被修改
  • 黄色:被管理端执行成功,但是结果是变化的
  • 红色:执行失败,注意看报错

ad-hoc常用模块

command             # 执行shell命令(不支持管道等特殊字符)
shell # 执行shell命令
scripts # 执行shell脚本
yum_repository # 配置yum仓库
yum # 安装软件
copy # 变更配置文件
file # 建立目录或文件
service # 启动与停止服务
mount # 挂载设备
cron # 定时任务
get_url #下载软件
firewalld #防火墙
selinux #selinux

Ansible-doc帮助手册

ansible-doc 模块名
ansible-doc -l # 查看所有模块说明
ansible-doc copy # 查看指定模块方法
ansible-doc -s copy # 查看指定模块参数

Ansible命令模块

command模块

# 执行shell命令(不支持管道等特殊字符)
ansible web_group -m command -a '命令(不带特殊符号)'

shell模块

# 执行shell命令,如果需要一些管道操作,则使用shell
ansible web_group -m shell -a '命令'

script模块

# 在本地运行模块,等同于在远程执行脚本,不需要将脚本文件进行推送目标主机执行
[root@m01 ~]$ ansible web_group -m script -a "/root/a.sh" # 1.管理端创建脚本
[root@m01 ~]$ vim a.sh
#!/bin/sh
echo '123' > /root/1.txt
# 2.管理端远程执行脚本(相当于在被管理端执行)
[root@m01 ~]$ ansible web_group -m script -a '/root/a.sh' # 3.被管理端执行脚本成功
[root@web01 ~]$ cat 1.txt
123

Ansible软件管理模块

yum模块

# 远程安装tree命令
[root@m01 ~]$ ansible lb_group -m yum -a 'name=tree state=present'
# 远程检测tree命令是否安装
[root@m01 ~]$ ansible lb_group -m yum -a 'list=tree'
选项:
-name:包名
-直接指定包名: 从仓库安装(类似yum install httpd)
-http:// : 从指定的URL安装
-file:// : 从本地安装(类似:yum localinstall /root/http-1.rpm) -state:动作,指定使用yum的方法
-absent(removed,不推荐): 卸载
-present(installed,不推荐): 安装
-latest: 安装最新版本 -download_only
-true: 只下载不安装
-false: 下载并安装 -list
-包名: 检测软件包是否安装
"yumstate": "available" 证明包可以安装但是没装
"yumstate": "installed" 已经安装了 [root@m01 ~]$ ansible-doc yum
exclude=kernel*,foo* #排除某些包
list=ansible #类似于yum list查看是否可以安装
disablerepo="epel,ol7_latest" #禁用指定的yum仓库

yum_repository模块

# 创建新的仓库配置文件,文件名和仓库名叫nginx,描述是xxxx,仓库的URL是baidu.com
[root@m01 ~]$ ansible lb_group -m yum_repository -a 'name=nginx description=xxxx baseurl=http://www.baidu.com gpgcheck=no enabled=yes'
[root@lb01 /etc/yum.repos.d]$ ll
-rw-r--r-- 1 root root 77 Aug 10 17:45 nginx.repo # 创建新的仓库配置文件,且文件名不和仓库名一样
[root@m01 ~]$ ansible lb_group -m yum_repository -a 'name=nginx file=wj_nginx description=xxxx baseurl=http://www.baidu.com gpgcheck=no enabled=yes'
[root@lb01 /etc/yum.repos.d]$ cat wj_nginx.repo
[nginx]
baseurl = http://www.baidu.com
enabled = 1
gpgcheck = 0
name = xxxx # 追加仓库至文件中
[root@m01 ~]$ ansible lb01 -m yum_repository -a 'name=httpd file=wj_nginx description=123456 baseurl=http://www.jd.com gpgcheck=no enabled=yes'
[root@lb01 /etc/yum.repos.d]$ cat wj_nginx.repo
[nginx]
baseurl = http://www.baidu.com
enabled = 1
gpgcheck = 0
name = xxxx [httpd]
baseurl = http://www.jd.com
enabled = 1
gpgcheck = 0
name = 123456 # 删除仓库文件中的指定仓库,如果仓库删完,仓库文件也会消失
[root@m01 ~]$ ansible lb01 -m yum_repository -a 'name=nginx file=wj_nginx state=absent'
[root@lb01 /etc/yum.repos.d]$ cat wj_nginx.repo
[httpd]
baseurl = http://www.jd.com
enabled = 1
gpgcheck = 0
name = 123456

yum_repository模块详解

yum_repository
-name:仓库名称
-file:指定仓库的文件名
-description:仓库的描述(name)
-baseurl:仓库的url
-gpgcheck:是否检查公钥私钥
-no:不开启 0
-yes:开启 1 (不配置默认开启)
-enabled:是否开启仓库
-no:不开启 0
-yes:开启 1(不配置默认开启)

Ansible文件管理模块

对于文件管理,我们在学习Linux基础的时候,就学习了很多命令,比如创建,删除,移动,拷贝,下载等

copy模块

# 推送管理端优化文件至被管理端
[root@m01 ~]$ ansible lb01 -m copy -a 'src=/root/a.txt dest=/root'
[root@lb01 ~]$ ll
-rw-r--r-- 1 root root 7 Aug 10 18:15 a.txt
[root@lb01 ~]$ cat a.txt
123456 # 将管理端的b.txt文件也推到被管理端,并且也叫a.txt
[root@m01 ~]$ ansible lb01 -m copy -a 'src=/root/b.txt dest=/root/a.txt'
[root@lb01 ~]$ ll
-rw-r--r-- 1 root root 11 Aug 10 18:19 a.txt
## 原文件内容被覆盖
[root@lb01 ~]$ cat a.txt
xxxxxxxxxx # 推送管理端文件至被管理端,被管理端文件名依然是a.txt,但是开启备份
[root@m01 ~]$ ansible lb01 -m copy -a 'src=/root/a.txt dest=/root/a.txt backup=yes'
[root@lb01 ~]$ ll
## 最新推送过来的文件
-rw-r--r-- 1 root root 7 Aug 10 18:23 a.txt
## 源文件被备份,以时间戳为名
-rw-r--r-- 1 root root 11 Aug 10 18:19 a.txt.98672.2021-08-10@18:23:33~
[root@lb01 ~]$ cat a.txt.98672.2021-08-10@18\:23\:33~
xxxxxxxxxx
[root@lb01 ~]$ cat a.txt
123456 # 直接推送信息到远端指定文件,原文件内容会被覆盖
[root@m01 ~]$ ansible lb01 -m copy -a "content='111111111' dest=/root/a.txt"
[root@lb01 ~]$ cat a.txt
111111111 # 推送管理端文件至被管理端,指定被管理端文件属主属组为nginx,权限是777,并且如果有重名文件就备份原文件再覆盖
[root@m01 ~]$ ansible lb01 -m copy -a 'src=/root/a.txt dest=/root owner=nginx group=nginx mode=777 backup=yes'
[root@lb01 ~]$ ll
-rwxrwxrwx 1 nginx nginx 7 Aug 10 19:47 a.txt

copy模块详解

copy
-src:指定被推送源文件的路径
-dest:指定目标路径
-owner:指定属主
-group:指定属组
-mode:指定权限
-backup:
-yes:如果目标路径,存在同名文件,就将目标文件备份
-no:不备份直接覆盖(默认)
-content:将指定文本内容覆盖到目标文件中
-remote_src:将命令变成cp,相当于将远端的源文件拷贝到远端的目标文件
-yes:将源文件,变成远端的源文件(ansible被管理端)
-no:源文件还是本地文件(ansible管理端 默认)
-follow:拷贝软连接
- yes:会将软连接一起拷贝
-no:会生成一个新的软连接文件

file模块

# 在远端创建wj_wb目录(并没有写入recurse递归创建)
[root@m01 ~]$ ansible web_group -m file -a 'path=/tmp/wj_wb/1_wb/2_wb state=directory'
## 默认目录是递归创建
[root@web01 ~]$ tree /tmp/wj_wb/
/tmp/wj_wb/
└── 1_wb
└── 2_wb
2 directories, 0 files # 创建wj_file文件,指定权限777,属主属组是nginx
[root@m01 ~]$ ansible web_group -m file -a 'path=/tmp/wj_file state=touch mode=777 owner=nginx group=nginx'
[root@web01 ~]$ ll /tmp/wj_file
-rwxrwxrwx 1 nginx nginx 0 Aug 11 13:43 /tmp/wj_file # 创建wj_file的软链接文件,指定软链接文件名为wj_file_link
[root@m01 ~]$ ansible web_group -m file -a 'src=/tmp/wj_file path=/tmp/wj_file_link state=link'
[root@web01 /tmp]$ ll
total 0
-rwxrwxrwx 1 nginx nginx 0 Aug 11 13:43 wj_file
lrwxrwxrwx 1 root root 12 Aug 11 13:47 wj_file_link -> /tmp/wj_file # 删除远端指定文件
[root@m01 ~]$ ansible web_group -m file -a 'path=/tmp/wj_file_link state=absent' # 修改远端文件的属性信息(属组属主,权限)
[root@m01 ~]$ ansible web_group -m file -a 'path=/tmp/wj_file state=file owner=root group=root mode=111'
## 修改前
[root@web01 /tmp]$ ll
-rwxrwxrwx 1 nginx nginx 0 Aug 11 13:43 wj_file
## 修改后
[root@web01 /tmp]$ ll
---x--x--x 1 root root 0 Aug 11 13:43 wj_file

file模块详解

-path:要创建的文件路径
-src:链接的源文件
-dest:链接的目标文件
-state
-link:软链接
-hard:硬链接
-touch:将path当成普通文件创建出来
-directory:将path当成目录创建出来
-absent:删除指定文件
-file:修改path指定的文件路径属性信息
-recurse:递归
-yes:开启递归
-no:默认
-owner:指定属主
-group:指定属组
-mode:权限 # 创建目录时,默认开启递归创建,并且如果创建时指定了权限及属组属主,那么也会递归修改

get_url模块

# 下载软件包到远端/tmp目录下,并指定文件权限及属主属组
[root@m01 ~]$ ansible backup -m get_url -a 'url=http://test.driverzeng.com/Nginx_Code/wordpress-5.0.3-zh_CN.tar.gz dest=/tmp/ owner=ftp group=ftp mode=644'
[root@backup ~]$ ll /tmp/
-rw-r--r-- 1 ftp ftp 11098483 Aug 11 16:13 wordpress-5.0.3-zh_CN.tar.gz

get_url模块详解

-url:指定安装包下载地址
-dest:指定下载的目录
-mode:指定下载后权限
-checksum:校验加密算法
-md5
-sha256

Ansible服务管理模块

service:能更改sentos6,sentos7的服务
systemd:只能更改sentos7的服务
# 关闭远端nginx服务
[root@m01 ~]$ ansible web01 -m service -a 'name=nginx state=stopped'
## 关闭前
[root@web01 ~]$ ps -fe|grep nginx
root 6709 1 0 08:06 ? 00:00:00 nginx: master process /usr/sbin/nginx
www 6710 6709 0 08:06 ? 00:00:00 nginx: worker process
root 8564 6958 0 16:16 pts/0 00:00:00 grep --color=auto nginx
## 关闭后
[root@web01 ~]$ ps -fe|grep nginx
root 8674 6958 0 16:17 pts/0 00:00:00 grep --color=auto nginx

service详解

-name:定义要更改服务的名称
-state:指定服务状态
-started:启动服务
-stopped:停止服务
-restarted:重启服务
-reloaded:重载服务配置文件
-enabled:开机自启
-yes:允许开机自启
-no:默认

Ansible用户管理模块

Ansible管理用户与组,通常使用user、group模块

group模块

# 在远端创建一个组,并指定组的gid是456
[root@m01 ~]$ ansible backup -m group -a 'name=sys gid=456' # 移除指定的远端的组
[root@m01 ~]$ ansible backup -m group -a 'name=sys state=absent'

group模块详解

-name:指定创建的组名
-gid:指定组的gid
-state
-absent:移除远端主机的组
-present:创建远端主机的组(默认)

user模块

# 在backup上创建用户wj01,指定uid是567,指定登录的shell(无法登录),不创建家目录
[root@m01 ~]$ ansible backup -m user -a 'name=wj01 uid=567 shell=/sbin/nilogin create_home=no'
[root@backup ~]$ id wj01
uid=567(wj01) gid=1000(wj01) groups=1000(wj01) # 删除用户及相关所有文件
[root@m01 ~]$ ansible backup -m user -a 'name=wj01 state=absent remove=yes'
[root@backup ~]$ id wj01
id: wj01: no such user

user模块详解

-name:用户名
-uid:指定uid -u
-group:指定gid或者组名 -g
-groups:指定追加附加组 -G
-append:追加,配合-G使用 -a
-shell:指定用户登录的shell -s
-comment:指定用户描述 -c
-create_home:是否创建家目录
-yes:创建(默认)
-no:不创建
-generate_ssh_key:是否创建秘钥对
-yes:创建
-no:不创建(默认)
-ssh_key_bits:私钥长度
-ssh_key_file:私钥的位置
-state:
-present:创建用户(默认)
-absent:删除用户
-remove
-yes:将用户的家目录等相关目录全部删除  -r
-no:默认

Ansible定时任务模块

cron模块

# 添加时间同步定时任务,文件中写入的信息需要引起来
[root@m01 ~]$ ansible backup -m cron -a 'name="时间同步" minute=*/2 job="/sbin/ntpdate time1.aliyun.com &>/dev/null"'
## 通过Ansible写入的定时任务会有独特的标识
[root@backup ~]$ crontab -l
# Create By:wj Time:2021-07-01 Nmae: 3 mins ntp time
*/3 * * * * /usr/sbin/ntpdate time1.aliyun.com &>/dev/null
#Ansible: 时间同步
*/2 * * * * /sbin/ntpdate time1.aliyun.com &>/dev/null # 删除远端定时任务,通过name的配置
[root@m01 ~]$ ansible backup -m cron -a 'name="时间同步" state=absent'

cron模块详解

-name:定时任务的注释
-minute:分
-hour:时
-day:日
-month:月
-weekday:周
-job:要执行的命令
-state
-present:创建定时任务(默认)
-absent:删除定时任务(删除任务要根据name)
-user:指定定时任务的用户

Ansible磁盘挂载模块

mount模块

# 挂载远端目录至nfs共享目录中,并且将开机自动挂载文件写入/etc/fstab文件中
[root@m01 ~]$ ansible web01 -m mount -a 'path=/code/wordpress/wp-contend/uploads src=172.16.1.31:/data/wp_data fstype=nfs state=mounted' # 卸载掉挂载点,并清除/etc/fstab写入的配置
[root@m01 ~]$ ansible web01 -m mount -a 'path=/code/wordpress/wp-contend/uploads state=absent'

mount模块详解

-path:指定挂载的路径
-src:被挂载的路径
-fstype:指定文件系统类型
-state:
-prsent:开机挂载,仅将挂载配置写入/etc/fstab,并不会立马挂载,需要重启
-absent:卸载设备,会清理/etc/fstab写入的配置
-mounted:挂载设备,并将配置写入/etc/fstab
-unmounted:卸载设备,不会清除/etc/fstab写入的配置
-opts:指定挂载的权限(可读可写)

Ansible防火墙模块

selinux模块

# 关闭远端机器selinux
[root@m01 ~]$ ansible backup -m selinux -a 'state=disabled'
-state:
-disabled:关闭selinux

firewalld模块

-service:根据服务放行端口-port:	-端口/tcp-state	-disabled:禁用端口	-enabled:放行指定端口

Ansible解压模块

unarchive模块

# 将管理端压缩包解压至远端指定目录下
[root@m01 ~]$ ansible backup -m unarchive -a 'src=/root/wordpress.tgz dest=/tmp'
[root@backup ~]$ ll /tmp/
total 4
drwxr-xr-x 5 666 666 4096 Jul 21 17:07 wordpress

unarchive模块详解

-src:指定压缩文件源文件
-dest:解压至的路径
-remove_src
-yes:压缩包在远端机器上
-no:默认,压缩包在管理端 # 注意:前提条件是,被管理端上必须有所有的解压命令

Ansible主机信息模块

在公司中总会有一些需求 比如:

1.根据不同主机不同IP创建对应IP的目录

2.根据不同主机不同主机名创建对应主机名的目录

3.自动化运维平台需要自动获取到主机的IP地址,内存信息,磁盘信息,主机名...等

4.如果安装数据库,分配内存为物理内存的80%,此时有3台不同物理内存的机器2G、4G、16G 写一个playbook的情况下,我需要获取到对应主机的内存并作出计算,写判断。

自动化运维setup模块

# 显示指定被管理端ipv4的信息
[root@m01 ~]$ ansible backup -m setup -a 'filter=ansible_all_ipv4_addresses'
backup | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"10.0.0.41",
"172.16.1.41"
],
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
} # 使用详解
ansible web01 -m setup:显示主机所有信息
## 系统内置变量
ansible_all_ipv4_addresses:仅显示ipv4的信息。
ansible_devices:仅显示磁盘设备信息。
ansible_distribution:显示是什么系统,例:centos,suse等。
ansible_distribution_major_version:显示是系统主版本。
ansible_distribution_version:仅显示系统版本。
ansible_machine:显示系统类型,例:32位,还是64位。
ansible_eth0:仅显示eth0的信息。
ansible_hostname:仅显示主机名。
ansible_kernel:仅显示内核版本。
ansible_lvm:显示lvm相关信息。
ansible_memtotal_mb:显示系统总内存。
ansible_memfree_mb:显示可用系统内存。
ansible_memory_mb:详细显示内存情况。
ansible_swaptotal_mb:显示总的swap内存。
ansible_swapfree_mb:显示swap内存的可用内存。
ansible_mounts:显示系统磁盘挂载情况。
ansible_processor:显示cpu个数(具体显示每个cpu的型号)。
ansible_processor_vcpus:显示cpu个数(只显示总的个数)。

Ansible 常用基础模块的更多相关文章

  1. Nginx 常用基础模块

    目录 Nginx 常用基础模块 Nginx日志管理 nginx日志切割 Nginx目录索引 Nginx状态监控 Nginx访问控制 Nginx访问限制 Nginx 请求限制配置实战 Nginx Loc ...

  2. 9、nginx常用基础模块

    1Nginx目录索引 ngx_http_autoindex_module模块处理以斜杠字符('/')结尾的请求(就是处理location /),并生成目录列表.当ngx_http_index_modu ...

  3. ansible中文手册-基础模块使用

    此篇文章主要是翻译ansible官网文档而来,在里面讲述了如何使用ansible的基础模块,总体感觉比较晦涩,但是后面会写出自己相关实践的文档,从而更加通俗易懂,官网的东西拿来当手册偶尔翻翻也是很不错 ...

  4. Ansible常用模块介绍及使用(week5_day1_part2)--技术流ken

    Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)--技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几 ...

  5. Ansible常用模块基本操作

    Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. 前言 对于任何一个框架,一个应用,为了更便于推广,便于使用,便于商业化,都会顺便提 ...

  6. Ansible常用模块介绍及使用(2)

    Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)–技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几个 ...

  7. ansible常用模块用法

    ansible常用模块用法 2015-07-21 10:25 24458人阅读 评论(1) 收藏 举报  分类: Linux(44)   ansible 版权声明:本文为博主原创文章,未经博主允许不得 ...

  8. python 模块基础 和常用的模块

    模块的定义 一个模块就是以.py结尾的python 文件,用来从逻辑上组织python代码.注意,模块名和变量名一样开头不能用数字,可以是双下划线和字母. 为什么要用模块? 将一些复杂的需要重复使用的 ...

  9. Ansible常用模块命令

    Ansible常用模块命令 一.安装ansible yum install epel-release yum install ansible 二.配置文件配置 vi /etc/ansible/ansi ...

  10. Ansible 常用模块(一)

    一.Ansible简介 Ansible是新出现的自动化运维工具,基于python开发,集合了众多运维工具(puppet(ruby).cfengine.chef.func.fabric.)的优点,实现了 ...

随机推荐

  1. xcodeproj Building for iOS, but the linked and embedded framework ‘xxx.framework’ was built for iOS + iOS Simulator.

    一.报错 报错内容大致如下 /xxxx/xxx.xcodeproj Building for iOS, but the linked and embedded framework 'xxx.frame ...

  2. 英码科技边缘计算智慧工地解决方案——给工地戴上AI“安全帽”

    据统计显示,2021年全国共发生房屋市政工程生产安全事故734起,死亡840人:且近3年来,工地事故数量.死亡人数连续攀升.这不仅仅是一个普通的数字,每个数字都代表一个独特.鲜活的生命.为什么每年会发 ...

  3. c语言中%d %f %c %s等的区别

    %d整型输出(%ld长整型输出)%f以小数形式输出,默认情况下保留小数点6位 这里是引用%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号.其中:float,单精度浮 ...

  4. adb命令1

    adb是什么 adb的全称为Android Debug Bridge,就是起到调试桥的作用.它就是一个命令行窗口,用于通过电脑端与模拟器或者是设备之间的交互. adb有什么用 借助adb工具,我们可以 ...

  5. python和java语法对比

      python java 不同的关键字 except,nolocal,as,assert,async,pass ,await,from,raise,global,in,del,with,lambda ...

  6. HTTPS、HTTP/2前端入门篇

    随着网络安全重要性日益凸显,越来越多的站点已经全站切换到HTTPS,其中很多HTTPS站点同时将HTTP协议升级到了HTTP/2.作为一只前端,最近一直在学习和应用相关知识点,便总结梳理如下. 一.何 ...

  7. FinOps首次超越安全成为企业头等大事丨云计算趋势报告

    随着云计算在过去十年中的广泛应用,云计算用户所面临的一个持续不变的趋势是:安全一直是用户面临的首要挑战.然而,这种情况正在发生转变. 知名IT软件企业 Flexera 对云计算决策者进行年度调研已经持 ...

  8. Harmonic Number 调和级数(欧拉常数)或者分块暴力

    给你个n让你求 Memory limit 32768 kB 输出误差不超过1e-8 思路:做之前不知都调和级数不知道欧拉常数没问题,肯定能先想到暴力打标,打完发现数组内存太大,那么问题就是怎么能让内存 ...

  9. RunnerGo可视化场景管理,还原真实场景

    在进行性能测试时,测试场景的正确配置非常关键.首先,需要根据业务场景和需求,设计出合理的测试场景,再利用相应的工具进行配置,实现自动化的性能测试. 在JMeter中,用户需要自己组织测试场景,或是在同 ...

  10. 【ACM算法竞赛日常训练】DAY2题解与分析【比赛】【数学考试】【简单瞎搞题】

    DAY2共三题: 比赛(概率) 数学考试(前缀和与思维) 简单瞎搞题(dp) 视频讲解:https://www.bilibili.com/video/BV1hP411o7RD/ 作者:Eriktse ...