Ansible 常用基础模块
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 常用基础模块的更多相关文章
- Nginx 常用基础模块
		目录 Nginx 常用基础模块 Nginx日志管理 nginx日志切割 Nginx目录索引 Nginx状态监控 Nginx访问控制 Nginx访问限制 Nginx 请求限制配置实战 Nginx Loc ... 
- 9、nginx常用基础模块
		1Nginx目录索引 ngx_http_autoindex_module模块处理以斜杠字符('/')结尾的请求(就是处理location /),并生成目录列表.当ngx_http_index_modu ... 
- ansible中文手册-基础模块使用
		此篇文章主要是翻译ansible官网文档而来,在里面讲述了如何使用ansible的基础模块,总体感觉比较晦涩,但是后面会写出自己相关实践的文档,从而更加通俗易懂,官网的东西拿来当手册偶尔翻翻也是很不错 ... 
- Ansible常用模块介绍及使用(week5_day1_part2)--技术流ken
		Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)--技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几 ... 
- Ansible常用模块基本操作
		Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. 前言 对于任何一个框架,一个应用,为了更便于推广,便于使用,便于商业化,都会顺便提 ... 
- Ansible常用模块介绍及使用(2)
		Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)–技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几个 ... 
- ansible常用模块用法
		ansible常用模块用法 2015-07-21 10:25 24458人阅读 评论(1) 收藏 举报 分类: Linux(44) ansible 版权声明:本文为博主原创文章,未经博主允许不得 ... 
- python 模块基础 和常用的模块
		模块的定义 一个模块就是以.py结尾的python 文件,用来从逻辑上组织python代码.注意,模块名和变量名一样开头不能用数字,可以是双下划线和字母. 为什么要用模块? 将一些复杂的需要重复使用的 ... 
- Ansible常用模块命令
		Ansible常用模块命令 一.安装ansible yum install epel-release yum install ansible 二.配置文件配置 vi /etc/ansible/ansi ... 
- Ansible 常用模块(一)
		一.Ansible简介 Ansible是新出现的自动化运维工具,基于python开发,集合了众多运维工具(puppet(ruby).cfengine.chef.func.fabric.)的优点,实现了 ... 
随机推荐
- 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 ... 
- 英码科技边缘计算智慧工地解决方案——给工地戴上AI“安全帽”
			据统计显示,2021年全国共发生房屋市政工程生产安全事故734起,死亡840人:且近3年来,工地事故数量.死亡人数连续攀升.这不仅仅是一个普通的数字,每个数字都代表一个独特.鲜活的生命.为什么每年会发 ... 
- c语言中%d %f %c %s等的区别
			%d整型输出(%ld长整型输出)%f以小数形式输出,默认情况下保留小数点6位 这里是引用%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号.其中:float,单精度浮 ... 
- adb命令1
			adb是什么 adb的全称为Android Debug Bridge,就是起到调试桥的作用.它就是一个命令行窗口,用于通过电脑端与模拟器或者是设备之间的交互. adb有什么用 借助adb工具,我们可以 ... 
- python和java语法对比
			python java 不同的关键字 except,nolocal,as,assert,async,pass ,await,from,raise,global,in,del,with,lambda ... 
- HTTPS、HTTP/2前端入门篇
			随着网络安全重要性日益凸显,越来越多的站点已经全站切换到HTTPS,其中很多HTTPS站点同时将HTTP协议升级到了HTTP/2.作为一只前端,最近一直在学习和应用相关知识点,便总结梳理如下. 一.何 ... 
- FinOps首次超越安全成为企业头等大事丨云计算趋势报告
			随着云计算在过去十年中的广泛应用,云计算用户所面临的一个持续不变的趋势是:安全一直是用户面临的首要挑战.然而,这种情况正在发生转变. 知名IT软件企业 Flexera 对云计算决策者进行年度调研已经持 ... 
- Harmonic Number 调和级数(欧拉常数)或者分块暴力
			给你个n让你求 Memory limit 32768 kB 输出误差不超过1e-8 思路:做之前不知都调和级数不知道欧拉常数没问题,肯定能先想到暴力打标,打完发现数组内存太大,那么问题就是怎么能让内存 ... 
- RunnerGo可视化场景管理,还原真实场景
			在进行性能测试时,测试场景的正确配置非常关键.首先,需要根据业务场景和需求,设计出合理的测试场景,再利用相应的工具进行配置,实现自动化的性能测试. 在JMeter中,用户需要自己组织测试场景,或是在同 ... 
- 【ACM算法竞赛日常训练】DAY2题解与分析【比赛】【数学考试】【简单瞎搞题】
			DAY2共三题: 比赛(概率) 数学考试(前缀和与思维) 简单瞎搞题(dp) 视频讲解:https://www.bilibili.com/video/BV1hP411o7RD/ 作者:Eriktse ... 
