这是Ansible系列课程第三节,Ansible Ad-hoc命令介绍。介绍一下ad-hoc命令是什么,以及几个具体的实例。 该系列课程前后章节都是有关联性的,对于初学者建议按顺序阅读。也可以选择特定的章节了解单个知识点。 遇到的任何问题可以在评论区留言,也可以在评论区查看进群方式。
上一节我们完成了Ansible的基础环境搭建,并且成功执行了第一条ad-hoc命令。正所谓“麻雀虽小五脏俱全”,ad-hoc命令虽然简单但也是一次完整的ansible任务,对于了解Ansible以及Ansible playbook的使用也很有帮助。这一节主要介绍一下什么是ad-hoc命令,有什么用处并且列举几个常见的使用场景。
什么是ad-hoc命令
/usr/bin/ansible命令行工具在一个或多个管理节点上执行单个任务的命令。这其实是一个概念性的名字,是相对于 Ansible playbook 来说的。当我们需要快速的完成一些任务而不需要将执行的命令保存下来,这样的命令就称为ad-hoc命令。
单个ad-hoc命令介绍
$ ansible [pattern] -m [module] -a "[module options]"
$ ansible devops -m file -a "path=/mnt/1.txt state=touch"
ansible:ad-hoc命令是通过ansible执行的,类似于ansible-playbook执行playbook脚本。 pattern:指定该命令要在哪些管理节点或者哪组管理节点上执行,比如例子中的devops主机组。选择管理节点或者主机组的方式有很多种,在后面章节会有介绍。 -m [module]:指定该命令要执行哪个模块,比如例子中的file模块。ansible中自带许多模块,通过命令或playbook在远程管理节点上执行。 -a [module options]:指定该模块执行时所需要的选项,比如例子中的"path=/mnt/1.txt state=touch"。每个模块都包含很多功能,通过传入不同的选项执行具体的操作。
ansible --help命令查看。
[root@controll-node ~]# ansible --help
usage: ansible [-h] [--version] [-v] [-b] [--become-method BECOME_METHOD]
[--become-user BECOME_USER] [-K] [-i INVENTORY] [--list-hosts]
[-l SUBSET] [-P POLL_INTERVAL] [-B SECONDS] [-o] [-t TREE] [-k]
[--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER]
[-c CONNECTION] [-T TIMEOUT]
[--ssh-common-args SSH_COMMON_ARGS]
[--sftp-extra-args SFTP_EXTRA_ARGS]
[--scp-extra-args SCP_EXTRA_ARGS]
[--ssh-extra-args SSH_EXTRA_ARGS] [-C] [--syntax-check] [-D]
[-e EXTRA_VARS] [--vault-id VAULT_IDS]
[--ask-vault-pass | --vault-password-file VAULT_PASSWORD_FILES]
[-f FORKS] [-M MODULE_PATH] [--playbook-dir BASEDIR]
[-a MODULE_ARGS] [-m MODULE_NAME]
pattern
Define and run a single task 'playbook' against a set of hosts
positional arguments:
pattern host pattern
......
默认模块command
#将devops主机组的服务器重启
$ ansible devops -a "/sbin/reboot"
#这里获取的是管理节点的变量
[root@controll-node ~]# ansible devops -m shell -a 'echo $HOSTNAME'
118.195.199.238 | CHANGED | rc=0 >>
manage-node
#这里获取的是控制节点的变量
[root@controll-node ~]# ansible devops -m shell -a "echo $HOSTNAME"
118.195.199.238 | CHANGED | rc=0 >>
controll-node
举几个具体的实例
①管理组和用户
$ ansible devops -m group -a "name=devops state=present"

$ ansible devops -m user -a 'name=devops password=$6$.evG1Z/VuVrACjw.$ZrxtGWn3NCaFNGbR3195bEQgU5insiI1.H/0Sho/iIl2o1kcGka04bDA.rUPtd0pIHhfxnunAIeotzYynEqSs1 groups=devops'

②管理文件
$ ansible devops -m file -a "path=/mnt/1.txt state=touch"

$ ansible devops -m file -a "path=/mnt/2.txt state=touch" -u devops

$ ansible devops -m file -a "path=/mnt/2.txt state=touch" -u devops --become

$ ansible devops -m file -a "path=/mnt/2.txt state=touch" -u devops --become --ask-become-pass

③管理软件
$ ansible devops -m yum -a "name=git state=present"

$ ansible devops -m yum -a "name=git state=absent"

总结
文章转载自DevOps亮哥,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




