一.ansible 命令详解
可以通过 ansible -h
来查看帮助,下面我们列出一些比较常用的选项,并解释其含义:
-a MODULE_ARGS
##模块的参数,如果执行默认COMMAND的模块,即是命令参数,如: “date”,“pwd”等等 -k
,--ask-pass
#ask for SSH password。登录密码,提示输入SSH密码而不是假设基于密钥的验证 --ask-su-pass
#ask for su password。su切换密码 -K
,--ask-sudo-pass
#ask for sudo password。提示密码使用sudo,sudo表示提权操作 --ask-vault-pass
#ask for vault password。假设我们设定了加密的密码,则用该选项进行访问 -B SECONDS
#后台运行超时时间 -C
#模拟运行环境并进行预运行,可以进行查错测试 -c CONNECTION
#连接类型使用 -f FORKS
#并行任务数,默认为5 -i INVENTORY
#指定主机清单的路径,默认为/etc/ansible/hosts
--list-hosts
#查看有哪些主机组-m MODULE_NAME
#执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数 -o
#压缩输出,尝试将所有结果在一行输出,一般针对收集工具使用 -S
#用 su 命令 -R SU_USER
#指定 su 的用户,默认为 root 用户 -s
#用 sudo 命令 -U SUDO_USER
#指定 sudo 到哪个用户,默认为 root 用户 -T TIMEOUT
#指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改 -u REMOTE_USER
#远程用户,默认为 root 用户
-v
#查看详细信息,同时支持-vvv
,-vvvv
可查看更详细信息
二.常用的一些模块
1.检测连通性 ping:
ansible all -m ping
2.command模块:
这个模块可以直接在远程主机上执行命令,并将结果返回本主机。即 ssh 连接了远程的操控的主机,因为之前配置了免密登录,因此可以连接。然后登录到远程主机之后,在远程主机上执行后面的操作的命令。
ansible web -m command -a 'hostname'
下面来看一看该模块下常用的几个命令:
chdir ##在执行命令之前,先切换到指定的目录下
executable ##切换shell来执行命令,需要使用命令的绝对路径
free_form ##要执行的Linux指令,一般使用Ansible的-a参数代替。
creates ##一个文件名,当这个文件存在,则该命令不执行,可以用来做判断
removes ##一个文件名,这个文件不存在,则该命令不执行
示例:
ansible web -m command -a 'chdir=/data/ ls' ##先切换到 /data/ 目录下,再执行 ls 命令
data/aaa.jpg ls' ##如果 /data/aaa.jpg 存在,则不执行 ls 命令
ansible web -m command -a 'removes=/data/aaa.jpg cat /data/a' ##如果/data/aaa.jpg存在,则执行 cat 后面的操作
3.shell模块:
shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等。只要是shell命令,都可以通过这个模块在远程主机上运行。
示例:ansible web -m shell -a ' cat /etc/passwd |grep root '
4.copy模块:
这个模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等。
其相关选项如下:
src
#被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径。如果路径是一个目录,则会递归复制,用法类似于"rsync" content
#用于替换"src",可以直接指定文件的值 dest
#必选项,将源文件复制到的远程主机的绝对路径
backup
#当文件内容发生改变后,在覆盖之前把源文件备份,备份文件包含时间信息
directory_mode
#递归设定目录的权限,默认为系统默认权限 force
#当目标主机包含该文件,但内容不同时,设为"yes",表示强制覆盖;设为"no",表示目标主机的目标位置不存在该文件才复制。默认为"yes" others
#所有的 file 模块中的选项可以在这里使用
示例:
ansible web -m copy -a 'src=/mnt/hello dest=/data/hello' ##将本机的 /mnt/hello 文件复制到远程主机的 /data/hello 下
ansible web -m copy -a 'content="I am keer\n" dest=/data/name mode=666'
ansible web -m shell -a 'ls -l /data/' ##可以查看上面的文件的权限是否是设定的 666
ansible web -m copy -a 'content="I am keerya\n" backup=yes dest=/data/name mode=666' ##覆盖源文件前,backup 备份一下
5.file模块:
该模块主要用于设置文件的属性,比如创建文件、创建链接文件、删除文件等。
下面是一些常见的命令:
force
##需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no group
##定义文件/目录的属组。后面可以加上mode
:定义文件/目录的权限 owner
##定义文件/目录的属主。后面必须跟上path
:定义文件/目录的路径 recurse
##递归设置文件的属性,只对目录有效,后面跟上src
:被链接的源文件路径,只应用于state=link
的情况 dest
##被链接到的路径,只应用于state=link
的情况
state
##状态,有以下选项:
directory
:如果目录不存在,就创建目录 file
:即使文件不存在,也不会被创建 link
:创建软链接 hard
:创建硬链接 touch
:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间 absent
:删除目录、文件或者取消链接文件
示例:
ansible web -m file -a 'path=/data/bbb.jpg src=aaa.jpg state=link'
ansible web -m file -a 'path=/data/a state=absent' ##删除前面的文件
6.fetch模块:
该模块用于从远程某主机获取(复制)文件到本地。
dest
:用来存放文件的目录 src
:在远程拉取的文件,并且必须是一个file,不能是目录
示例:
'src=/data/hello dest=/data'