Ansible模块----------千古兴亡多少事,悠悠,不尽长江滚滚流

六、Ansible命令模块

6.1、command模块(不识别特殊符号)

1)介绍

command模块可以帮助我们在远程主机上执行命令。
注意:使用command模块在远程主机中执行命令时,不会经过远程主机的shell处理,在使用command模块是,如果需要执行的命令中含有'重定向'、'管道符等'操作时,这些符号也会'失效'。比如:'< > | , &' 这些符号,如果你需要这些功能,可以参考后面介绍的shell模块

2)参数

# chdir		
执行命令前,切换到指定目录
# creates	
当该文件存在时,则不执行该步骤,不存在的时,则执行
# remove	
当该文件不存在时,则执行该步骤

3)案例

ansible web02 -m command -a 'chdir=/mnt ls'
# 切换到指定目录执行命令
ansible web02 -m command -a 'chdir=/mnt removes=iphone mkdir 111'
# 当文件存在时,执行后面的命令
ansible web02 -m command -a 'chdie=/mnt creates=iphone mkdir 1111'
# 当文件存在时,不执行后面的命令,当文件不存在时,执行后面的命令

6.2、shell模块

1)介绍

shell模块可以帮助我们在远程主机上执行命令。与command模块不同的是,shell模块在远程主机中执行命令时,会经过远程主机上的/bin/bash 程序处理

2)参数

#	chdir
执行命令前,切换到目录
#	cretes
当该文件存在时,不执行该步骤,文件不存在时,则执行
#	removes
当该文件不存在时,则执行该步骤
#	executable
默认情况下,shell模块会调用远程主机中的/bin/bash去执行对应的命令,通常情况下,远程主机中的默认shell都是bash,如果你想要使用其他类型的shell执行命令,则可以使用此参数指定某种类型的shell去执行对应的命令,指定shell文件时,需要使用绝对路径。

3)案例

ansible web02 -m shell -a "'chdir=/mnt ps -ef | awk {print $2}'"
# 注意使用双引号和单引号,正常使用单引号是没有问题的,但是指令中包含了单引号,就要把使用双引号
ansible web02 -m shell -a "executable=/bin/bash ps -ef | awk '{print \$2}'"

6.3、script模块

1)介绍

script模块可以帮助我们在远程主机上执行ansible管理主机上的脚本,也就是说,'脚本'一直存在与'ansible'管理主机'本地','不需要'手动'拷贝'到远程主机后再执行。

2)参数

#	chdir
执行命令前,切换到指定目录
#	creates
当该文件存在时,则不执行该步骤,不存在时,则执行
#	removes
当该文件存在时,则执行该步骤

3)案例

ansible web02 -m script -a 'chdir=/mnt ./test.sh'
# 剧本内写法
- hosts: all
  tasks:
    script: ./hostadd
# 默认在/root/下执行 

七、Ansible软件管理模块

7.1、yum模块

1)介绍

yum模块可以帮助我们在远程主机上通过yum源管理软件包

2)参数

#	name
必须参数,用于指定需要管理的软件包,比如nginx

#	state
用于指定软件包的状态,默认值为present。
	# present & installed
	表示确保软件包已经安装,如果没有就会自动安装
	# latest
	表示安装yum中最新版本
	# absent & removed
	表示删除对应的软件包
	
#	disable_gpg_check
用于禁用对rom包的公钥gpg验证,默认值为 no ,表示不禁用验证,设置为yes表示禁用验证,既不验证包,直接安装

# 	enablerepo
用于指定安装软件包时临时启用的yum源

#	disablerepo
用于指定安装软件包时临时禁用的yum源

#	download_only
只下载不安装

3)案例

ansible web02 -m yum -a 'name=nginx disable_gpg_check-yes state=present' 
# nginx确保下载,不检查包。

ansible web02 -m yum -a 'name=nginx disable_gpg_check state=latest'
# nginx下载最新版,不检查包

ansible web02 -m yum -a 'name=nginx disable_gpg_check state=removed'
ansible web02 -m yum -a 'name=nginx state=absent'
# 卸载nginx

ansible web02 -m yum -a 'name=nginx disablerepo=nginx.repo state=present'
#	临时禁用的yum源

