名称 | 必选 | 备注 |
---|---|---|
chdir | no | 运行command命令前先cd到这个目录 |
creates | no | 如果这个参数对应的文件存在,就不运行command |
free_form | yes | 需要执行的脚本(没有真正的参数为free_form) |
executable | no | 改变用来执行命令的shell,是可执行文件的绝对路径 |
removes | no | 如果这个参数对应的文件不存在,就不运行command,与creates参数作用相反 |
stdin | no | 2.4后新的增,将命令的stdin设置为指定的值 |
ansible-inventory --graph # 分组查看
ansible all -m command -a "ls /root" # 查看目录
ansible all -m command -a "cd /root" # 切换到/root目录
ansible all -m command -a "pwd"
ansible all -m command -a "touch t1.sh" # 新建文件
ansible all -m command -a "ls" #浏览
# 当文件t1.sh存在则就不执行前面的命令
ansible all -m command -a "ls /root creates=t1.sh"
# 当文件t2.sh 不 存在则就不执行前面的命令
ansible all -m command -a "ls /root removes=t2.sh"
# 无法使用管道符
ansible all -m command -a "echo 'hello world' > t1.sh "
ansible all -m command -a "cat t1.sh" # 无内容
ansible all -m command -a "ls /root | grep t1.sh"
ansible all -m shell -a 'tree chdir=/root'
ansible test -m shell -a "echo 'hello world' > t1.sh"
ansible test -m shell -a "cat t1.sh" # 查看内容
vim t2.sh # 输入下列内容:
#!/bin/bash
echo "hello world"
ansible all -m script -a "t2.sh" # 执行本机的脚本到all
ansible all -m shell -a "bash t2.sh" # 可以使用shell模块执行目标节点的脚本
raw模块主要用于执行一些低级的命令,一般适用于下列两种场景
名称 | 必选 | 备注 |
---|---|---|
executable | no | 改变用来执行命令的shell,是可执行文件的绝对路径 |
free_form | yes | 需要执行的脚本(没有真正的参数为free_form) |
ansible dev -m raw -a "pwd"
作用:实现对文件的基本操作,如:创建文件或目录、删除文件或目录、修改文件权限等
path :必须参数,用于指定要操作的文件或目录,在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或name也可以
state :
格式:path=“路径” state= touch|directory|link|hard|absent
此参数使用灵活,如:在远程主机中创建一个目录,则使用path参数指定对应的目录路径,假设在远程主机上创建/testdir/a/b目录,则设置路径:path=/testdir/a/b,但ansible无法从"/testdir/a/b"这个路径看出b是一个文件还是一个目录,所以需要通过state参数进行说明
参数 | 值 | 含义 |
---|---|---|
state= | absent | 删除远程机器上的指定文件或目录 |
state= | directory | 创建一个空目录 |
state= | file | 查看指定目录是否存在 |
state= | touch | 创建一个空文件 |
state= | hard/link | 创建链接文件 |
src :当state设置为link或者hard时,表示创建一个软链或硬链,则必须通过指明src参数即可指定链接源
force : 当state=link的时,使用force=yes 参数表示强制创建链接文件,该文件分为三种情况,
owner :用于指定被操作文件的属主信息,属主对应的用户必须在远程主机中存在,否则会报错
group:用于指定被操作文件的属组,属组对应的组必须在远程主机中存在,否则会报错
mode:用于指定被操作文件的权限,如:
recurse:当要操作的文件为目录时,recurse设置为yes可以递归的修改目录中文件的属性
ansible all -m file -a "path=/root/data state=directory"
ansible all -m command -a "ls chdir=/root" # 查看
ansible node1.example.com -m file -a "path=/root/data/testfile1 state=touch"
ansible node1.example.com -m command -a 'ls chdir=/root/data' # 查看
ansible node1.example.com -m file -a "path=/root/data/linkfile1 state=link src=/root/data/testfile1"
ansible node1.example.com -m command -a 'ls chdir=/root/data' # 查看
ansible node1.example.com -m file -a "path=/root/data/hardfile1 state=hard src=/root/data/testfile1"
ansible node1.example.com -m file -a "path=/root/data/linkfile3 state=link src=/root/data/123 force=yes" # 注意:123不存在
ansible node1.example.com -m command -a 'ls chdir=/root/data'
ansible node1.example.com -m file -a "path=/root/data state=absent"
ansible node1.example.com -m command -a 'ls chdir=/root' # 查看
ansible all -m file -a "path=/root/testfile1 state=touch owner=fox" # 新建文件指定为fox
ansible all -m file -a "path=/root/testfile2 state=touch" # 新建文件,默认为root
[root@server ~]# ansible 192.168.48.131 -m file -a "path=/root/testfile2 state=touch owner=fox group=fox"
# 修改属主和工作组
[root@server ~]# ansible 192.168.48.131 -m file -a "path=/root/testfile1 state=touch mode=777"
ansible all -m file -a "path=/data/test/demo state=directory owner=student group=student recurse=yes"
作用:拷贝文件,将ansible主机上的文件拷贝到远程受控主机中
参数 | 默认值 | 含义 |
---|---|---|
src | 用于指定需要copy的文件或目录 | |
backup | no、 yes | 当远程主机的目标路径中已存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,设为yes时,会先备份远程主机中的文件,然后再拷贝到远程主机 |
content | 当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错 | |
dest | 用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数 | |
group | 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错 | |
owner | 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报 | |
mode | 错文指定文件拷贝到远程主机后的权限,如果你想将权限设置为"rw-r–r–",则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示 | |
force | no、 yes | 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变 |
mkdir /testdir
cd /testdir
touch copytest
cd ~
ansible all -m copy -a "src=/testdir/copytest dest=/opt/"
echo "hello world" > /testdir/copytest # 输入新内容
ansible all -m copy -a "src=/testdir/copytest dest=/opt/ force=no" # 不会覆盖
ansible all -m copy -a "src=/testdir/copytest dest=/opt/ force=yes" # 强制覆盖
ansible all -m command -a "cat /opt/copytest" # 查看
ansible all -m copy -a 'content="aaa\nbbb\n" dest=/opt/test'
nsible all -m command -a "cat /opt/test" # 查看
# 设置实验环境
ansible all -m command -a "cat /opt/copytest" # 查看内容
echo "hello world" > /testdir/copytest # 重新修改本机文件
# 备份拷贝
ansible all -m copy -a "src=/testdir/copytest dest=/opt/ backup=yes"
ansible all -m command -a "ls /opt" # 查看
ansible all -m copy -a "src=/etc/hosts dest=/mnt owner=fox group=fox mode=777"
ansible all -m copy -a "src=/testdir/copytest dest=/opt/ mode=0755"
作用:拉取远程主机的文件,并以主机IP地址或者主机名为目录,并保留了原来的目录结构
[root@server ~]# ansible 192.168.48.131 -m fetch -a 'src=/etc/hosts dest=/opt'
ls /opt
ansible node1.example.com -m fetch -a 'src=/etc/hosts dest=/opt/hosts flat=yes'
ls /opt
作用:使用yum包管理器安装、升级、降级、删除和列出包和组
name:必须参数,用于指定需要管理的软件包,比如 nginx。
state:用于指定软件包的状态
disable_gpg_check:用于禁用对 rpm 包的公钥 gpg 验证。
enablerepo:临时启用的 yum 源。若想要从A源中安装软件,但不确定A源是否启用,则可设置为 yes
disablerepo:临时禁用的 yum 源。某些场景下需要此参数,如:多个 yum 源中同时存在需要安装的软件包时,可以临时禁用某个源,此时安装软件包时则不会从对应的源中选择安装包,enablerepo 和 disablerepo 可以同时使用
download_only:yes \ no,默认no,只下载,不安装
list:等价于yum list
ansible all -m shell -a 'ls /etc/yum.repos.d' # 查看
ansible all -m shell -a 'rm -f /etc/yum.repos.d/redhat_dvd.repo' # 都删除
ansible all -m shell -a 'yum clean all' # 删除缓存
ansible all -m shell -a 'yum makecache' # 重新缓存
ansible all -m yum -a "name=httpd disable_gpg_check=yes"
ansible all -m yum -a "name=ftp state=present"
ansible all -m dnf -a 'name=bind'
ansible all -m yum -a "name=bind,ftp state=removed"
ansible all -m yum -a 'name=telnet disable_gpg_check=yes disablerepo=local'
作用:服务程序的管理
参数 | 作用 |
---|---|
name | 操作的服务名称 |
state | 服务状态(started、stopped、restarted、reloaded) |
enabled | yes、no 开机启动 |
arguments | 给命令提供一些选项 |
runlevel | 运行等级 |
sleep | 设置停止时间 |
ansible all -m systemd -a "name=httpd state=started enabled=yes "
ansible all -m shell -a 'systemctl is-active httpd' # 验证
作用:解包解压缩
# server端本地打包,建立实验环境
tar -cvf testroot.tar.gz /root
ansible all -m unarchive -a 'src=/root/testroot.tar.gz dest=/tmp'
ansible all -m command -a "ls /tmp" # 查看
# 建立实验环境,将上例压缩包copy到远程主机
ansible all -m copy -a "src=/root/testroot.tar.gz dest=/mnt"
ansible all -m unarchive -a 'src=/mnt/testroot.tar.gz dest=/usr copy=no mode=0777'
ansible all -m unarchive -a 'src=http://nginx.org/download/nginx-1.22.0.zip dest=/root copy=no' # 下载Nginx解压到远程主机
ansible all -m command -a "ls /root"