ansible的ad-hoc
ad-hoc
ad-hoc选项说明
# ad-hoc格式:
ansible <主机组> -m <模块名> -a <参数>
ansible查看所有模块
# 查看所有ansible所有模块
ansible-doc -l
# 统计ansible模块的数量
ansible-doc -l|wc -l
过滤模块
# 过滤yum模块
ansible-doc -l|grep yum
查看模块用法
# ansible-doc 模块名
## | less 防止页面输出过大,方便翻页查看
ansible-doc yum | less
以=开头的选项—强制选项
模块文档中,大多数的选型是以-开头
的,但也有=开头
的选项,属于强制选项.
ansible常用模块
ansible的模块非常多,常用的模块大约有几十个,掌握这些常用模块,就足以应对日常工作.
文件管理模块
- file 模块:创建删除文件,目录,链接,修改文件,目录的权限等
- copy 模块: 将控制端主机的文件拷贝到远程主机
- lineinfile 模块:修改文件内容(按行修改)
- fetch 模块:将远程其他主机到文件拷贝到本地
- replace 模块: 修改文件内容(按关键字修改)
- syncchronize
软件管理模块
- package
- yum_repository 模块: 创建、修改、删除yum源配置文件
- yum 模块:安装,卸载,升级软件
- apt 模块:安装,卸载,升级软件
- dnf
- gem
- pip
系统管理模块
- firewalld
- reboot
- service 模块:启动服务,设置服务开机自启
- user 模块: 创建,删除,修改账户,设置密码
用户管理模块user模块示例
网络管理模块
-
get_url 模块: 使用http/https/ftp 下载文件
-
nmcli 模块: 管理网络
-
uri 模块: 访问web,返回某个值
-
shell模块:执行命令(支持管道,重定向等)
-
script模块:拷贝任意脚本到远程主机,并执行该脚本
lvm管理模块
- lvg模块:创建、删除、修改vg
- lvol模块:创建、删除、修改lv
command和shell及script模块
无论是command或shell模块,在ansible中只能执行非交互命令
.
command和shell模块的区别
- command模块的命令不启动shell,直接通过ssh执行命令
- command模块不支持bash的特性,如:
管道
和重定向
等功能. - 所有需要
调用shell
的功能都无法使用
.
command模块
ansible的默认模块是command
,-a
是指定参数
command模块示例
执行ad-hoc命令
# -m指定模块
## -m ping 调用ping模块
ansible all -m ping
# 所有机器上执行id命令
## -a是执行command 参数
ansible all -a 'id'
- 指定用户执行ad-hoc命令
## -a 'id' 执行id命令
## -u 指定用户执行
ansible all -a 'id' -u devops
- 查看主机的ip地址
ansible all -a 'ip -br a show ens160'
shell模块
shell模块会启动shell执行命令
不可以
使用shell模块执行交互命令
,如:vim
,top
等
chdir参数
可以减少使用绝对路径
# chdir切换到/tmp目录后再执行创建文件命令
ansible test -m shell -a "chdir=/tmp touch a.txt b.txt c.txt d.txt e.txt"
shell模块–文件判断参数—creates和removes参数
creates 文件名
: 文件存在
,不执行命令removes 文件名
: 文件不存在
,不执行命令
# 如果已经有密钥文件id_rsa,则不创建密钥(skip跳过)
ansible test -m shell -a "ssh-keygen -f ~/.ssh/id_rsa -N '' creates=~/.ssh/id_rsa"
# 如果没有安装unzip安装包,则不执行解压命令(skip跳过)
ansible test -m shell -a "unzip xx.zip removes=/bin/unzip"
script模块
- script允许本地写脚本,在远端执行脚本
- 非shell脚本(python脚本,perl脚本),可以没有
+x
权限
## copy模块示例 ```shell # 替换文件内容 [student@workstation deploy-adhoc]$ ansible localhost -m copy -a 'content="Managed by Ansible\n" dest=/etc/motd' -u root localhost | CHANGED => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": true, "checksum": "4458b979ede3c332f8f2128385df4ba305e58c27", "dest": "/etc/motd", "gid": 0, "group": "root", "md5sum": "65a4290ee5559756ad04e558b0e0c4e3", "mode": "0644", "owner": "root", "secontext": "system_u:object_r:etc_t:s0", "size": 19, "src": "/root/.ansible/tmp/ansible-tmp-1634845213.8595588-57941547245216/source", "state": "file", "uid": 0 }
提权到devops执行命令
[student@workstation deploy-adhoc]$ ansible localhost -m copy -a ‘content=" 替换文件Managed by Ansible 这是devops创建的内容\n" dest=/etc/motd’ -u devops --become
查看替换后的文件内容
[student@workstation deploy-adhoc]$ cat /etc/motd
Managed by Ansible