ansible web02 -m yum -a 'name=nginx disable_gpg_check disablerepo=epel enablerepo=nginx-stable state=present'
# 临时禁用指定源和临时开启指定源

7.2、yum_repository模块

1)介绍

yum_repository模块可以帮助我们管理远程主机上的yum仓库

2)参数

#	name
必须参数,用于指定要操作的唯一的仓库ID,也就是*.repo配置文件中每个仓库对应的'中括号'内的仓库名字(ID)

#	baseurl
此参数用于设置yum仓库的baseurl

#	description
此参数用于设置仓库的注释信息,也就是*.repo配置文件中每个仓库对用的'name字段'对应的内容

#	file
此参数用于设置仓库的配置文件名称,即设置*.repo配置文件的文件名前缀,在不使用此参数的情况下,默认以'name参数'的仓库IP作为文件名前缀,同一个yum源配置文件中可以存在多个源

#	enabled
设置是否激活对应的yum源,默认值为yes,表示启用对应的yum源,设置为no表示不启用对应的yum源

#	gpgcheck
设置是否开启rpm包验证功能,默认值为no,表示不起拥抱验证,设置为yes表示开启包验证功能

#	state
默认值为present,设置为absent时,表示删除对应的yum源

3)案例

#添加yum仓库
[root@m01 ~]# ansible web_group -m yum_repository -a "name=papa_epel description=EPEL baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/" -i ./hosts
 
#仓库名和配置文件名不同
[root@m01 ~]# ansible web_group -m yum_repository -a 'name=papa_epel description=EPEL file=test_papa baseurl=https://download.fedoraproject.org/pub/base/$releasever/$basearch/ gpgcheck=no' -i ./hosts
 
#添加mirrorlist
[root@m01 ~]# ansible web_group -m yum_repository -a 'name=papa_epel description=EPEL file=test_papa baseurl=https://download.fedoraproject.org/pub/base/$releasever/$basearch/ gpgcheck=no mirrorlist=http://mirrorlist.repoforge.org/el7/mirrors-rpmforge enabled=no' -i ./hosts
 
#删除yum仓库及文件
[root@m01 ~]# ansible web_group -m yum_repository -a 'name=papa_epel file=test_papa state=absent' -i ./hosts
 
#开起gpgcheck
[root@m01 ~]# ansible web_group -m yum_repository -a 'name=papa_epel description=EPEL file=test_papa baseurl=https://download.fedoraproject.org/pub/base/$releasever/$basearch/ gpgcheck=yes gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7' -i ./hosts
 
name        #指定仓库名,如果没有file则为仓库文件名
baseurl     #指定yum源
gpgcheck    #指定检查秘钥
    no
    yes
 
enabled     #是否启用仓库
    no
    yes

ansible web_group -m yum_repository -a 'name=aliEPEL description="alibabaEPEL" baseurl=https://mirrors.aliyun.com/epel/$releasever\Server/$basearch/'
#	添加仓库

ansible web_group -m yum_repository -a 'name=aliEPEL description="alibabaEPEL" baseurl=https://mirrors.aliyun.com/pypi/simple/ file=local enabled=no gpgcheck=no state=absent'

八、文件管理模块

8.1、copy模块

1)介绍

copy模块的作用就是拷贝文件(拷贝到远程主机)
#  template  支持内置变量推送文件,用法和copy一样

2)参数

#	src
用于指定需要copy的文件或目录

#	dest
用于指定文件将被拷贝到远程主机的那个目录中,必须参数

#	content
当不适用src指定拷贝的文件时,可使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。#覆盖源文件,变为你指定的内容

#	force
当远程主机的目标路径中已经存在同名的文件,并且ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no则不会执行覆盖拷贝操作,远程主机中的文件保持不变。

#	backup
当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机的文件,然后再将ansible主机中的文件拷贝至远程主机。

#	owner
指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。

#	group
指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。

#	mode
指定文件拷贝到远程主机后的权限,可以使用 mode=0644 ,或者使用 mode=u+x 表示。

3)案例

