Ansible ad-hoc 临时命令

ad-hoc是什么


ad-hoc 简而言之就是"临时命令",执行完即结束,并不会保存,也就是执行完一个模块就结束了,如果想让她反复运行,就不行了。不像将多个命令写到文件,可以反复运行。

  • 应用场景1∶查看多台节点的进程是否存在
  • 应用场景2∶拷贝指定的文件至本地
[root@master ~]# ansible webservers -m shell -a "ps -aux | grep nginx" -i /etc/ansible/hosts
[root@master ~]# ansible webservers -m shell -a "touch /root/ansible.txt" -i /etc/ansible/hosts

ad-hoc命令使用


命令示例∶ansible  'groups'  -m  command  -a  'df -h',含义如下图所示;

shell模块其实可以解决很多问题,但是只用这个模块肯定是不行的,而且shell模块无法保证幂等性,同时其他模块还包含其他的功能。

ad-hoc执行过程


  1. 加载自己的配置文件,默认 /etc/ans1b1e/ansible.cfg
  2. 查找对应的主机配置文件,找到要执行的主机或者组
  3. 加载自己对应的模块文件,如 command
  4. 通过 ansible 将模块或命令生成对应的临时 py 文件,并将该文件传输至远程服务器对应执行用户 $HOME/.ansible/tmp/ansible-tmp-nurber/XX.PY(这个文件是看不到的,执行完了就删除了)(被控端是调用Python去解析这个临时py文件,然后调用shell去运行,运行完结束之后就删除了)
  5. 执行用户家目录的`文件
  6. 给文件+x执行
  7. 执行并返回结果
  8. 删除临时 py 文件,sleep 0退出
[root@master ~]# ansible webservers -m shell -a "sleep 10" -i /etc/ansible/hosts 

[root@node1 tmp]# ls ansible-tmp-1656102874.99-71725-64844177037053/
AnsiballZ_command.py
[root@node1 tmp]# pwd
/root/.ansible/tmp

ad-hoc执行状态


使用 ad-hoc 执行一次远程命令,注意观察返回结果的颜色;

  • 绿色∶代表被管理端主机没有被修改
  • 黄色∶代表被管理端主机发现变更
  • 红色:代表出现了故障,注意查看提示

演示创建一个项目并且使用ad-hoc


[root@master ~]# mkdir -p project
[root@master ~]# cd project/
[root@master project]# cp /etc/ansible/ansible.cfg .
[root@master project]# cp /etc/ansible/hosts .
[root@master project]# ls
ansible.cfg  hosts

 现在项目读取的配置为 /root/project/ansible.cfg

[root@master project]# ansible --version
ansible 2.9.27
  config file = /root/project/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Nov 16 2020, 22:23:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
[root@master project]# vim ansible.cfg 
inventory      = /root/project/hosts  #这里可以写绝对路径,也可以写相对路径/hosts

 这里还可以调整forks,1代表一台一台的执行,5代表并发执行5台

forks          = 5   #调整并行主机的数量

这个参数在优化的时候可以加大一点,机器是多少台调整为多少台,这样会让执行效果更加快,否则一个一个来

[root@master project]# ansible webservers -m shell -a "sleep 3" -f 1
192.168.111.6 | CHANGED | rc=0 >>

192.168.111.7 | CHANGED | rc=0 >>

192.168.111.8 | CHANGED | rc=0 >>


[root@master project]# ansible webservers -m shell -a "sleep 3" -f 5
192.168.111.8 | CHANGED | rc=0 >>

192.168.111.7 | CHANGED | rc=0 >>

192.168.111.6 | CHANGED | rc=0 >>

Ansible常用模块


ansible有着诸多的模块,虽然模块众多,但最为常用的模块也就 20-30个左右

常用ad-hoc: 模块:
    0.测试                    shell  | command
    0.下载                    get_url
    1.安装                    yum  | yum_repository
    2.配置                    copy | template
    3.初始化                file                创建文件,创建目录,授权
    4.用户|组                user   group 
    4.启动                    systemd 
    6.挂载                    mount
    7.定时任务                cron
    8.防火墙                firewalld | iptables
    9.文件内容修改            lineinfile

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/125521630