「这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战」
ansible的临时命令及常用模块分析
执行ansible命令之后,返回的颜色代表的含义
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败
1 command 模块
ansiblede 默认模块
ansible webserve -m command -a 'xxxxx'
-a后面跟对应的linux命令,虽然很强大,但是对于一些复杂的linux命令不支持,如管道符、导出符等
2 shell模块
类似command模块,都是操作Linux命令的模块,比command模块强大,支持很多linux命令
ansible webserve -m shell -a 'echo HOSTNAME'
3 script模块
可以用来执行远程主机上的bash脚本,注意是远程主机
ansible webserve -m script -a /data/xxx.sh
4 copy模块
从主控端复制文件到被控端
ansible webserve -m copy -a "src=源路径 dest=目标路径 "
目标路径后面还可以跟一些参数,比如允许访问的权限,管理的用户组等
5 fetch模块
从远程主机拉取文件到ansible端
ansible webserve -m fetch -a 'src=远程主机路径 dest=ansible路径'
6 file模块
对文件属性进行设置
ansible webserve -m file -a 'path=路径/文件名 设置参数'
后面可以跟一些设置的参数信息
7 unarchive模块
解包解压缩
- 将ansible主机上的压缩包传到远程主机之后解压缩到特定目录,设置copy=yes
- 将远程主机某个压缩文件解压缩到指定路径,设置copy=no
常见参数
- copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no,会在远程主机上寻找src源文件
- remote_src:和copy功能一样且互斥,yes表示在远程主机,不在ansible主机,no表示文件在ansible主机上
- src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
- dest:远程主机上的目标路径
- mode:设置解压缩后的文件权限
ansible webserve -m unarchive -a 'src=文件路径 dest=解压缩路径'
8 archive模块
打包压缩
ansible webserve -m archive -a 'path=需要打包的文件夹 dest=指定压缩文件存放路径及压缩文件名 '
后面可以跟其他参数
9 hostname模块
管理主机名
ansible webserve -m hostname -a "name=主机名"
10 cron模块
设置定时执行的任务
支持时间:minute,hour,day,month,weekday
ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &>/dev/null' name=Synctime"
11 yum模块
管理软件包,如下载等,注意:只支持RHEL,CentOs,fedora,不支持ubuntu等其他版本(使用的其他下载源)
ansible webserve -m yum -a 'name=httpd state=present'
state参数,present表示安装,absent表示删除
12 service模块
管理服务,比如重启,关闭,启动等
ansible webserve -m service -a 'name=httpd state=started enabled=yes'
注意后面的参数信息,name表示服务名,state表示操作的状态
13 user模块
管理用户信息
ansible webserve -m user -a 'name=user1 comment="first user" uid=2048 home=/app/user1 group=root
注意后面的参数信息name表示管理的用户名,comment表示描述,uid表示用户的唯一标识信息,home标识用户的根目录信息,group标识用户归属于哪个组
14 group模块
管理组信息
ansible webserve -m group -a 'name=nginx gid=88 system=yes'
name表示组名,git标识组,system
15 lineinfile模块
这个,,,,看不懂啊
16 replace模块
这个,也看不懂啊
17 setup模块
获取主机信息,如获取某某软件的版本信息等
ansible webserve -m setup -a "filter=ansible_hostname"
ansible操作playBook
Hosts:运行执行任务(task)的目标主机 remote_user:在远程主机上执行任务的用户 tasks:任务列表 handlers:任务,与tasks不同的是只有在接受到通知时才会被触发 templates:使用模板语言的文本文件,使用jinja2语法。 variables:变量,变量替换{{ variable_name }}
模板
---
- hosts: webserve
remote_user: root
tashs:
- name: 该任务的名字
ping: 这个ping可以是任意下面执行的模块名
remote_user: 其中操作的用户信息
sudo: 是否切换用户
xxxxxxxxx
案例
---
- hosts: websrvs
remote_user: root
tasks:
- name: "安装Apache"
yum: name=httpd
- name: "复制配置文件"
copy: src=/tmp/httpd.conf dest=/etc/httpd/conf/
- name: "复制配置文件"
copy: src=/tmp/vhosts.conf dest=/etc/httpd/conf.d/
- name: "启动Apache,并设置开机启动"
service: name=httpd state=started enabled=yes
ansible的roles(批量playBook的集合)
附录
1. 命令
# 显示模块的帮助信息
ansible-doc [option] [module...]
ansible-doc ping
-s 可以显示简洁信息
ansible-doc -s ping
2. linux命令
# 生成秘钥对
ssh-keygen
# 然后一直回车
# 复制文件到另一个主机上
#在本机135主机向137传输:
scp 本机文件路径 另一台账号@192.168.60.137:另一台储存路径
#在137主机,从135拉取:
scp 远程用户名@192.168.60.153:文件的绝对路径 本地Linux系统路径