ansible 语法
1、语法
* ansible <host-pattern> [options][-m module_name] [-a args]
* options
-b 以root权限执行
-v -vv -vvv
2、常用模块
command模块
# command 命令模块用于在远程主机执行命令,不能使用变量,管道等
cron模块
# cron模块,定时任务
#模块选项
month:指定月份
minute: 指定分钟
job: 指定任务
day: 指定哪一天
hour: 指定小时
weekday:表示周几
state: 表示是添加还是删除,present:添加,absent:移除
# 示例
ansible test -m cron -a 'minute="*/10" job="/bin/echo hello"'
user模块
# user模块: 用户账号管理
# 模块选项
name:用户名
uid:指定uid
state:指定状态
group:指定组名
groups:指定附加组
home:指定家目录
createhome:是否创建家目录yes or no
comment:注释信息
system:是否是系统用户yes or no
#示例
ansible test -m user -a 'name="user1"'
group 模块
# group 组管理
# 模块选项
gid gid
name:组名
state:状态
system:是都是系统组yes or no
# 示例
ansible test -m group -a 'name=mysql gid=306 system=yes'
copy模块
# copy 文件复制(复制本地文件到远程主机的指定位置)
# 模块选项
src:指定本地源文件路径
dest:指定远程目录文件路径
owner:属组
group:属组
mode:权限
content:取代src=,标识直接用此处的信息生成文件内容
# 示例
ansible all -m copy -a 'src=/etc/fstab dest=/tmp/fstab owner=root mode=0640'
file模块
# file 设置文件的属性
# 模块选项
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况,存在的文件
dest:被链接到的路径,只应用于state=link的情况
state: directory:如果目录不存在,创建目录 file:即使文件不存在,也不会被创建 link:创建软链接 hard:创建硬链接 touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间 absent:删除目录、文件或者取消链接文件
service模块
# service 管理服务运行状态
# 模块选项
enabled:是否开机自动启动
name:指定服务名
state:指定服务状态
started:启动服务
stoped:停止服务
restarted:重启服务
arguments:服务参数
#示例
ansible test -m service -a 'enabled=true name=httpd state=started'
shell模块
# shell 在远程主机上运行命令,尤其是用到管道变量等功能的负载命令
script模块
# script 将本地脚本复制到远程主机并运行
# 示例
ansible all -m script -a '/data/test.sh'
yum模块
# yum 安装程序包
# 模块选项
name:程序包名称(不指定版本默认安装最新版本)
state: 状态 present,latest 表示安装,absent表示卸载
# 示例
ansible all -m yum -a 'name=ntpdate state=absent'
setup模块
# setup 收集远程主机的facts
每个被管理节点在接受并运行管理命令之前,会将自己主机相关信息,如操作系统版本,ip地址。
# 模块选线
--tree 将所有主机的输出信息保存到/tmp目录下,以/ect/ansible/hosts里的主机名为文件名
filter 过滤关键字:
ansible db -m setup -a 'filter=ansible_distribution_version'
具体有哪些关键字可 https://www.cnblogs.com/happy-king/p/9013312.html
synchronize模块
# synchronize模块:使用rsync同步文件
# 模块选项
archive: 归档,相当于同时开启recursive(递归)、links、perms、times、owner、group、-D选项都为yes ,默认该项为开启
checksum: 跳过检测sum值,默认关闭
compress:是否开启压缩
copy_links:复制链接文件,默认为no ,注意后面还有一个links参数
delete: 删除不存在的文件,默认no
dest:目录路径
dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议
dirs:传速目录不进行递归,默认为no,即进行目录递归
rsync_opts:rsync参数部分
set_remote_user:主要用于/etc/ansible/hosts中定义或默认使用的用户与rsync使用的用户不同的情况
mode: push或pull 模块,push模的话,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件
mount模块
# mount模块:磁盘挂载
# 模块选项
dump fstype:必选项,挂载文件的类型
name:必选项,挂载点
opts:传递给mount命令的参数
src:必选项,要挂载的文件
state:必选项 present:只处理fstab中的配置 absent:删除挂载点 mounted:自动创建挂载点并挂载之 umounted:卸载
# 示例
ansible test -m mount 'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'
get_url模块
# get_url:用于将文件或软件从http、https或ftp下载到本地节点上
# 模块选项
dest: 指定将文件下载的绝对路径---必须
url: 文件的下载地址(网址)---必须
url_username: 用于http基本认证的用户名
url_password: 用于http基本认证的密码
validate_certs: 如果否,SSL证书将不会验证。这只应在使用自签名证书的个人控制站点上使用
owner: 指定属主
group: 指定属组
mode: 指定权限
# 示例
ansible test -m get_url -a "url=http://nginx.org/download/nginx-1.16.1.tar.gz dest=/tmp/"
unarchive模块
# unarchive模块:将压缩包解压传送
1、将ansible主机上的压缩包在本地解压缩后传到远程主机上,这种情况下,copy=yes.本地解压缩,解压缩位置不是默认的目录,没找到或传完删了后传到远程主机
2、将远程主机上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no远程主机上面的操作,不涉及ansible服务端
# 模块选项
copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件
src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
git模块
# git 在远程服务器上执行git相关操作。依赖于git命令,需要在远程主机上先进性安装。
# 模块选项
repo:远程git库的地址,可以是一个git协议,ssh协议或者http协议的git库地址
dest:必选参数,git库clone到本地服务器以后保存的绝对路径
version:克隆远程git库的版本,取值可以为HEAD,分支名称,tag的名称,也可以是一个commit的hash值
foces:默认为no,当该选项为yes时,如果本地git库有修改,将会抛弃本地的修改(强制覆盖)
accept_hostkey: 当该选项取值为yes时,如果git库服务器不再know_hosts中,则添加到know_hosts中,key_file指定克隆远程git库地址时使用的私钥。
其他模块
https://docs.ansible.com/ansible/latest/modules/https://docs.ansible.com/ansible/latest/modules/modules_by_category.html