# 推送yum源文件到远端
asible web_group -m copy -a 'src=/mnt/1.txt dest=/mnt'
# 推送rsync密码文件授权
ansible web_group -m copy -a 'src=/etc/rsync.pass dest=/etc/ mode=600'
# 推送站点文件并授权属主属组
ansible web_group -m copy -a 'src=/mnt/1.txt dest=/mnt/ owner=www group=www'
# 推送文件并备份
ansible web_group -m copy -a 'src=/mnt/1.txt dest=/mnt backup=yes'
# 直接将内容写入文件
ansible web_group -m copy -a 'content="papacnb" dest=/mnt/1.txt'

8.2、fetch模块

1)介绍

此模块可以将远程主机的文件拉取到本地主机的某一个目录下
# 只能拉取文件,拉到本地后会生成以ip地址命名的目录

2)参数

#	src
指定从受管主机中拉取哪个文件

#	dest
指定拉取文件到本地后,文件存放的位置。

3)案例

ansible web02 -m fetch -a 'src=/root/2.txt dest=/mnt/'

8.3、file模块

1)介绍

file模块可以帮助我们完成一些对文件的基本操作,比如,创建文件或目录、删除文件或目录,修改文件权限等等

2)参数

#	force
需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况,另一种时目标软连接已存在,需要先取消之前的软链接,然后再创建软链接,两种选项 yes | no

#	group
定义文件目录的属组

#	owner
定义文件目录的属主

#	mode
定义目录的权限

#	path
必选项,定义文件目录的路径

#	recurse
递归的设置文件的属性,只对目录有效

#	src
要被软链接的源文件的路径,只适用于 state=link 的情况下

#	dest
被连接到的路径,只适用于 state=link 的情况下

#	state
状态
	# directory
		如果目录不存在,创建目录
	# file
		和touch同功能
	# linke
		创建软件链接
	# hard
		创建硬链接
	# touch
		如果文件不存在,创建新文件,如果存在,更新最后修改时间
	# absent
		删除目录文件或者取消连接文件

8.4、get_url模块

1)介绍

用于将文件或者软件从http、https、或ftp下载到本地节点上或被管理机节点上

2)参数

#	dest
下载到哪里(绝对路径),如果目标是一个目录,就用服务器上面文件的名称,如果目标设置了名称,就用目标设置的名称

#	url
文件下载地址

#	owner
指定属主

#	group
指定属组

#	mode
指定权限

#	sha256sum
如果将SHA-256校验和传递给此参数,目标文件的摘要将在下载后计算,以确保其完整性
#	checksum
验证方式

3)案例

ansible web02 -m get_url -a 'url=http://10.0.0.7/1.txt dest=/root'

九、Ansible服务模块

9.1、service模块

1)介绍

service模块可以帮助我们管理远程主机上的服务,比如启动或者停止远程主机上的nginx服务

2)参数

#	name
指定需要操作的服务的名称,如 niginx

#	state
指定服务状态,启动或者停止,重启。
1.started	启动
2.stopped	停止
3.restarted	重启
4.reloaded	重载

#	enabled
设置开启启动项,yes表示对应服务设置为开机启动,no为表示不开开机启动

3)案例

ansible web02 -m service -a 'name=nginx state=started'
ansible web02 -m service -a 'name=nginx state=stopped'

9.2、systemd模块

1)介绍

systemd 模块用于控制远程主机的systemd服务,说白了就是linux下的systemd命令,需要远程主机支持systemd,用法和service模块基本相同

2)参数

#	name
服务名称
#	state
执行什么命令
#	enabled
是否设置开启自启动

3)案例

ansible web02 -m systemd -a 'name=nginx state=enabled'

十、用户管理模块

10.1、group模块

1)介绍

用于组的创建和删除

2)参数

#	name
组名称
#	state
状态
	# present
		创建组
	# absent
		删除组
#	gid
指定组id

3)案例

#	创建组
ansible web02 -m group -a 'name=papa state=present gid=666'
#	删除组
ansible web02 -m group -a 'name=papa state=absent'
#	修改组
ansible web02 -m group -a 'name=papa state=present gid=777'

10.2、user模块

1)介绍

创建、修改或删除用户

2)参数

#	name
用户名字
#	uid
用户uid
#	group
用户所在的组
#shell
指定用户解析器 /bin/bash 可以登录 /sbin/nologin不能登录
#	state
	# absent 删除用户
	# present 创建用户
