自动化运维工具ansible常用模块

ansible-doc 模块手册

[root@nb01 ~]# ansible-doc -l | wc -l
1378 ###模块数高大1378个
[root@nb01 ~]# ansible-doc -help ###ansible-doc 的帮助命令
[root@nb01 ~]# ansible-doc ping ##查看ping模块的详细帮助相当于shell的man帮助

##01.command模块 ##远程控制执行命令的模块;ansible默认模块 格式:ansible 主机名[主机组名] -m command -a '命令’

[root@nb01 ~]# ansible web -m command -a 'uptime'		 ##查看公司web集群的负载
[root@nb01 ~]# ansible all -m command -a 'date+%F_%T'		##查看所有主机的日期和时间
	command模块局限性:
		执行不了由shell解析的命令;不能解析系统变量;执行命令中有< 、>、|、&等符号都执行不了;
			[root@nb02 ~]# ansible all  -m command -a 'echo ${HOSTNAME}'		##解析不了
		原因是:该模块不启动shell;直接在ssh进程中执行命令;
[root@nb02 ~]# ansible cache -m command -a 'ps-ef | grep sshd'				##因为管道符 解析不了

##02.shell模块 ##远程控制执行命令的模块

[root@nb02 ~]# ansible cache -m shell -a 'ps-ef | grep sshd'						##换成shell模块可以解析
[root@nb02 ~]# ansible all  -m shell -a 'echo ${HOSTNAME}'					##可以解析输出所有主机名
	**所以我们一般工作中shell的使用率高**

**## **testfile 文件在哪里?

ansible cache -m shell -a ‘cd /tmp’
ansible cache -m shell -a ‘touch testfile’**** ##文件在根下创建的原因是cd在在远程连接是失效

*****执行以下命令说明原因?

**ansible web -m shell -a “echo ${HOSTNAME}”
ansible web -m shell -a ‘echo ${HOSTNAME}’

“echo ${HOSTNAME}”—》第一次解析(本机解析;输出本机主机名即跳板机的主机名)—》发送给远程主机—》第二次解析(远程主机解析;由于此命令没啥解析的所以输出的还是跳板机的主机名)–>输出的结果是ecs-proxy(跳板机主机名)

‘echo ${HOSTNAME}’—》第一次解析(本地主机不解析)—》发送给远程主机–》(远程主机解析;输出为远程主机的主机名)—》所以输出结果是web集群主机的主机名web1…webn

###相当于ssh web1 ‘echo ${HOSTNAME}’ 和 ssh web1 “echo ${HOSTNAME}” 的执行

所以在

远程执行命令时必须考虑到命令的二次解析

[root@nb02 ~]# id nb ##查看系统没有nb用户
id: nb: no such user
[root@nb02 ~]# ansible web1,cache -m command -a ‘useradd nb’ ##给web1、cache主机创建nb用户并设置密码123
[root@nb02 ~]# ansible web1,cache -m shell -a ‘echo 123 | passwd --stdin nb’

script模块

[root@nb02 ~]# cd /usr/
[root@nb02 usr]# cd ansible
[root@nb02 ansible]# vim uu.sh ##本地创建脚本然后远程执行脚本;给web集群所有主机添加用户;有nb没wk;wk密码是456
#!/bin/bash
id nb
if [ $? != 0 ];then
useradd wk
echo 456 | passwd --stdin wk
fi

[root@nb02 ansible]# ansible web -m script -a ‘./uu.sh’ ##远程执行脚本;

yum模块

**使用yum包管理器管理软件包
	name要管理的软件包名称
	state动作(installd#安装 removed#卸载)**

给所有db集群安装mariadb数据库软件

	[root@nb02 ~]# ansible db -m yum -a 'name="mariadb-server" state=installed'
卸载掉cache集群上所有主机的上传下载

[root@nb02 ~]# ansible cache -m yum -a ‘name=lrzaz state=removed’

service 模块

name:必选选项;服务名称

enabled:是否开机自启 yes|no

		sleep :执行restartd;会在stop和start之间睡眠几秒

state :对服务执行启动、停止、重启、重新加载、等操作(started、stopped、restarted、reloaded)

##给cache缓存服务器上的ssh服务设置启动和开机自启
[root@nb02 ~]# ansible cache -m service -a ‘name=“sshd” enabled=“yes” state=“started”’
幂等性

copy模块:管理服务的配置文件

复制文件到远程主机:

src(代表源主机):复制文件到远程主机;绝对路径和相对路径都可以;路径为目录时会递归复制。 若路径以“/”结尾,只是复制目录里边的内容;若路径不以‘/’结尾,则复制包含目录在内的所有内容,类似rsync;

##dest (代表远程主机):远程主机的绝对路径。如果源文件是个目录则该路径必须是个目录

#backup:覆盖前先备份原文件、备份文件包含时间信息等;有两个选项yes|no
#force :若目标主机包含该文件,但内容不同,如果设置为yes则强制覆盖;为no时,则只有当目标主机的目标位置不存在时该文件才会复制。默认为yes;

[root@nb02 ~]# ansible all -m copy -a ‘src=/etc/resolv.conf dest=/etc/resolv.conf’ ##复制文件
[root@nb02 ~]# ansibe all -m copy -a ‘src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/’ ##复制目录

lineinfile模块

****类似sed的一种行编辑替换模块
path目标文件文件
regexp 正则表达式 要修改的行
line 最终修改的结果****

##修改bin-log日志
[root@nb01 ~]# ansible db -m lineinfile -a 'path="/etc/my.cnf" rregexp="^binlog-format" line="binlog-format = row" '

replace模块

类似sed的一种行编辑替换模块
path 目的文件
regexp正则表达式 要修改大位置
replace 替换后的结果
实例:替换指定字符;row -->mixed
	[root@nb01 ~]# ansible db -m replace -a 'path="/etc/my.cnf" regexp="row" replace="mixed"'

setup模块

主要用于获取主机信息;playbooks里边经常会用到的另一个参数gather_facts与该模块相关;setup模块经常使用的是filer参数

#####实例: filer过滤所需信息
[root@nb01 ~]# ansible cache -m setup -a ‘filter=ansible_distrlbution’

你可能感兴趣的:(大型架构)