ansible语法

ansible语法

注意:需要提示分发公钥

ansible test -a "free -h"
ansible test -m command -a "free -h"

-m:指定模块
-a:指定参数
test 对应 /etc/ansible/hosts中的[test]
all 对应 /etc/ansible/hosts所有ip
注意:默认模块不支持管道通信

常用参数

参数 解释
-m 模块,默认command
-a 参数
-C,--checks 检查,预期执行
-syntax-checks 检查剧本,预期执行

颜色说明

绿:正常
红:异常
黄:有变动

模块详情

查看模块信息

ansible-doc -v command

chdir参数的使用:

ansible test -m command -a "chdir=/etc pwd"

shell模块

注意:执行时,各主机本地需要存在shell脚本
与command模块的不同在于,shell模块可以使用变量,管道,定向符号等

script

当前节点的本地脚本,远程执行

#本地节点脚本文件
cat >/home/centos/sh.sh <<EOF
#!/bin/bash
echo $HOSTMANE
w
ping qq.com -c 2
EOF
#远程执行本地文件
ansible test -m script -a "/home/centos/sh.sh"

脚本文件不具有执行权限,也可以远程执行命令

copy

参数 说明
backup 是否备份远程已存在的文件
content 可以设定文件的值
dest 远端路径
directory_mode 递归设置目录的权限,默认为系统权限
forces 文件内容存在差异,forces为yes则覆盖,为no,则不覆盖。默认覆盖。别名:thirsty
src 路径以/结尾,只复制目录中的文件,否则递归复制所有文件,类似rsync
mode 权限位设置
owner 属主
group 属组

src 不能和 content一起使用

copy使用示例

远程复制

ansible test -m copy -a "src=/etc/hosts dest=~/ mode=0644 owner=centos group=centos"
ansilbe test -m shell -a "ls -la ~/host*"

远程执行 主机复制本地文件

#本地创建一个文件
touch sh.sh 
ansible test -m copy -a "src=~/sh.sh dest=~/sh.sh.sh remote_src=true"
#此时仅能在本地机器上显示复制的文件,表明remote_src为true时只能复制远端已存在的文件
ansible test -m shell -a "ls -l ~/sh*"

内容传递
注意:换行符使用 代替

ansible test -m copy -a "content='hello
world' dest=~/h.c mod=0600"
ansilbe test -m shel -a "cat ~/.h.c"

file

主要用于创建文件,删除文件,设置文件属性

普通参数

参数 说明
owner 属主
group 属组
mode 权限
dest 远端路径
src 本地路径

state

有存在多种状态,如下

参数 说明
directory 目录
file 文件
link 软链接
hard 硬链接
absent 递归删除目录,取消软链接
touch 创建文件

注意:不能同时递归创建目录和重命名
创建目录

ansible test -m file -a "path=~/a/b/c/d/e/f state=directory"
ansible test -m shell -a "tree ~/"

递归删除目录

#根据之前创建的目录
ansible test -m file -a "dest=~/a state=absent"
ansible test -m shell -a "ls -l ~/"

创建文件

ansible test -m file -a "dest=~/a.txt state=touch"
ansible test -m shell -a "ls ~/"

创建软链接

#根据之前创建的文件,创建软链接
ansible test -m file -a "dest=~/softa.txt src=~/a.txt state=link"
ansible test -m shell -a "ls -l ~/"

创建硬链接

#先给a.txt文件追加"hello
world"
ansible test -m shell -a "rm -f ~/a.txt"
ansible test -m copy -a "content='hello
world' dest=~/a.txt"
ansible test -m shell -a "cat ~/a.txt"
ansible test -m file -a "dest=~/ahard.txt src=~/a.txt state=hard"
ansible test -m shell -a "cat ~/ahard.txt"
ansible test -m shell -a "ls -il | grep a"
原文地址:https://www.cnblogs.com/anyux/p/12002272.html