#	create_home
是否创建家目录 ture/false
#	remove
移除家目录

3)案例

# 创建用户,不需要登录,有家目录
ansible web02 -m user -a 'name=papa state=present create_home=ture shell=/sbin/nologin uid=888 gid=888'
# 删除用户并移除家目录
ansible web02 -m user -a 'name=papa state=absent remove=yes'

十一、其他模块

11.1、mount模块

1)介绍

用于挂载目录

2)参数

#	src
远端挂载路径
#	path
本机挂载的路径
# 	fstype
挂载的类型
#	opts
挂载权限 /etc/fstab中的内容 defualt
#	state
	# present	配置开机挂载,写入自动挂载文件,此刻没有挂载
	# unmount	取消挂载,没有删除开机自动挂载
	# mounted	配置开机挂载,此刻挂载目录
	# absent	取消挂载,并且删除开机自动挂载

3)案例

# 配置开机挂载,将配置写入自动挂载文件,并没有直接挂载
ansible web02 -m mount -a 'src=172.16.1.51:/data path=/data fstype=nfs opts=default state=present'

# 配置开机挂载,并直接挂载上
ansible wen02 -m mount -a 'src=172.16.1.51:/data path=/data opts=defualt fstype=nfs state=mounted'

# 取消挂载,但没有删除自动挂载配置
ansible web02 -m mount -a 'state=unmount path=/data'

11.2、unarchive模块

1)介绍

解压复制远程主机上的压缩文件

2)参数

#	copy
默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件

#	src
源路径,可以sansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,需要设置 copy=no

#	dest
远程主机上的目标路径

#	mode
设置解压后的文件权限

3)案例

#	在远程主机上解压文件并设置权限
# 在远程主机上解压文件并设置权限
ansible all -m unarchive -a 'src=/srv/tomcat8/apache-tomcat-8.0.29.tar.gz dest=/usr/local copy=no mode=0755'

# 解压ansible管理机上的压缩文件到远程主机并设置权限
ansible all -m unarchive -a "src=/tmp/install/zabbix-3.0.4.tar.gz dest=/tmp/ mode=0755 copy=yes"

11.3、cron模块

1)介绍

cron模块可以帮助我们管理远程主机中的计划任务,功能相当于crontab命令

# 注意
1.定时任务添加,是通过名字来区分是否一样的,如果不加name参数,则会添加重复的定时任务
2.定时任务注释是通过 name 参数来注释的,所以一定要加 name 参数
3.定时任务删除也是通过 name 参数来删除的,所以一定要加 name 参数

2)参数

#	name
定时任务的备注
#	minute
分钟
#	hour
	小时
#	day
天
#	weekday
周
#	month
月
#	job
指定的定时任务内容
#	state
	# present 新建定时任务
	# absent 删除定时任务
#	disabled
	yes	注释定时任务
	no 取消注释

3)案例

#添加定时任务,每五分钟执行一次时间同步(只配置分钟,其他不配置默认是 * )
[root@m01 ~]# ansible web01 -m cron -a 'name="测试ansible配置定时任务" minute=*/5 job="ntpdate time1.aliyun.com"'
#查看配置
[root@web01 html]# crontab -l
#Ansible: 测试ansible配置定时任务
*/5 * * * * ntpdate time1.aliyun.com
 
#注释定时任务
[root@m01 ~]# ansible web01 -m cron -a 'name="测试ansible配置定时任务" minute=*/5 job="ntpdate time1.aliyun.com" disabled=yes'
 
#删除定时任务
[root@m01 ~]# ansible web01 -m cron -a 'name="测试ansible配置定时任务" minute=*/5 job="ntpdate time1.aliyun.com" state=absent'

11.4、selinux模块

1)介绍

配置SELINUX策略,需要重启机器

2)参数

#	state
	# enforcing	启用
	# permissive 临时关闭
	# disabled 禁用

3)案例

#	临时关闭selinux
ansible web02 -m selinux -a 'state=permissive'
#	永久关闭
ansible web02 -m selinux -a 'state=disabled'

11.5、firewalld模块

1)介绍

管理firewalld服务开启禁用

2)参数

#	service
指定服务
#	premanent
是否用就生效
	yes 永久生效
	no 临时生效
