Ansible - 2 - 命令讲解
Ansible 命令
Ansible 命令集
# 以下所有命令均可使用`-h`参数获取帮助信息
ansible # Define and run a single task 'playbook' against a set of hosts # 常用命令
ansible-config # View ansible configuration.
ansible-console # REPL console for executing Ansible tasks. # 交互式工具,相当linux中的shell,不常用
ansible-doc # plugin documentation tool # 查询模块的文档说明,类似linux中的man,常用命令
ansible-galaxy # Perform various Role and Collection related operations.
ansible-inventory # Show Ansible inventory information, by default it uses the inventory script JSON format
ansible-playbook # Runs Ansible playbooks, executing the defined tasks on the targeted hosts. # 执行系列任务,类似linux中的sh,常用命令
ansible-pull # pulls playbooks from a VCS repo and executes them for the local host
ansible-vault # encryption/decryption utility for Ansible data files
Ansible 常用命令集
# 常用命令集
ansible
# Ansible指令的核心部分,主要用于执行ad-hoc命令,也就是单条命令
# 默认使用command模块,默认的使用模块可以在ansible.cfg中进行定义
ansible-doc
# 用于查看模块信息,
# 参数 -l 列出可用的插件
# 参数 -s 用于查看指定模块的用法,例如“ansible-doc -s shell”
ansible-playbook
# 读取playbook文件内容并执行定义的任务
# 对于固化的需求通常采用playbook方式定义和实现
ansible-vault
# 主要应用于包含敏感信息的场景,可以加密和解密敏感信息
# 经过加密后的playbook,编辑时需要输入事先设定的密码才能打开
# 使用 --ask-vault-pass 参数执行加密后的playbook文件
ansible-config
# 查看ansible的配置
# 参数 list 打印所有配置参数,参数 view 查看配置文件
# 结合 grep 使用可以获取具体配置信息,例如“ansible-config view |grep -v "#" |grep host_key_checking”
Ansible ad-hoc命令
# ansible <host-pattern> [-f forks] [-m module_name] [-a args]
# <host-pattern> 命令生效的主机: <inventory_group_name>/<inventory_host_ip>/all
# 常用选项 通过 ansible -h 命令获取详细信息
-v # 输出详细执行过程信息 verbose mode (-vvv for more, -vvvv to enable connection debugging)
-i inventory_file # 指定inventory文件,默认为/etc/ansible/hosts
-f forks # 指定并发线程数(一次处理多少个主机),默认5个线程
-m module_name # 指定执行使用的模块
-M directory # 指定模块存放路径,默认为/usr/share/ansible
-a args # 指定模块参数
-l hosts_ip # 限定主机(只在限定主机上执行任务)
--become-method BECOME_METHOD # 提权方法,默认为sudo,一般为su
--become-user BECOME_USER # 切换用户,默认为root
-K, --ask-become-pass # 请求提权密码
--list-hosts # 列出此次的主机列表,但不做任何改变
--syntax-check # 语法检查
-C, --check # 检验可能的错误,但不做任何改变
# 主机名文件保留
- "-t"或"--tree"选项可以将ansible的执行结果按主机名保存在指定目录下的文件中
- 使用"-t"选项可以将第一次执行的结果按主机名保存在文件中, 此后即使不使用"-t"选项也能提升执行速度
# 命令示例
ansible 192.168.56.3 -a 'hostname' # 默认使用command模块(不支持变量、管道等)
ansible 192.168.56.3 -m command -a 'hostname'
ansible Test --list # 列出Test组所有的主机列表
ansible Test:Test2 -m ping # 通过ping模块检查Test组和Test2组的主机是否存活
ansible Test:!Test2 -m ping # 在Test组但不在Test2组的主机
ansible Test:&Test2 -m ping # 同时存在Test组和Test2组的主机
ansible Tes* -m ping # 组名开头为Tes的主机
ansible all -m shell -a 'hostname && date' # 通过shell模块在所有主机试行shell命令
ansible all -f 10 -m shell -a 'hostname && date;cat /etc/system-release' # shell模块支持变量、管道、if判断等复杂命令
部分参数如果不指定,将采用ansible.cfg中的设置值,或者采用原始默认值。
Ansible ad-hoc常用命令
# ping 测试指定主机连接性
ansible ta -m ping
ansible -i /etc/ansible/hosts ta -m ping # 指定inventory文件
# command 在指定主机上执行命令(默认模块),不支持变量、管道、重定向等shell特性
ansible ta -m command -a "chdir=/home/ ls ./" # 在远程主机上切换到home目录执行ls命令
# shell 在指定主机上执行命令或运行脚本,打开远程主机的shell进程的一个子shell运行命令,支持shell的变量、管道、重定向等特性
ansible ta -m shell -a 'hostname && date;cat /etc/system-release' # 支持变量、管道、if判断等复杂命令
ansible ta -m shell -a "echo 'this is a test' > test.txt" -C # 验证可能的错误,但不做任何改变
ansible ta -m shell -a 'echo "123456"|passwd --stdin root' -K # 更改root密码
# script 调用本地脚本在远程主机执行,但只能执行脚本,不能调用其他指令,且不支持管道命令
ansible ta -m script -a "/home/vipxf/test.sh"
ansible ta -m script -a "removes=/home/vipxf/test.sh /home/vipxf/test2.sh" -o # 如果远程主机上test.sh文件存在就执行本地脚本test2.sh,否则就不执行
ansible ta -m script -a "creates=/home/vipxf/test.sh /home/vipxf/test2.sh" -o # 如果远程主机上test.sh文件存在就不执行本地脚本test2.sh,否则就执行
# raw 类似shell,支持管道命令,可用于没有python环境的远程主机
ansible ta -m raw -a "cd /home;pwd"
# stat 获取文件信息
ansible ta -m stat -a "path=/etc/ansible/hosts"
# setup 系统信息,收集facts
ansible ta -m setup
ansible ta -m setup | grep "xxx" # 获取主机所有facts然后结合grep命令过滤
ansible ta -m setup -a "filter=ansible_os_family" # 通过filter参数来查看指定信息
ansible ta -m setup -a 'filter="*mem*"' --tree ./facts # 通过filter参数查看指定信息并按主机名保存到facts目录
# copy 复制文件到远程主机的指定位置
ansible ta -m copy -a "src=/etc/hosts dest=~/test.hosts mode=664 owner=vipxf group=vipxf" # 复制本地文件到远程主机并设置权限
ansible ta -m copy -a "content="this is a test" dest=~/test.hosts mode=664 owner=vipxf group=vipxf" # 在远程主机创建指定内容文件并设置权限
# fetch 复制指定主机的文件到本地
ansible ta -m fetch -a "src=~/testfile.txt dest=~/" # 将在指定目录下创建对应IP文件夹来存放文件,保留了原目录结构
# get_url 在远程主机下载网络文件,支持文件校验
ansible ta -m get_url -a "url=http://172.20.5.3/pub/soft/docker/docker-19.03.9.tgz dest=~/ mode=655 owner=vipxf" # 下载文件到远程主机指定目录并设置权限
# file 设置文件属性
ansible ta -m file -a "path=~/testfile.txt mode=755 owner=vipxf group=vipxf" # 更新文件属性
ansible ta -m file -a "path=~/testfile.txt state=touch mode=644" # 创建文件
ansible ta -m file -a "path=~/testfile.txt state=absent" # 删除文件
ansible ta -m file -a "path=~/testdir mode=755 state=directory" # 创建目录
# cron 设置计划任务
ansible ta -m cron -a "minute=0 hour=22 job='/home/vipxf/testcron.sh' name='test cron'" # 创建计划任务
ansible ta -m cron -a "name='test cron' state=absent" # 删除计划任务
# group 管理用户组
ansible ta -b --become-user root --become-method su -m group -a "name=test system=yes" --ask-become-pass # 创建用户组
ansible ta -b --become-user root --become-method su -m group -a "name=test state=absent" --ask-become-pass # 删除用户组
# user 管理用户
ansible ta -b --become-user root --become-method su -m user -a "name=test system=yes group=test password=pw@123" -K # 创建用户
ansible ta -b --become-user root --become-method su -m user -a "name=test state=absent force=yes" -K # 删除用户
# service 管理服务
ansible ta -b --become-user root --become-method su -m service -a "name=sshd enabled=yes state=started" -K # 启动httpd服务并且不设置开机启动
ansible ta -b --become-user root --become-method su -m service -a "name=sshd state=stopped" -K # 停止httpd服务并且不设置开机启动
# yum 管理程序包
ansible ta -b --become-user root --become-method su -m yum -a "name=httpd state=present" -K # 安装包,也可以将state设为installed
ansible ta -b --become-user root --become-method su -m yum -a "name=httpd state=latest disable_gpg_check=no" -K # 关闭完整性校验,安装最新版包
ansible ta -b --become-user root --become-method su -m yum -a "name=httpd state=absent" -K # 卸载包,也可以将state设为removed
ansible ta -b --become-user root --become-method su -m yum -a "name=nginx state=latest enablerepo=local" -K # 启用本地yum源安装最新版软件包
# hostname 管理主机名称
ansible ta -b --become-user root --become-method su -m hostname -a "name=test" --ask-become-pass # 更改远程主机名
全文跳转链接
Ansible系列全文地址 :https://www.cnblogs.com/anliven/p/16859401.html
行动是绝望的解药!
欢迎转载和引用,但请在明显处保留原文链接和原作者信息!
本博客内容多为个人工作与学习的记录,少数内容来自于网络并略有修改,已尽力标明原文链接和转载说明。如有冒犯,即刻删除!
以所舍,求所得,有所获,方所成。