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'    #修改权限