#	state
	enabled 允许通过
#	port
	8081/tcp 指定端口
#	zone:dmz
指定区域
#	rich_rule:rule service name="ftp" audit limit value="1/m" accept
source: 192.0.2.0/24     #指定网段
interface: eth2         #帮定网卡
masquerade: yes         #开启IP伪装

3)案例

#允许访问http服务,永久生效
[root@m01 ~]# ansible web01 -m firewalld -a 'service=http permanent=yes state=enabled'
[root@m01 ~]# ansible web01 -m firewalld -a 'service=http state=enabled'
 
#允许访问80端口,临时生效
[root@m01 ~]# ansible web01 -m firewalld -a 'port=80/tcp state=enabled'
 
#配置允许10.0.0.0网段访问22端口
[root@m01 ~]# ansible web01 -m firewalld -a 'rich_rule="rule family=ipv4 source address=10.0.0.0/24 port port=22 protocol=tcp accept" state=enabled'
 
#配置网段白名单
[root@m01 ~]# ansible web01 -m firewalld -a 'source=10.0.0.0/24 zone=trusted state=enabled permanent=yes'
[root@m01 ~]# ansible web01 -m firewalld -a 'source=10.0.0.0/24 zone=trusted state=enabled permanent=no'

11.6、unarchive解压模块

1)语法参数

[root@m01 ~]# ansible-doc unarchive
EXAMPLES:
- name: Extract foo.tgz into /var/lib/foo
  unarchive:
    src: foo.tgz
    dest: /var/lib/foo
    remote_src: no          #默认是no
 
src         #包的路径
dest        #解压后的目标路径
remote_src
    yes     #包在受控端服务器上
    no      #包在控制端服务器上

2)案例

#解压包到受控端,包在控制端上
[root@m01 ~]# ansible web01 -m unarchive -a 'src=/root/php.tar.gz dest=/tmp'
:
#在受控端解压包,包在受控端
[root@m01 ~]# ansible web01 -m unarchive -a 'src=/tmp/php.tar.gz dest=/tmp remote_src=yes'

11.7、setup模块

1)介绍

获取主机所有信息

2)参数

# 常用参数
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_fqdn:仅显示主机名。
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个数(只显示总的个数)。

3)案例

1.获取web01主机所有信息
#	ansible web01 -m setup
2.获取主机ip
ansible web01 -m setup -a 'filter=ansible_eth1.ipv4.address'
3.获取主机名
ansible web01 -m setup -a 'filter=ansible_fqdn'
4.获取内存信息
ansible web01 -m setup -a 'filter=ansible_memory_m'

5.时间
"{{ansible_date_time.date}}"

11.8、Mysql相关模块

1)介绍

远程操作数据库

# 使用mysql_db的前提:
需要安装MySQL-python (在DB端安装,yum install MySQL-python),安装的pymysql模块最主要的功能是让ansible能够操作mysql

2)参数

#	mysql_db
1.  name	#库的名字
2.	state	#状态
	present		#创建库
	import		#导入数据库
	dump		#导出数据库
	target		#导入或者导出的数据库文件
	
	
#	mysql_user
1.	name		#用户名
2.	host		#用户连接的主机
3.	password	#用户密码
4.	priv		#用户权限
5. state		#状态
	present		#创建用户
	absent		#删除用户
	

远程主机连接授权
#	grant all privileges on *.* to root@'172.16.1.%' identified by '123'	

3)案例

1.远程创建一个名为wordpress1的数据库

ansible db01 -m mysql_db -a 'name=wordpress1 state=present login_user=root login_password=123'

2.导出discuz数据库中所有数据

ansible db01 -m mysql_db -a 'name=discuz state=dump login_user=root login_password=123 target=/root/discuz.sql' #导出的内容在DB端

ansible db01 -m mysql_db -a 'name=discuz state=import target=/root/discuz.sql login_user=root login_password=123'

3.创建一个远程连接数据库用户

ansible db01 -m mysql_user -a 'name=discuz host=% password=123 priv=*.*:ALL state=present login_user=root login_password=123 '
posted @ 2021-09-13 10:46  郝怕怕  阅读(188)  评论(0编辑  收藏  举报