1. ad-hoc介绍
ansible中有两种模式:ad-hoc模式和ansible-playbook模式。
ad-hoc命令是一种可以快速输入的命令,而且不需要保存起来的命令。
ad-hoc适合解决一些简单或者平时工作中临时遇到的困难。
2. ad-hoc的使用场景
- 在多台机器上,查看某个进程是否启动
- 在多台机器上,拷贝指定文件到本地等等
3. ad-hoc模式命令的使用
命令+主机名称+指定的模块+模块名称+模块动作+具体的命令
如:ansible ans -m shell -a 'ls /root'
4. ansible帮助查看方式
ansible-doc -l #查看所有的模块与简要说明
ansible-doc copy #查看指定模块的方式
ansible-doc -s copy #查看指定模块的playbook代码段
5. ad-hoc命令参数
ansible <host-pattern> [options]
-v|--version #输出更详细的执行过程信息,-vvv可得到执行过程所有的信息
-i|PATH|--inventory(清单)=PATH #指定inventory(清单)信息,默认/etc/ansible/hosts
-f NUM|--forks=NUM #并发线程数,默认是5个
--private-key=PRIVATE_KEY_FILE #指定密钥文件
-m NAME|--module-name=NAME #指定使用的模块
-M DIRECTORY,--module-path=DIRECTORY #指定模块存放路径,默认/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认路径。
-a ‘ARGUMENTS’,--args=‘ARGUMENTS’ #模块参数。
-k,--ask-pass SSH #认证密码
-K,--ask-sudo-pass sudo #用户的密码(--sudo时使用)。
-o,--one-line #标准输出至一行。
-s,--sudo #相当于Linux系统下的sudo命令。
-t DIRECTORY,--tree=DIRECTORY #输出信息至DIRECTORY目录下,结果文件以远程主机命名。
-T SECONDS,--timeout=SECONDS #指定连接远程主机的最大超时,单位是秒。
-B NUM,--background=NUM #后台执行命令,超NUM秒后中止正在执行的任务。
-P NUM,--poll=NUM #定期返回后台任务进度。
-u USERNAME,--user=USERNAME #指定远程主机以USERNAME运行命令。
-U SUDO_USERNAME,--sudo-user=SUDO_USERNAME #使用sudo,相当于LInux下的sudo命令。
-c CONNECTION,--connection=CONNECTION #指定连接方式,可用选项paramiko(SSH)、ssh、local,local方式常用于crontab和kickstarts。
-l SUBSET,--limit=SUBSET #指定运行主机。
-l ~REGEX,--limit=~REGEX #指定运行主机(正则)。
--list-hosts #列出符合条件的主机列表,不执行任何命令。
6. ansible常用模块
命令相关模块
command模块 shell模块 service模块
文件相关模块
file模块 copy模块 fetch模块
用户相关模块
user模块 group模块
yum_repository模块
7、command模块
命令模块适合使用简单的命令,无法支持"<"、">"、"|"、";"、"&"等符号,功能是在远程主机上执行命令,此模块为默认模块,可以忽略-m选项。
chdir #在执行命令前,进入到指定的目录中
creates #判断指定文件是否存在,如果存在,不执行后面的操作
removes #判断指定文件是否存在,如果存在,执行后面的操作
free_from #必须要输入一个合理的命令
ansible 192.168.100.204 -a 'chdir=/tmp pwd' #切换目录
ansible 192.168.100.204 -a 'creates=/tmp ls /etc//passwd' #creates文件存在则不执行
ansible 192.168.100.204 -a 'removes=/tmp ls /etc//passwd' #remives文件存在则执行
8.shell模块
类似于command模块,但是功能比command要更强大。支持"<"、">"、"|"、";"、"&"等符号。
chdir #在执行命令前,进入到指定目录中
creates #判断指定文件是否存在,如果存在,不执行后面的操作
removes #判断指定文件是否存在,如果存在,执行后面的操作
free_form #必须要输入一个合理的命令
1)调用shell模块
ansible 192.168.100.204 -m shell -a 'mkdir -p /root/dgf && ls /root/' #调用shell模块
2)调用shell模块查看root下的所有目录和文件
[root@localhost /]# ansible 192.168.100.204 -m shell -a 'ls /root'
seript 用于执行被管理机器上面执行shell脚本的模块,脚本无需在被管理机器上面存在
3)在管理机上创建脚本
[root@localhost ~]# vim ansible_test.sh
#!/bin/bash
echo 'hostname'
4)给脚本赋予777权限
[root@localhost ~]# chmod 777 ansible_test.sh
5)在被管理服务器上执行脚本
[root@localhost ~]# ansible all -m script -a '/root/ansible_test.sh '
192.168.100.205 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.100.205 closed.\r\n",
"stderr_lines": [
"Shared connection to 192.168.100.205 closed."
],
"stdout": "hostname\r\n",
"stdout_lines": [
"hostname"
]
}
192.168.100.204 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.100.204 closed.\r\n",
"stderr_lines": [
"Shared connection to 192.168.100.204 closed."
],
"stdout": "hostname\r\n",
"stdout_lines": [
"hostname"
]
}
9、file模块
用于对文件的处理,创建,删除,权限控制等
pah #要管理的文件路径
recurse #递归
state:
directory #创建目录,如果目标不存在则创建目录及其子目录
touch #创建文件,如果文件存在,则修改文件 属性
absent #删除文件或目录
mode #设置文件或目录权限
owner #设置文件或目录属主信息
group #设置文件或目录属组信息
link #创建软连接,需要和src配合使用
hard #创建硬件连接。需要和src配合使用
1)删除被管理服务器的文件或目录
[root@localhost /]# ansible 192.168.100.204 -m file -a 'name=/dgf state=absent' #name=路径默认是在root下
2)创建被管理服务器的文件或目录
[root@localhost /]# ansible 192.168.100.204 -m file -a 'name=ys state=directory' #创建目录
[root@localhost /]# ansible 192.168.100.204 -m file -a 'name=456.txt state=touch'
#创建文件
3)修改被管理服务器的文件或目录的权限
[root@localhost ~]# ansible all -m file -a 'path=/root/hehe mode=777' #修改权限